网站方案策划书,做印刷品的素材网站,千锋教育总部在哪里,南方建筑人才网不经意间发现#xff0c;大半年没写博客了#xff0c;自觉汗颜。实则2012后半年#xff0c;家中的事一样接着一样发生#xff0c;实在是没有时间。快过年了#xff0c;总算忙里偷闲#xff0c;把最近的一些技术成果#xff0c;总结成了文章#xff0c;与大家分享。 前些… 不经意间发现大半年没写博客了自觉汗颜。实则2012后半年家中的事一样接着一样发生实在是没有时间。快过年了总算忙里偷闲把最近的一些技术成果总结成了文章与大家分享。 前些日子也是项目需要花了一些时间研究了HTTP Live StreamingHLS技术并实现了一个HLS编码器HLSLiveEncoder当然C写的。其功能是采集摄像头与麦克风实时进行H.264视频编码和AAC音频编码并按照HLS的协议规范生成分段的标准TS文件以及m3u8索引文件。通过我的HLSLiveEncoder和第三方Http服务器例如Nginx成功实现了HTTP Live Streaming直播并在iphone上测试通过。我就把这当中的一些收获写在这里。 HLS技术要点分析 HTTP Live StreamingHLS是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议可实现流媒体的直播和点播主要应用在iOS系统为iOS设备如iPhone、iPad提供音视频直播和点播方案。HLS点播基本上就是常见的分段HTTP点播不同在于它的分段非常小。要实现HLS点播重点在于对媒体文件分段目前有不少开源工具可以使用这里我就不再讨论只谈HLS直播技术。 相对于常见的流媒体直播协议例如RTMP协议、RTSP协议、MMS协议等HLS直播最大的不同在于直播客户端获取到的并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件MPEG-TS格式而客户端则不断的下载并播放这些小文件因为服务器端总是会将最新的直播数据生成新的小文件这样客户端只要不停的按顺序播放从服务器获取到的文件就实现了直播。由此可见基本上可以认为HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输所以完全不用考虑防火墙或者代理的问题而且分段文件的时长很短客户端可以很快的选择和切换码率以适应不同带宽条件下的播放。不过HLS的这种技术特点决定了它的延迟一般总是会高于普通的流媒体直播协议。 根据以上的了解要实现HTTP Live Streaming直播需要研究并实现以下技术关键点 采集视频源和音频源的数据对原始数据进行H264编码和AAC编码视频和音频数据封装为MPEG-TS包HLS分段生成策略及m3u8索引文件HTTP传输协议 其中第1点和第2点我之前的文章中已经提到过了而最后一点我们可以借助现有的HTTP服务器所以实现第3点和第4点是关键所在。 程序框架与实现 通过以上分析实现HLS LiveEncoder直播编码器其逻辑和流程基本上很清楚了分别开启音频与视频编码线程通过DirectShow或其他技术来实现音视频采集随后分别调用libx264和libfaac进行视频和音频编码。两个编码线程实时编码音视频数据后根据自定义的分片策略存储在某个MPEG-TS格式分段文件中当完成一个分段文件的存储后更新m3u8索引文件。如下图所示 上图中HLSLiveEncoder当收到视频和音频数据后需要首先判断当前分片是否应该结束并创建新分片以延续TS分片的不断生成。需要注意的是新的分片应当从关键帧开始防止播放器解码失败。核心代码如下所示 TsMuxer的接口也是比较简单的。 HLS分段生成策略和m3u8 1. 分段策略 HLS的分段策略基本上推荐是10秒一个分片当然具体时间还要根据分好后的分片的实际时长做标注通常来说为了缓存等方面的原因在索引文件中会保留最新的三个分片地址以类似“滑动窗口”的形式进行更新。 2. m3u8文件简介 m3u8是HTTP Live Streaming直播的索引文件。m3u8基本上可以认为就是.m3u格式文件区别在于m3u8文件使用UTF-8字符编码。 #EXTM3U m3u文件头必须放在第一行
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号
#EXT-X-TARGETDURATION 每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE 是否允许cache
#EXT-X-ENDLIST m3u8文件结束符
#EXTINF extra info分片TS的信息如时长带宽等 一个简单的m3u8索引文件 运行效果 在Nginx工作目录下启动HLSLiveEncoder并用VLC播放器连接播放 通过iPhone播放的效果 haibindev.cnblogs.com合作请联系QQ。转载请注明作者和出处