最近研究模仿戰(zhàn)旗直播的app ,今天把視頻源弄到了 可以和正常線app一樣看視頻了。
首先介紹一下 HTTP Live Streaming (HLS) ,給現(xiàn)在正常做視頻直播的朋友提供一下參考。
常用的流媒體協(xié)議主要有 HTTP 漸進下載和基于 RTSP/RTP 的實時流媒體協(xié)議,這二種基本是完全不同的東西,目前比較方便又好用的是用 HTTP 漸進下載方法。在這個中 apple 公司的 HTTP Live Streaming 是這個方面的代表。它最初是蘋果公司針對iPhone、iPod、iTouch和iPad等移動設備而開發(fā)的流.現(xiàn)在見到在桌面也有很多應用了,HTML5 是直接支持這個。
但是HLS協(xié)議的小切片方式會生成大量的文件,存儲或處理這些文件會造成大量資源浪費。如果要實現(xiàn)數(shù)天的時移,索引量將會是個巨額數(shù)字,并明顯影響請求速度。因此,HLS協(xié)議對存儲I/O要求相當苛刻。對此,也有公司提出了非常好的解決方案。
新型點播服務器系統(tǒng),獨創(chuàng)了內存緩存數(shù)據實時切片技術,顛覆了這種傳統(tǒng)實現(xiàn)方法,從根本上解決了大量切片的碎片問題,使得單臺服務器的切片與打包能力不再是瓶頸。其基本原理如下:
不將TS切片文件存到磁盤,而是存在內存當中,這種技術使得服務器的磁盤上面不再會有“數(shù)以噸計”的文件碎片,極大減少了磁盤的I/O次數(shù),延長了服務器磁盤的使用壽命,極大提高了服務器運行的穩(wěn)定性。同時,由于使用這種技術,使得終端請求數(shù)據時直接從服務器的內存中獲取,極大提高了對終端數(shù)據請求的反應速度,優(yōu)化了視頻觀看體驗。
根據以上的了解要實現(xiàn)HTTP Live Streaming直播,需要研究并實現(xiàn)以下技術關鍵點
采集視頻源和音頻源的數(shù)據
對原始數(shù)據進行H264編碼和AAC編碼
視頻和音頻數(shù)據封裝為MPEG-TS包
HLS分段生成策略及m3u8索引文件
HTTP傳輸協(xié)議
1. 分段策略
HLS的分段策略,基本上推薦是10秒一個分片,當然,具體時間還要根據分好后的分片的實際時長做標注
通常來說,為了緩存等方面的原因,在索引文件中會保留最新的三個分片地址,以類似“滑動窗口”的形式,進行更新。
2. m3u8文件簡介
m3u8,是HTTP Live Streaming直播的索引文件。m3u8基本上可以認為就是.m3u格式文件,區(qū)別在于,m3u8文件使用UTF-8字符編碼。
客戶端部分
客戶端開始時回去抓取 索引文件(.m3u8/.m3u),其中用URL來標記不同的流。索引文件可以指定可用媒體文件的位置,解密的密鑰,以及任何可以切換的流。對于選中的流,客戶端會有序的下載每一個可獲得的文件。每一個文件都包含流中的連環(huán)碎片。一旦下載到足夠量的數(shù)據,客戶端會開始向用戶展示重新裝配好的媒體資源。
客戶端負責抓取任何解密密鑰,認證或者展示一個用于認證的界面,之后再解密需要的文件。
這個過程會一直持續(xù)知道出現(xiàn) 結束標記#EXT-X-ENDLIST。如果結束標記不出現(xiàn),該索引就是用于持續(xù)廣播的??蛻舳藭ㄆ诘募虞d一些新的索引文件??蛻舳藭男赂碌乃饕募腥ゲ檎壹用苊荑€并且將關聯(lián)的URL加入到請求隊列中去。
HLS 的使用
使用 HLS 需要使用一些工具,當然大部分工具都是服務器端使用的,這里簡單了解一下就行,包括 media stream segmenter, a media file segmenter, a stream validator, an id3 tag generator, a variant playlist generator.這些工具用英文注明是為了當你在蘋果開發(fā)中心中尋找時方便一些。
會話模式
通常包含 Live 和 VOD (點播)兩種
點播VOD的特點就是可以獲取到一個靜態(tài)的索引文件,其中那個包含一套完整的資源文件地址。這種模式允許客戶端訪問全部節(jié)目。VOD點播擁有先進的下載技術,包括加密認證技術和動態(tài)切換文件傳輸速率的功能(通常用于不同分辨率視頻之間的切換)。
Live會話就是實時事件的錄制展示。它的索引文件一直處于動態(tài)變化的,你需要不斷的更新索引文件 playlist 然后移除舊的索引文件。這種類型通過向索引文件添加媒體地址可以很容易的轉化為VOD類型。在轉化時不要移除原來舊的源,而是通過添加一個#ET-X-ENDLIST標記來終止實時事件。轉化時如果你的索引文件中包含EXT-X-PLAYLIST-TYPE標簽,你需要將值從EVENT改為VOD。
客戶端可以緩存m3u8
緩存和發(fā)送協(xié)議
HTTPS通常用于發(fā)送密鑰,同時,他也可以用于平時的媒體片段和索引文件的傳輸。但是當擴展性更重要時,這樣做是不推薦的。HTTPS 請求通常都是繞開 web 服務緩存,導致所有內容請求都是通過你的服務進行轉發(fā),這有悖于分布式網絡連接系統(tǒng)的目的。
處于這個原因,確保你發(fā)送的網絡內容都明白非常重要。當處于實況廣播模式時索引文件不會像分片媒體文件一樣長時間的被緩存,他會動態(tài)不停地變化。
流切換
如果你的視頻具備流切換功能,這對于用戶來說是一個非常棒的體驗,處于不同的帶寬、不同的網速播放不同清晰度的視頻流,這樣只能的流切換可以保證用戶感覺到非常流暢的觀影體驗,同時不同的設備也可以作為選擇的條件,比如視網膜屏可以再網速良好的情況下播放清晰度更高的視頻流。