发明内容
本发明旨在为众多教育培训企业和机构提供在移动互联时代背景下,将实体课堂或是传统网校搬上移动设备的一整套解决方案。整套解决方案包括三部分:流媒体直播,服务器端交互页面,移动设备客户端。
本发明为达到上述的目的,采用以下的手段。
首先使用H.264标准进行高效压缩,并针对具体的应用要求,在编码环节通过参数控制,通过使用效率更高的熵编码算法,使用更有效的运动估计搜索算法等方式提高压缩率,以获得更流畅的通信传输,压缩率能够达到MPEG4标准的1.5~2倍,接近2倍。这样就大大减少了网络传输的负担。
处理后的源视频还需要转换符合流媒体直播标准的文件,即根据网络带宽及状况的不同自动选择相应规格的视频。视频的规格分为四种,分别为只有声音(网络较差)、低画质(网络一般)、高画质(网络良好)和高清画质(网络非常好)四种规格。这也是为了增强客户体验而采取的一种机制。
为了让转换后的视频能够在客户端流畅的观看,需要将媒体文件切割成流的形式,放到服务器上,以供访问。
在本发明中流媒体的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U(m3u8)playlist文件,用于寻找可用的媒体流。
这个过程会把视频文件切割成很多个ts的文件。分割过程大多是按时间来切,根据国外的资料,建议切10s一个的文件,如果码流高可以5秒一次。流分割器会生成一个含有指向这些小TS文件指针的索引文件,索引文件后缀是.m3u8,采用扩展的M3U播放列表格式。在切割的同时,对切割好的文件进行AES-128加密,同时在m3u8文件中生成密钥。这样,对视频版权起到了一个很好的保护作用。
本发明的程序运行在基于iOS系统的设备上,包括iPhone,iPad,iPodtouch。该程序可在苹果的移动设备上点播有权限观看的,并且已经转换成媒体流的视频。在实现点播的基础之上,程序也可以选择对视频下载,在没有网络的情况下离线播放。
具体实施方式
接下来,对本发明具体的实施方式进行说明。图1是搭建流媒体直播系统的结构图,展示了媒体文件从捕捉,到转换为流的过程。图2,图3则是转换过程当中编码需要遵循的规格。图2表示了在16∶9的宽高比之下,iPhone,iPod touch,iPad需要达到的编码要求,图3表示了在16∶9的宽高比之下,iPad和Apple TV的编码设置。
如图1,搭建流媒体直播平台,首先需要有视频来源。本发明的视频来源就是由网校提供的教学视频或课件。视频不能直接使用,首先要经过处理,将视频转换为符合直播标准的流文件。首先,转换用的编解码器为h164,制式标准为PAL,FPS为25,音频为AAC格式的,输出通道为立体声,声音采样频率为48kHZ,比特率为192kbps.
转换的过程需要在Mac OS X10.6.3以上平台下完成,转换需要安装ffmpeg.首先需将视频转换成四种规格,分别是只有音频,低画质,高画质和高清画质,以便在网速不同的时候自动选取相应画质的视频。转换成视频的具体参数见图2和图3.
ffmpeg-i原视频位置-ar音频采样率-b∶a音频比特率-s视频大小-b∶v视频比特率-fps帧率-frames关键帧转换后的视频路径
这样转换好的视频会放在指定的位置上,下面就要对转换好的视频进行切割,切割成若干TS文件。切割的过程同样需要在Mac OS X平台上进行,需要预先安装苹果公司提供的切割工具:makerefmovie和streamingtools。
首先要对视频进行切割,切割要用到mediafilesegmenter命令。mediafilesegmenter命令如下:
mediafilesegmenter[媒体文件路径]
[-y|--meta-type[picture|text|id3]](三种可选类型)[-F|--meta-file meta信息的位置与名称]
[-t|--target-duration数字]每隔多少秒分割出一个ts文件,默认是10s
[-b m3u8文件中ts片段路径]
[-f m3u8与ts文件的存储路径]
[-B|--base-media-file-name ts文件的基础名,或者说是前缀][-i m3u8文件名]
[-J|--encrypt-iv[random|sequence]](随机数与ts序号两种可选类型)
[-key-rotation-period数字]每隔多少个ts文件,循环一次密钥,这个必须与[-J|-encrypt-iv sequence]共同使用,否则无效
[-I|--generate-variant-pl ist]配合variantplayl istcreator(可变播放列表的生成工具)生成可变播放列表资源(variant的plist)
[-k|--encrypt-key文件名或路径名]制定本地一个16字节的key文件,不推荐单独使用,因为这样生成的m3u8文件没有指定key的URI,还需要手动添加,太麻烦;建议与下面的参数共同使用
[-K|--encrypt-key-url<url>]填充m3u8文件中key处的URI,这样可以不再特意指定key的位置
[-n|--base-encrypt-key-name key文件的名称]在指定key文件后,会生成一个新的key文件,而ts是通过这个key文件加密的,其名称的前缀就是你的参数
[--no-floating-point-duration]为了向下兼容,避免生成具有浮点数的文件内容
[-z|--iframe-index-file名称|none]不生成iframe的m3u8文件,该参数需要与上一条配合使用
[-a|--audio-only]将视频的画面部分过滤掉,只留有音频。
通过上述方式进行切割,切割的过程如图4所示:切割后的文件包括一系列的TS文件,一个密钥文件,以及一个m3u8索引文件。索引文件中包含了所有TS文件和密钥文件的地址,即通过m3u8文件可以访问到相应的视频流。下面是m3u8的示例代码:首先是总m3u8问题,用来索引不同质量的媒体文件:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=95215,CODECS=″mp4a.40.2″
../../ios/f3/F5-5.2_P/audio-F5-5.2_P.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=841689,CODECS=″mp4a.40.2,avc1.640015″,RESOLUTION=568x320
../../ios/f3/F5-5.2_P/lo-F5-5.2_P.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1154253,CODECS=″mp4a.40.2,avcl.64001e″,RESOLUTION=852x480
../../ios/f3/F5-5.2_P/hi-F5-5.2_P.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2257139,CODECS=″mp4a.40.2,avc1.64001f″,RESOLUTION=1278x720
../../ios/f3/F5-5.2_P/hd-F5-5.2_P.m3u8
通过总m3u8,可以定位到子m3u8文件。子m3u8文件的代码结构如下:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10,
#EXT-X-KEY:METHOD=AES-128,URI=
″http://learn.chgjedu.net/media/ios/Protected/ACCACrypt10.key″
hi/hi-F5-5.2_P.mp40.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp41.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp42.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp43.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp44.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp45.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp46.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp47.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp48.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp49.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp410.ts
#EXTINF:10,
hi/hi-F5-5.2_P.mp411.tss
#EXT-X-ENDLIST
二级m3u8文件,列出了密钥文件和流媒体文件的URI,实现了媒体流的播放。
根据官方视频流转换标准,需要将源视频转换为四种质量的媒体文件,分别是只有声音,低画质,中画质,高清画质,之后转换为流媒体文件,以适应不同的网络环境下的带宽。至此,视频流转换工作结束。
接着就是客户端与服务器端的交互工作。由于客户方面无法提供网站的相应文档和数据库的文档,只能是通过添加自己的一些文件来达到目标。思路是通过客户端传入的用户名和密码来判断是否正确,若正确,则返回该用户所拥有的权限列表。同时将用户的设备MAC地址上传,以控制访问设备的台数。此外,另添加了功能验证重复登陆。由于客户方面的要求,此处无法提供相关资料。
最后,也是最重要的ACCA Online客户端。客户端主要分为四个界面:登录界面,课程列表界面,视频列表界面,视频播放界面。首先是登录界面,用户可以输入用户密码,若密码错误,会返回错误信息;若是设备MAC地址与之前的不同,会提示不允许在未授权的设备上登录;若是同一帐号同时在2个设备上登陆,会提示不允许重复登陆。如果用户名密码验证无误,则进入下一个页面,这个页面主要显示的是用户已经购买了的科目列表,点击相应的科目,可进入该科目对应的课程视频的列表。选择课程,就可以在设备上观看相应的课程了,播放器会根据当时网速的状况,自动选择相应品质的视频文件进行播放。