发明内容
本发明所要解决的技术问题是提供一种流媒体推送方法,以避免由于浏览器版本与第三方插件不兼容,导致的流媒体不能及时推送给用户,提升流媒体的推送效率。
本发明还提供了一种流媒体装置,用以保证上述方法在实际中的实现及应用。
一种流媒体推送方法,包括:
当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;
分别对获取的所述视频数据、音频数据进行编码;
将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
上述的方法,可选的,所述获取当前环境中的视频数据及音频数据,包括:
启用预先创建的采集线程,循环遍历所述当前环境中的各个视频设备及音频设备;
调用已遍历到的各个视频设备,对所述当前环境中的视频数据进行采集,并调用已遍历到的各个音频设备,对所述当前环境中的音频数据进行采集;
分别获取所述各个视频设备采集的视频数据,及各个音频设备采集的音频数据,并将获取的视频数据及音频数据,输入至接口服务Sample Grabber中。
上述的方法,可选的,所述分别对获取的所述视频数据、音频数据进行编码,包括:
启用预先创建的视频编码线程,循环的从所述Sample Grabber中的视频数据中取出视频帧,并对取出的视频帧进行编码,并将经过编码的视频帧提交至预先建立的数据缓存队列;同时,启用预先创建的音频编码线程,循环的从所述Sample Grabber中的音频数据中取出音频帧,并对取出的音频帧进行编码,并将经过编码的音频帧提交至所述预先建立的数据缓存队列;
启用预先创建的推流线程,从所述预先创建的数据缓存队列中获取视频数据和音频数据分别对应的各个编码数据,并将获取的各个编码数据封装成RTMP格式的报文数据。
上述的方法,可选的,所述将获取的各个编码数据封装成RTMP格式的报文数据,包括:
依据当前环境中每个视频设备的设备标识,对获取的各个视频编码数据分别进行组合,确定与每个视频设备对应的视频编码数据队列;并依据当前环境中每个音频设备的设备标识,对获取的各个音频编码数据分别进行组合,确定与每个音频设备对应的音频编码数据队列;
将各个所述视频编码数据队列及各个音频编码数据队列,依据其各自对应的采集时间点,组合封装为RTMP格式的报文数据。
上述的方法,可选的,还包括:
当完成对所述报文数据的推送时,向所述网页端返回推送成功的消息,以触发所述网页端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对所述已推送流媒体的预览与录制。
上述的方法,可选的,在接收到网页端发送的推送请求,获取当前环境中的视频数据及音频数据之前,还包括:
依据预设的验证规则,对所述推送请求的合法性进行验证。
一种流媒体推送装置,包括:
获取单元,用于当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;
编码单元,用于分别对获取的所述视频数据、音频数据进行编码;
推送单元,用于将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
上述的装置,可选的,所述获取单元,包括:
遍历子单元,用于启用预先创建的采集线程,循环遍历所述当前环境中的各个视频设备及音频设备;
采集子单元,用于调用已遍历到的各个视频设备,对所述当前环境中的视频数据进行采集,并调用已遍历到的各个音频设备,对所述当前环境中的音频数据进行采集;
输入子单元,用于分别获取所述各个视频设备采集的视频数据,及各个音频设备采集的音频数据,并将获取的视频数据及音频数据,输入至接口服务Sample Grabber中。
上述的装置,可选的,所述编码单元,包括:
编码子单元,用于启用预先创建的视频编码线程,循环的从所述Sample Grabber中的视频数据中取出视频帧,并对取出的视频帧进行编码,并将经过编码的视频帧提交至预先建立的数据缓存队列;同时,启用预先创建的音频编码线程,循环的从所述SampleGrabber中的音频数据中取出音频帧,并对取出的音频帧进行编码,并将经过编码的音频帧提交至所述预先建立的数据缓存队列;
封装子单元,用于启用预先创建的推流线程,从所述预先创建的数据缓存队列中获取视频数据和音频数据分别对应的各个编码数据,并将获取的各个编码数据封装成RTMP格式的报文数据。
上述的装置,可选的,所述封装子单元,包括:
第一组合模块,用于依据当前环境中每个视频设备的设备标识,对获取的各个视频编码数据分别进行组合,确定与每个视频设备对应的视频编码数据队列;并依据当前环境中每个音频设备的设备标识,对获取的各个音频编码数据分别进行组合,确定与每个音频设备对应的音频编码数据队列;
第二组合模块,用于将各个所述视频编码数据队列及各个音频编码数据队列,依据其各自对应的采集时间点,组合封装为RTMP格式的报文数据。
上述的装置,可选的,还包括:
触发单元,用于当完成对所述报文数据的推送时,向所述网页端返回推送成功的消息,以触发所述网页端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对所述已推送流媒体的预览与录制。
上述的装置,可选的,还包括:
验证单元,用于在接收到网页端发送的推送请求,获取当前环境中的视频数据及音频数据之前,依据预设的验证规则,对所述推送请求的合法性进行验证。
一种流媒体平台,包括:
网页端、本地服务器和流媒体服务器;
所述网页端与所述本地服务器通过WebSocket协议或http协议进行通信;
其中:
所述本地服务器用于,当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;分别对获取的所述视频数据、音频数据进行编码;将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
上述的流媒体平台,可选的,所述本地服务器还用于:
当完成对所述报文数据的推送时,向所述网页端返回推送成功的消息,以触发所述网页端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对所述已推送流媒体的预览与录制。
一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在的设备执行上述的流媒体推送方法。
一种电子设备,包括存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行上述的流媒体推送方法。
与现有技术相比,本发明包括以下优点:
本发明提供了一种流媒体推送方法,包括:当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;分别对获取的所述视频数据、音频数据进行编码;将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。本发明提供的方法中,网页端在需要进行流媒体推送时,发送推送请求给服务器,由服务器获取当前环境中视频设备及音频设备采集的音视频数据,并将获取的音视频数据进行编码后封装为报文数据,推送至流媒体服务器,不再使用第三方插件进行推送,避免了由于浏览器版本与第三方插件由于兼容性问题,导致推送不及时的问题,提升了流媒体的推送效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
本发明实施例提供了一种流媒体推送方法,所述方法可以应用于流媒体平台,其执行主体可以为所述流媒体平台中的本地服务器,所述方法的方法流程图如图1所示,包括:
S101:当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;
本发明实施例提供的方法中,网页端的浏览器需要推送流媒体时,可以发送推送请求给本地服务器,所述本地服务器在接收到所述推送请求时,获取当前环境中需要推流的视频数据和音频数据。
S102:分别对获取的所述视频数据、音频数据进行编码;
本发明实施例提供的方法中,本地服务器分别对需要进行推流的视频数据进行相应的视频编码,对需要进行推流的音频数据进行相应的音频编码。
S103:将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
本发明实施例提供的方法中,所述本地服务器将经过编码的视频数据和音频数据封装成RTMP格式的报文数据,然后将封装好的报文数据推送至所述流媒体服务器,以完成对当前采集的音视频数据的推流。本发明实施例中,所述RTMP为实时消息传输协议。
本发明实施例提供的方法中,依托流媒体平台,网页端的浏览器在对音视频进行推流时,不再通过第三方插件进行,直接向本地服务器发送推送请求,本地服务器在接收到所述推送请求时,所述本地服务器获取当前环境中各个视频设备采集的视频数据,及各个音频设备采集的音频数据,由所述本地服务器对获取的视频数据和音频数据分别进行编码,并对经过编码的音视频数据进行封装后,进行推送。本发明实施例提供的方法中,由本地服务器进行流媒体的推送,避免了由于浏览器版本与第三方插件可能存在不兼容,导致流媒体推送不及时的问题,提升了推送效率。
本发明实施例提供的流媒体推送方法,可以应用于流媒体平台,本发明实施例提供的流媒体平台可以包括:网页端、本地服务器和流媒体服务器,所述网页端与所述本地服务器可以通过WebSocket协议或http协议进行通信。本发明实施例提供的方法中,所述网页端可以为浏览器应用端,所述网页端设置有浏览器,所述浏览器可以为任意版本的浏览器。当用户需要通过所述浏览器对流媒体进行推送时,所述网页端向本地服务器发送推送请求。本发明实施例提供的方法中,所述本地服务器为设置在用户当前所在环境中的服务器。
本发明实施例提供的流媒体推送方法中,所述获取当前环境中的视频数据及音频数据,包括:
启用预先创建的采集线程,循环遍历所述当前环境中的各个视频设备及音频设备;
调用已遍历到的各个视频设备,对所述当前环境中的视频数据进行采集,并调用已遍历到的各个音频设备,对所述当前环境中的音频数据进行采集;
分别获取所述各个视频设备采集的视频数据,及各个音频设备采集的音频数据,并将获取的视频数据及音频数据,输入至接口服务Sample Grabber中。
本发明实施例提供的流媒体推送方法中,所述Sample Grabber为所述本地服务器中的接口服务。
本发明实施例提供的方法中,在需要进行推流的情况下,启用本地服务器中的预先创建的采集线程,循环遍历本地的各个视频设备和音频设备。本发明实施例提供的方法中,所述视频设备可以为摄像头,所述音频设备可以为麦克风。在实际应用中,与所述流媒体平台处于连接状态的视频设备可以为多个,音频设备也可以为多个。在实际的直播平台中,可以设置多个摄像头及多个麦克风,例如在直播过程中,可以设置两个摄像头采集直播人员的不同场景的视频,可以设置一个麦克风采集直播人员的音频。
本发明实施例提供的方法中,本地服务器启用采集线程,循环遍历各个视频设备和音频设备,调用处于正常运行状态的视频设备和音频设备对本地的视频数据及音频数据进行采集。
本发明实施例提供的方法中,本地服务器启用采集线程,循环遍历与所述流媒体平台相连接的各个视频设备和音频设备,所述循环遍历可以理解为,周期性的对与所述流媒体平台相连接的各个视频设备和音频设备进行遍历,例如,在第一遍历周期内启用两个视频设备,若在第二遍历周期内遍历到第三个视频设备,则对第三个视频设备也进行启用过程。所述循环遍历还可以理解为依次对与所述流媒体平台相连接的各个视频设备和音频设备进行遍历,本发明实施例提供的方法中,优选的,在推流过程中,调用将与流媒体平台相连接的,各个处于正常运行状态的视频设备和各个音频设备进行音视频数据的采集。
参考图2,示出了本发明实施例提供的流媒体推送方法中,分别对获取的所述视频数据、音频数据进行编码的具体过程,包括:
启用预先创建的视频编码线程,循环的从所述Sample Grabber中的视频数据中取出视频帧,并对取出的视频帧进行编码,并将经过编码的视频帧提交至预先建立的数据缓存队列;同时,启用预先创建的音频编码线程,循环的从所述Sample Grabber中的音频数据中取出音频帧,并对取出的音频帧进行编码,并将经过编码的音频帧提交至所述预先建立的数据缓存队列;
启用预先创建的推流线程,从所述预先创建的数据缓存队列中获取视频数据和音频数据分别对应的各个编码数据,并将获取的各个编码数据封装成RTMP格式的报文数据。
本发明实施例提供的流媒体推送方法中,优选的,对从所述Sample Grabber中的视频数据中取出视频帧进行H.264编码。对从所述Sample Grabber中的音频数据中取出音频帧进行AAC编码。
本发明实施例提供的方法中,本地服务器启用视频编码线程,循环的从SampleGrabber中取出视频帧,同时,启用音频编码线程从Sample Grabber中取出音频帧。本发明实施例中,所述Sample Grabber中缓存有各个视频设备采集的视频数据,及各个音频设备采集的音频数据。所述视频编码线程从所述Sample Grabber中的视频数据中,取出视频帧,所述循环的取出,可以理解为可以一帧一帧的取出,也可以几帧为一组取出,对取出的视频帧进行H.264编码。所述音频编码线程取出音频帧的过程,与所述视频编码线程的执行过程一致。
本发明实施例中,所述推流线程从所述数据缓存队列中获取视频数据对应的编码数据及音频数据对应的编码数据,并将获取的视频编码数据及音频编码数据进行合成,并封装成RTMP格式的报文数据。
本发明实施例中,可选的,还可以将经过编码的视频帧提交至预先建立的视频数据缓存队列,将经过编码的音频帧提交至预先建立的音频数据缓存队列,然后,在推流线程进行封装的过程中,分别从视频数据缓存队列获取视频编码数据,从所述音频数据缓存队列中,获取音频编码数据。
本发明实施例提供的方法中,所述将获取的各个编码数据封装成RTMP格式的报文数据的具体过程,可以包括:
依据当前环境中每个视频设备的设备标识,对获取的各个视频编码数据分别进行组合,确定与每个视频设备对应的视频编码数据队列;并依据当前环境中每个音频设备的设备标识,对获取的各个音频编码数据分别进行组合,确定与每个音频设备对应的音频编码数据队列;
将各个所述视频编码数据队列及各个音频编码数据队列,依据其各自对应的采集时间点,组合封装为RTMP格式的报文数据。
本发明实施例提供的方法中,在将获取的各个编码数据封装成报文数据的过程中,不同的视频设备分别采集了不同的视频数据,不同的音频设备分别采集了不同的音频数据,在进行编码的过程中,将各个视频数据的视频帧及各个音频数据中的音频帧进行了拆分,因此,在具体的封装过程中,将从数据缓存队列中获取的经过编码的视频帧及音频帧,根据其对应的设备标识进行组合,组成视频编码数据队列及音频编码数据队列。
例如:假设当前环境下,存在视频设备1、视频设备2及音频设备1,视频设备1采集当前环境中的视频数据1,视频设备2采集当前环境中的视频数据2,音频设备1采集当前环境中的音频数据。
以视频设备1为例,在编码过程中,将视频设备1采集的视频数据1中的每一个视频帧,进行H.264编码,然后将经过编码的视频帧存入数据缓存队列中,由于在编码过程中,视频设备1和视频设备2采集的视频数据均经过编码,且存入到数据缓存队列中的顺序是随机的,因此,在后续封装过程中,需要将取出的各个经过编码的视频帧,重新进行组合,本发明实施例提供的方法中,依据每个设备的设备标识对经过编码的数据进行组合。各个视频设备及音频设备对应的编码数据的组合过程一致。
本发明实施例提供的方法中,视频设备1对应经过编码的视频编码数据队列1,视频设备2对应经过编码的视频编码数据队列2,音频设备1对应经过编码的音频编码数据队列1,将上述各个编码数据队列依据其对应设备的采集时间点进行组合,例如,视频设备1对应的视频编码数据队列的采集时间点为1~10秒,音频设备1对应的音频编码数据队列的采集时间点为5~8秒,则在对各个编码数据队列进行组合封装时,将视频设备1对应的视频编码数据队列中5~8秒的部分与所述音频设备1对应的音频编码数据队列相对应的组合封装,最终将各个编码数据队列组合封装为报文数据。
本发明实施例提供的方法中,当所述本地服务器完成对所述报文数据的推送时,所述本地服务器向网页端返回推送成功的消息,以触发所述网页端的浏览器应用端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对已推送流媒体的预览与录制。
本发明实施例提供的方法中,在接收到网页端发送的推送请求,获取当前环境中的视频数据及音频数据之前,还包括:
依据预设的验证规则,对所述推送请求的合法性进行验证。
本发明实施例提供的方法中,本地服务器在接收到网页端发送的推送请求时,可以根据所述推送请求确定网页端的浏览器类型,对于不满足预设要求的浏览器,不对其所在网页端发送的推送请求进行响应,例如一些不符合法律规定的浏览器申请进行推流时,本发明实施例提供的方法不对其推流请求进行响应。
参考图3,示出了本发明实施例提供的一种流媒体推送方法的原理架构图,由图3可以看出,本发明实施例提供的方法,依托于流媒体平台,所述流媒体平台包括三部分:网页端、本地服务器和流媒体服务器。所述网页端可以为浏览器应用端。
本发明实施例中,浏览器应用端与本地服务器之间的通信数据包格式定义如下:
本发明实施例中,所述浏览器应用端主要用于与本地服务器进行通信,同时对消息处理、音视频的预览与回放,同时支持视频画中画与多路采集流画面显示的效果。
本发明实施例中,所述本地服务器是核心模块,所述本地服务器是连接浏览器应用端与流媒体服务器两者之间的桥梁。主要包括消息的处理、本地设备的音视频数据采集、音视频数据的编解码、多个音视频数据的合成、音视频数据流的传输等功能。
本发明实施例中,所指的流媒体的推送,具体指对需要传送的音频数据和视频数据进行推送。
本发明实施例中,流媒体服务器是服务端,包括音视频的编码、解码、直播、回放、分发与存储等功能。
本发明实施例提供的方法中,在浏览器应用端的WEB页面中布局音视频预览与回放的功能元素,页面中采用WEBSOCKET协议以WS或者WSS方式通过JavaScript与本地服务器建立通信连接,同时所述本地服务器向网页端提供消息事件。页面上可以触发的消息有推流\录制(0000)、回放\预览(0001)、暂停(0002)与停止(0003)。如果是低版本的IE浏览器WEB页面中还可以支持HTTP/HTTPS协议与本地服务器进行通信,本发明实施例中可以根据不同版本的浏览器来支持不同的通信协议。
本发明实施例提供的方法中,采用ActionScript技术生成音视频的预览插件,并布局在浏览器应用端中,它的功能是实现音视频的实时播放,主要设置流媒体服务的实时流的回调地址。设置形式如下所示:
<source src="rtmp://ip:port/app/streamId"type="rtmp/flv">
本发明实施例提供的方法中,在浏览器应用端的网页页面中使用video.js或者flv.js脚本库来实现音视频流的回放,具体页面配置如下,同时回放也支持跨浏览器。
<script src="rtmp://ip:port/app1/streamID"></script>
本发明实施例提供的方法中,当用户在浏览器应用端的web页面中进行流媒体推流这个功能时,首先是采集摄像头的视频数据与麦克风的音频数据,其次对视频数据进行H.264编码,并对音频数据进行AAC编码,然后将编码后的数据进行封装,封装成流媒体服务器能识别的媒体流。从音视频的采集、编码、封装到推流这一过程,本发明实施例提供的方法中,在网页页面中通过WS或HTTP协议与本地服务器进行通信,并触发推流消息0000,通过0000消息事件来驱动本地服务器。
本发明实施例提供的方法中,本地服务器是以服务形式随着操作系统而启动,服务启动后,会初始化一些本地资源如遍历摄像头、麦克风、扬声器等设备的数量与属性,并确定每个设备的设备能力;对视频设备而言,设置视频的分辨率、码率、帧率;对音频设备而言,设置音频的采样率与音频码率;流媒体服务推流地址的设置等。同时会开启消息事件处理线程来接收浏览器应用端发送的事件消息,当收到0000消息事件后,首先,本地服务器会判断消息的合法性,然后采用DirectShow方式或OpenCV调用本地摄像头与麦克风来捕获音视频数据。通过采集摄像头视频和麦克风等设备的音频数据后,分别进行H.264和AAC编码,然后将编码后的音视频数据封装成RTMP格式的报文数据发送到流媒体服务器,实现视频的实时直播。如果推送RTMP格式的报文数据成功发布到流媒体服务器后,本地服务器会向浏览器应用端返回推流成功的信息。
本发明实施例提供的方法中,浏览器应用端收到本地服务器的返回信息后,浏览器应用端的ActionScrtip插件立即通过原先设置好的JS脚本来回调流媒体服务器的推流地址,从而达到实时拉取RTMP流实现音视频预览与录制的目的。如果用户在浏览器应用端触发停止的消息事件,本地服务器就会收到0003消息事件,收到0003消息后,本地服务器会设置推流线程中的停止标识来结束本次推流,此时,浏览器应用端收到本地服务器的返回信息后就会结束视频预览与录制功能。
本发明实施例中,如果浏览器应用端用户想回放某段历史视频,可以在JS脚本中设置回放媒体流的回放地址就可实现,本发明实施例提供的方法中,支持按码流串ID来回放。
本发明实施例提供的方法中,还实现了本地采集多个音视频数据的同时合成多路音视频流并推送到流媒体服务端。本发明实施例提供的方法中,采用DirectShow来实现IsampleGrabberCB接口,通过回调来保留每个音视频的数据缓存,主要用4个线程来处理,采集线程、视频编码线程与音频编码线程、推流线程。采集线程主要是循环遍历视频设备(摄像头)与音频设备(麦克风)的数据与能力,采集线程中获取的音视频数据会一直往SampleGrabber中送数据。视频编码线程是循环地从SampleGrabber中取出视频帧进行H264方式编码;音频编码线程也会循环地从SampleGrabber中取出音频帧进行AAC方式编码;因为要实现本地音视频数据的合并,所以设计一个数据缓存队列来完成,音视频的编码线程将数据提交给数据缓存队列后立刻返回,此时的推流线程不断地从数据缓存队列中获取音视频的编码数据并封装成RTMP数据包发送给服务端,完成了本地边采集边合成并且推送给流媒体服务器的功能。
本发明实施例中,对于不同视频和音频的合并图示,可以参见,本发明实施例提供的图4及图5,示出了多路音视频数据合成后的显示画面。本发明实施例中,多路音视频数据可以合并为一个总体的显示画面。例如在图4及图5中,两路视频数据可以以画中画的形式进行显示。
与图1所述的方法相对应的,本发明实施例还提供了一种流媒体推送装置,用于对图1中方法的具体实现,本发明实施例提供的流媒体推送装置设置在流媒体平台中的本地服务器中,其结构示意图如图6所示,具体包括:
获取单元201,用于当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;
编码单元202,用于分别对获取的所述视频数据、音频数据进行编码;
推送单元203,用于将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
本发明实施例提供的流媒体推送装置,依托流媒体平台,在对音视频进行推流时,不再通过第三方插件进行,直接向本地服务器发送推送请求,并在本地服务器接收到所述推送请求时,获取当前环境中各个视频设备采集的视频数据,及各个音频设备采集的音频数据,对获取的视频数据和音频数据分别进行编码,并对经过编码的音视频数据进行封装后,进行推送。本发明实施例提供的方法中,由本地服务器中的流媒体推送装置进行流媒体的推送,避免了由于浏览器版本与第三方插件可能存在不兼容,导致流媒体推送不及时的问题,提升了推送效率。
本发明实施例提供的流媒体推送装置中,所述获取单元,包括:
遍历子单元,用于启用预先创建的采集线程,循环遍历所述当前环境中的各个视频设备及音频设备;
采集子单元,用于调用已遍历到的各个视频设备,对所述当前环境中的视频数据进行采集,并调用已遍历到的各个音频设备,对所述当前环境中的音频数据进行采集;
输入子单元,用于分别获取所述各个视频设备采集的视频数据,及各个音频设备采集的音频数据,并将获取的视频数据及音频数据,输入至接口服务Sample Grabber中。
所述编码单元,包括:
编码子单元,用于启用预先创建的视频编码线程,循环的从所述Sample Grabber中的视频数据中取出视频帧,并对取出的视频帧进行编码,并将经过编码的视频帧提交至预先建立的数据缓存队列;同时,启用预先创建的音频编码线程,循环的从所述SampleGrabber中的音频数据中取出音频帧,并对取出的音频帧进行编码,并将经过编码的音频帧提交至所述预先建立的数据缓存队列;
封装子单元,用于启用预先创建的推流线程,从所述预先创建的数据缓存队列中获取视频数据和音频数据分别对应的各个编码数据,并将获取的各个编码数据封装成RTMP格式的报文数据。
所述封装子单元,包括:
第一组合模块,用于依据当前环境中每个视频设备的设备标识,对获取的各个视频编码数据分别进行组合,确定与每个视频设备对应的视频编码数据队列;并依据当前环境中每个音频设备的设备标识,对获取的各个音频编码数据分别进行组合,确定与每个音频设备对应的音频编码数据队列;
第二组合模块,用于将各个所述视频编码数据队列及各个音频编码数据队列,依据其各自对应的采集时间点,组合封装为RTMP格式的报文数据。
本发明实施例提供的流媒体推送装置中,还包括:
触发单元,用于当完成对所述报文数据的推送时,向所述网页端返回推送成功的消息,以触发所述网页端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对所述已推送流媒体的预览与录制。
验证单元,用于在接收到网页端发送的推送请求,获取当前环境中的视频数据及音频数据之前,依据预设的验证规则,对所述推送请求的合法性进行验证。
与图1所述的方法相对应的,本发明实施例还提供了一种流媒体平台,用于对图1中方法的硬件实现,本发明实施例提供的流媒体平台,其结构示意图如图7所示,具体包括:
网页端301、本地服务器302和流媒体服务器303,所述网页端301与所述本地服务器302通过WebSocket协议或http协议进行通信;所述本地服务器302,用于所述本地服务器用于,当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;分别对获取的所述视频数据、音频数据进行编码;将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器303。
本发明实施例提供的流媒体平台,网页端在对音视频进行推流时,不再通过第三方插件进行,直接向本地服务器发送推流消息事件,本地服务器在接收到所述推流消息事件时,所述本地服务器获取本地各个视频设备采集的视频数据,及本地各个音频设备采集的音频数据,由所述本地服务器对获取的视频数据和音频分别进行编码,并对经过编码的音视频数据进行封装后,进行推送。本发明实施例提供的流媒体平台,由本地服务器进行流媒体的推送,避免了由于浏览器版本与第三方插件可能存在不兼容,导致流媒体推送不及时的问题,提升了推送效率。
参考图8,示出了本发明实施例提供的流媒体平台的又一结构示意图,所述本地服务器包括:
触发单元304,用于当所述本地服务器完成对所述报文数据的推送时,所述本地服务器向所述浏览器应用端返回推送成功的消息,以触发所述浏览器应用端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对已推送流媒体的预览与录制。
验证单元305,用于当所述本地服务器接收到所述网页端发送的推流消息事件时,对所述推流消息事件的合法性进行验证。
本发明实施例提供的流媒体平台中,所述本地服务器中包含的触发单元和验证单元,与上述实施例中提及的流媒体推送装置中涉及的触发单元及验证单元相同。
本发明实施例还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在的设备执行上述一种流媒体推送方法,所述方法包括:
当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;
分别对获取的所述视频数据、音频数据进行编码;
将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
上述的方法,优选的,所述获取当前环境中的视频数据及音频数据,包括:
启用预先创建的采集线程,循环遍历所述当前环境中的各个视频设备及音频设备;
调用已遍历到的各个视频设备,对所述当前环境中的视频数据进行采集,并调用已遍历到的各个音频设备,对所述当前环境中的音频数据进行采集;
分别获取所述各个视频设备采集的视频数据,及各个音频设备采集的音频数据,并将获取的视频数据及音频数据,输入至接口服务Sample Grabber中。
上述的方法,优选的,所述分别对获取的所述视频数据、音频数据进行编码,包括:
启用预先创建的视频编码线程,循环的从所述Sample Grabber中的视频数据中取出视频帧,并对取出的视频帧进行编码,并将经过编码的视频帧提交至预先建立的数据缓存队列;同时,启用预先创建的音频编码线程,循环的从所述Sample Grabber中的音频数据中取出音频帧,并对取出的音频帧进行编码,并将经过编码的音频帧提交至所述预先建立的数据缓存队列;
启用预先创建的推流线程,从所述预先创建的数据缓存队列中获取视频数据和音频数据分别对应的各个编码数据,并将获取的各个编码数据封装成RTMP格式的报文数据。
上述的方法,优选的,所述将获取的各个编码数据封装成RTMP格式的报文数据,包括:
依据当前环境中每个视频设备的设备标识,对获取的各个视频编码数据分别进行组合,确定与每个视频设备对应的视频编码数据队列;并依据当前环境中每个音频设备的设备标识,对获取的各个音频编码数据分别进行组合,确定与每个音频设备对应的音频编码数据队列;
将各个所述视频编码数据队列及各个音频编码数据队列,依据其各自对应的采集时间点,组合封装为RTMP格式的报文数据。
上述的方法,优选的,还包括:
当完成对所述报文数据的推送时,向所述网页端返回推送成功的消息,以触发所述网页端回调所述流媒体服务器的推流地址,对已推送至所述流媒体服务器中的报文数据进行拉取,以实现对所述已推送流媒体的预览与录制。
上述的方法,优选的,在接收到网页端发送的推送请求,获取当前环境中的视频数据及音频数据之前,还包括:
依据预设的验证规则,对所述推送请求的合法性进行验证。
本发明实施例还提供了一种电子设备,其结构示意图如图9所示,具体包括存储器401,以及一个或者一个以上的程序402,其中一个或者一个以上程序402存储于存储器401中,且经配置以由一个或者一个以上处理器403执行所述一个或者一个以上程序402包含用于进行以下操作的指令:
当接收到网页端发送的推送请求时,获取当前环境中的视频数据及音频数据;
分别对获取的所述视频数据、音频数据进行编码;
将经过编码的视频数据和音频数据封装成实时消息传输协议RTMP格式的报文数据,并将所述报文数据推送至流媒体服务器。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上对本发明所提供的一种流媒体推送方法及装置、流媒体平台进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。