常用的流媒體協(xié)議主要有 HTTP 漸進(jìn)下載和基于 RTSP/RTP 的實(shí)時(shí)流媒體協(xié)議,這二種基本是完全不同的東西,目前比較方便又好用的我建議使用 HTTP 漸進(jìn)下載的方法。在這個(gè)中 apple 公司的 HTTP Live Streaming 是這個(gè)方面的代表。它最初是蘋果公司針對(duì)iPhone、iPod、iTouch和iPad等移動(dòng)設(shè)備而開發(fā)的流.現(xiàn)在見到在桌面也有很多應(yīng)用了, HTML5 是直接支持這個(gè)。
我們可以看看 HTTP Live Streaming 是怎么樣工作的。平時(shí)的直播技術(shù)中,播放模式中必須等待整個(gè)文件下載完才行,在 HLS 技術(shù)中 Web 服務(wù)器向客戶端提供接近實(shí)時(shí)的音視頻流。但在使用的過程中是使用的標(biāo)準(zhǔn)的 HTTP 協(xié)議,所以這時(shí),只要使用 HLS 的技術(shù),就能在普通的 HTTP 的應(yīng)用上直接提供點(diǎn)播和直播。
要詳細(xì)了解原理,我們先看看這個(gè)所需要的步驟。
視頻采集 ->編碼器 -> 流分割 -> 普通 web 服務(wù)(索引文件和視頻文件) -> 客戶端
內(nèi)容準(zhǔn)備的過程大約二種,一是視頻采集,編碼器首先將攝像機(jī)實(shí)時(shí)采集的音視頻數(shù)據(jù)壓縮編碼為符合特定標(biāo)準(zhǔn)的音視頻基本流,也可以拿編碼完了的文件,有一點(diǎn)必須保證,就是一定要使用H.264視頻和AAC音頻,因?yàn)榘l(fā)明這個(gè)的是蘋果公司,只支持這個(gè)。然后給這些封裝成成為符合MPEG-2(MPEG 2 TS、MPEG2 PS之所以使用這個(gè),主要是因?yàn)槁曇艉鸵曨l會(huì)交織在一起,也會(huì)有關(guān)鍵幀來讓視頻可以直接播放).
流分割部分在這個(gè)中,比起 RTSP 之類和普通點(diǎn)播的最大不同,就是他會(huì)給 MPEG-2 分割成很多個(gè) ts 的文件。分割過程大多是按時(shí)間來切,根據(jù)國(guó)外的資料,建議切 10s 一個(gè)的文件,如果碼流高可以 5 秒一次。在分割還有一點(diǎn)不同,就是這時(shí)流分割器會(huì)生成一個(gè)含有指向這些小TS文件指針的索引文件
所以這個(gè)文件也必須在 web 服務(wù)器上,不能少。每多 10s 時(shí),就會(huì)多一個(gè) ts 文件,所以索引也會(huì)根著修改成最新的幾段視頻。
最后,這些切分了的小的一系列的 ts 文件,放到普通的 web 服務(wù)器中就行了。這時(shí)在 CDN 中也是一樣,因?yàn)檎?qǐng)求這些文件會(huì)使用標(biāo)準(zhǔn)的 HTTP 協(xié)議。索引文件后綴是.m3u8 ,索引文件采用擴(kuò)展的M3U播放列表格式,其實(shí)就一文本。
內(nèi)部的視頻的地址會(huì)是如下
http://media.example.com/s_96ksegment1.tshttp://media.example.com/s_96ksegment2.tshttp://media.example.com/s_96ksegment3.ts
所以這時(shí)可以直接做 Cache 和直接放到 Web 服務(wù)器中,簡(jiǎn)單方便。
如果 MIME 的信息輸出不對(duì)的話,記的要修改這加入 ts 和 m3u8 的后綴支持
.m3u8 application/x-mpegURL.ts video/MP2T
最后就是客戶端,如果是 HTML 直接在 HTML5 中直接支持這種視頻可以使用如下標(biāo)簽
<video tabindex="0" height="480" width="640"> <source src="/content1/content1.m3u8"> </video>
如果是應(yīng)用客戶端(Safari QuickTime之類),就得裝軟件來支持,客戶端會(huì)根據(jù)選擇的流的索引來下載文件,當(dāng)下載了最少二段后開始播放。直接 m3u8 的索引結(jié)束。另外,HTTP可以設(shè)計(jì)成的自適應(yīng)比特率流,在不同網(wǎng)絡(luò)環(huán)境,選擇下載不同碼流的視頻。
所以整個(gè) HTTP Live Streaming 無論是直播還是點(diǎn)播,都能做到近似實(shí)時(shí)的方式來進(jìn)行流播放。理論的最小時(shí)延是每個(gè)切片的長(zhǎng).
目前本協(xié)議加入了 IETF 的草案建議
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt
如果網(wǎng)站也想使用這種來做視頻請(qǐng)看 iPhone HTTP 流與 FFMpeg 和開放的源 Segmenter
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
Akamai
聯(lián)系客服