本发明属于互联网流媒体技术领域,涉及一种无客户端的跨平台视频播放实现方法。
背景技术:
随着互联网的高速发展,视频监控类应用的物联网设备的增多,人们通过pc端web浏览器或手机客户端观看视频的需求逐步增多,传统的实时传输协议(rtp)、实时流传输协议(rtsp)等流媒体协议已逐渐显示其中的缺点,服务端实现、部署复杂度高,需要开放单独的网络端口,容易被网络防火前拦截等。而传统的基于http协议的流媒体服务器,虽然部署简单,不需单独的网络端口,但其对实时视频流的支持较差,且需要安装flash插件来支持视频播放,难以做到跨平台来满足大众的需求。
因此,研究一种跨平台性能好、无需专用播放器或插件支持的物联网设备视频播放方法,具有巨大的实际应用价值。
技术实现要素:
本发明的目的是提供一种无客户端的跨平台视频播放实现方法,解决了现有技术中视频播放跨平台性差,需要专用的客户端或浏览器插件支持,服务端安装部署麻烦的问题。
本发明采用的技术方案是,一种无客户端的跨平台视频播放实现方法,按照以下步骤实施:
步骤1、客户端向流媒体服务器发起视频请求
1.1)启动流媒体服务器,解析配置文件,创建rpc线程并绑定至特定端口,监听客户端连接的到来;
1.2)web客户端读取数据库中保存的摄像机列表显示至web界面供用户选择;
1.3)根据用户所选的具体摄像机编号、通道号向流媒体服务器rpc接口发起视频请求;
步骤2、流媒体服务器对web客户端请求进行解析处理;
步骤3、web客户端向流媒体服务器发起http请求;
步骤4、流媒体服务器通过http协议传递特定视频分片至web客户端;
步骤5、web客户端解析视频分片内容并播放。
本发明的有益效果是,结合dash协议和视频监控的特点,通过对dash协议的实时性增强和优化等改进,实现了实时和历史视频播放。服务端按照dash视频流支持的格式对原始视频进行处理,生成mpd索引文件和视频分片文件,客户端采用html5+mse技术完成视频流的播放,用户无需单独安装flash插件或特定播放器软件,即可自适应不同视频流中分辨率、帧率的改变,借助浏览器能够很好的在android、ios、windows、linux等不同平台阅览视频,支持实时视频和历史视频的调阅,增强用户体验。
附图说明
图1为本发明方法的整体框架图;
图2为本发明方法rpc模块交互流程图;
图3为本发明视频播放过程中http交互图。
具体实施方式
以下本文中的流媒体服务器是指装有服务端程序的pc机,web客户端是指支持html5和mse扩展的web浏览器。
本发明采用html5+mse(mediasourceextensions)技术,从工程角度实现mpeg-dash协议,实现了无客户端的视频播放方法。
如图1所示,流媒体服务器由rpc模块、dash视频流处理模块、http服务模块三部分构成,其中rpc模块负责和客户端进行通信并处理客户端视频请求;dash视频流处理模块负责将原始视频流数据打包成mpeg-dash支持的格式,产生视频分片文件和mpd索引文件存储在服务器端;http服务模块负责视频分片文件的传输。
本发明方法,基于上述的流媒体服务器架构,按照以下步骤实施:
步骤1、客户端向流媒体服务器发起视频请求
1.1)启动流媒体服务器,解析配置文件,创建rpc线程并绑定至特定端口(默认为8090,用于和web客户端进行rpc通讯),监听客户端连接的到来;
1.2)web客户端读取数据库中保存的摄像机列表显示至web界面供用户选择;
1.3)根据用户所选的具体摄像机编号、通道号向流媒体服务器rpc接口发起视频请求;
步骤2、流媒体服务器对web客户端请求进行解析处理
2.1)解析客户端请求命令;
2.2)创建视频处理线程,将原始h.264格式的视频流数据打包处理成mpeg-dash所需的格式,生成mpd索引文件和视频分片并存储于服务器端;
2.3)采用统一命名规范对视频分片进行命名处理;
2.4)通过rpc接口返回mpd文件所在的虚拟url至web客户端;
步骤3、web客户端向流媒体服务器发起http请求
3.1)根据rpc接口返回的url向流媒体服务器发起httpget请求,下载mpd文件;
3.2)解析mpd索引文件,获得媒体持续时间、比特率、分片url等媒体特征信息;
3.3)根据视频分片1的url向流媒体服务器发起http请求;
步骤4、流媒体服务器通过http协议传递特定视频分片至web客户端
4.1)解析web客户端的http请求;
4.2)根据web客户端的请求url,流媒体服务器查找该url对应的视频分片文件;
4.3)调用readfile()函数读取视频分片文件,通过httpsendhttpresponse()方法返回视频分片数据至web客户端;
步骤5、web客户端解析视频分片内容并播放
5.1)web客户端解析视频分片内容并进行播放;
5.2)开启自适应机制,通过一定的策略估算网络带宽,调整下一次请求视频分片的比特率,继续向流媒体服务器请求下一个视频分片,直至视频播放完成。
实施例
步骤1、客户端向流媒体服务器发起视频请求
1.1)启动流媒体服务器,解析配置文件,创建rpc线程并绑定至特定端口(默认为8090,用于和web客户端进行rpc通讯),监听客户端连接的到来;
1.2)web客户端读取数据库中保存的摄像机列表显示至web界面供用户选择;
1.3)根据用户所选的具体摄像机编号、通道号向流媒体服务器rpc接口发起视频请求;
步骤2、流媒体服务器对web客户端请求进行解析处理
2.1)解析客户端请求命令;
2.2)创建视频处理线程,将原始h.264格式的视频流数据打包处理成mpeg-dash所需的格式,生成mpd索引文件和视频分片并存储于服务器端,mpd索引文件以xml格式存在,主要由mpd、period、adaptationset、representation、segmenttemplate标签构成。其中mpd标签中的type属性代表视频属性是实时视频或历史视频,minbuffertime属性代表视频的最小缓存时间,mediapresentationduration属性代表节目的总播放时间;adaptationset标签中的contenttype属性代表媒体的呈现方式,包括视频、音频或字幕;representaiton标签中codecs属性代表视频编解码器类型,minitype属性代表视频格式,width、height、framerate属性分别代表该视频分片的宽度、高度、帧率信息。segmenttemplate标签中timescale属性表示切片的时间轴,其生成的视频切片名用$number$标识,表示该部分由具体的数字来表示;
2.3)采用统一命名规范对视频分片进行命名处理,切片文件名由视频文件名称和切片序号两部分组成,所有的视频片段都以“live-video-sd-”开头,按固定顺序连接视频片段的序号“1”,“2”……;
2.4)通过rpc接口返回mpd文件所在的虚拟url至web客户端,rpc模块通信的完整流程如图2所示,首先创建rpc线程,监听web客户端连接,在收到客户端视频请求后对其进行解析,然后调用视频处理线程对原始视频流进行处理,等待视频分片的产生。当流媒体服务器端产生视频分片后,返回mpd文件url至web端,否则返回相应的错误编码;
步骤3、web客户端向流媒体服务器发起http请求
3.1)根据rpc接口返回的url向流媒体服务器发起httpget请求,下载mpd文件;
3.2)解析mpd索引文件,获得媒体持续时间、比特率、分片url等媒体特征信息;
3.3)根据视频分片1的url向流媒体服务器发起httpget请求;
步骤4、流媒体服务器通过http协议传递特定视频分片至web客户端
4.1)解析web客户端的http请求;
4.2)根据web客户端的请求url,流媒体服务器查找该url对应的视频分片文件;
4.3)调用readfile()函数读取视频分片文件,通过httpsendhttpresponse()方法返回视频分片数据至web客户端;
步骤5、web客户端解析视频分片内容并播放
5.1)web客户端解析视频分片1的内容并进行播放;
5.2)开启自适应机制,通过一定的策略估算网络带宽,调整下一次请求视频分片的比特率,继续向流媒体服务器请求下一个视频分片,直至视频播放完成,http请求过程的交互逻辑如图3所示。
本发明的方法,流媒体服务器部署在windows平台,由windows服务统一进行管理,web客户端为支持html5和mse扩展的浏览器。web端用户在登录成功后,根据所选摄像机编号,向流媒体服务器发起视频请求,在获得视频流后对其进行解析处理,完成视频画面的播放。与传统的web端视频流播放相比,本发明方法无需特定的flash插件支持,跨平台性强,用户可在任一时间、任一地点完成视频流的阅览。