(HLS播放器之一)HLS协议之M3U8解析

参照 http://tools.ietf.org/html/draft-pantos-http-live-streaming-08, 可以对M3U8有比较系统的认识。

HLS(HTTP Live Streaming)是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的基于HTTP协议的流媒体解决方案。在 HLS 技术中 Web 服务器向客户端提供接近实时的音视频流。但在使用的过程中是使用的标准的 HTTP 协议,所以这时,只要使用 HLS 的技术,就能在普通的 HTTP 的应用上直接提供点播和直播。在App Store中的视频相关的应用,基本都是应用的此种技术。该技术基本原理是将视频文件或视频流切分成小片(ts)并建立索引文件(m3u8)。支持的视频流编码为H.264,音频流编码为AAC。
好了,我开始说说我的吧。如下

#EXTM3U #EXT-X-TARGETDURATION:15 
#EXTINF:7, http://data.video.qiyi.com/videos/movie/20111225/f9eb21f9247aafb04b39cc5bba13afa1.ts?start=0&end=658512&hsize=5343&tag=0&v=7620766549&contentlength=229360 
#EXTINF:14, http://data.video.qiyi.com/videos/movie/20111225/f9eb21f9247aafb04b39cc5bba13afa1.ts?start=1712&end=2720295&hsize=5343&tag=1&v=7620766549&contentlength=1544984 
#EXTINF:10, http://data.video.qiyi.com/videos/movie/20111225/f9eb21f9247aafb04b39cc5bba13afa1.ts?start=658512&end=3785637&hsize=5343&tag=1&v=7620766549&contentlength=1082880
//省略...
#EXT-X-DISCONTINUITY 
#EXTINF:9, http://data.video.qiyi.com/videos/movie/20111225/f2eab9af69495077eea62a17029b0c9b.ts?start=0&end=836062&hsize=14301&tag=0&v=7620766549&contentlength=408148 
#EXTINF:10, http://data.video.qiyi.com/videos/movie/20111225/f2eab9af69495077eea62a17029b0c9b.ts?start=1748&end=1489908&hsize=14301&tag=1&v=7620766549&contentlength=493500 
#EXTINF:10, http://data.video.qiyi.com/videos/movie/20111225/f2eab9af69495077eea62a17029b0c9b.ts?start=377373&end=2159598&hsize=14301&tag=1&v=7620766549&contentlength=694660
//省略...
#EXT-X-ENDLIST

这就是简略的M3U8文件。其中要注意#EXTINF:[int/double],表示这个片段的总时长,这个字段很关键我们可以通过它找见跳转位置的TS片段; #EXT-X-DISCONTINUITY,表示一个新的时间点开始,也就是说数据流的时间戳从此刻开始从0开始。那你可要准备好换算了,否则IMediaSeeking::SetPositions可就找不见了哦。当然有部分M3U8没有这个字段,大部分是影片总长度比较小的(不是绝对的哦)。
剩下的事情就是解析字符串的了,不累赘了。还有就是最好将时间列表和ts地址列表分离开来,使用起来会更方便因为大部分时候是多线程的情况。