移動(dòng)端直播那點(diǎn)事

最近研究模仿戰(zhàn)旗直播的app 桨醋,今天把視頻源弄到了 可以和正常線app一樣看視頻了。

首先介紹一下 HTTP Live Streaming (HLS) 现斋,給現(xiàn)在正常做視頻直播的朋友提供一下參考喜最。

常用的流媒體協(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)在見(jiàn)到在桌面也有很多應(yīng)用了,HTML5 是直接支持這個(gè)倦西。

但是HLS協(xié)議的小切片方式會(huì)生成大量的文件能真,存儲(chǔ)或處理這些文件會(huì)造成大量資源浪費(fèi)。如果要實(shí)現(xiàn)數(shù)天的時(shí)移,索引量將會(huì)是個(gè)巨額數(shù)字粉铐,并明顯影響請(qǐng)求速度疼约。因此,HLS協(xié)議對(duì)存儲(chǔ)I/O要求相當(dāng)苛刻蝙泼。對(duì)此程剥,也有公司提出了非常好的解決方案。

新型點(diǎn)播服務(wù)器系統(tǒng)汤踏,獨(dú)創(chuàng)了內(nèi)存緩存數(shù)據(jù)實(shí)時(shí)切片技術(shù)织鲸,顛覆了這種傳統(tǒng)實(shí)現(xiàn)方法,從根本上解決了大量切片的碎片問(wèn)題溪胶,使得單臺(tái)服務(wù)器的切片與打包能力不再是瓶頸搂擦。其基本原理如下:

不將TS切片文件存到磁盤,而是存在內(nèi)存當(dāng)中哗脖,這種技術(shù)使得服務(wù)器的磁盤上面不再會(huì)有“數(shù)以噸計(jì)”的文件碎片盾饮,極大減少了磁盤的I/O次數(shù),延長(zhǎng)了服務(wù)器磁盤的使用壽命懒熙,極大提高了服務(wù)器運(yùn)行的穩(wěn)定性丘损。同時(shí),由于使用這種技術(shù)工扎,使得終端請(qǐng)求數(shù)據(jù)時(shí)直接從服務(wù)器的內(nèi)存中獲取徘钥,極大提高了對(duì)終端數(shù)據(jù)請(qǐng)求的反應(yīng)速度,優(yōu)化了視頻觀看體驗(yàn)肢娘。

根據(jù)以上的了解要實(shí)現(xiàn)HTTP Live Streaming直播呈础,需要研究并實(shí)現(xiàn)以下技術(shù)關(guān)鍵點(diǎn)

采集視頻源和音頻源的數(shù)據(jù)

對(duì)原始數(shù)據(jù)進(jìn)行H264編碼和AAC編碼

視頻和音頻數(shù)據(jù)封裝為MPEG-TS包

HLS分段生成策略及m3u8索引文件

HTTP傳輸協(xié)議


1. 分段策略

HLS的分段策略,基本上推薦是10秒一個(gè)分片橱健,當(dāng)然而钞,具體時(shí)間還要根據(jù)分好后的分片的實(shí)際時(shí)長(zhǎng)做標(biāo)注

通常來(lái)說(shuō),為了緩存等方面的原因拘荡,在索引文件中會(huì)保留最新的三個(gè)分片地址臼节,以類似“滑動(dòng)窗口”的形式,進(jìn)行更新珊皿。

2. m3u8文件簡(jiǎn)介

m3u8网缝,是HTTP Live Streaming直播的索引文件。m3u8基本上可以認(rèn)為就是.m3u格式文件蟋定,區(qū)別在于粉臊,m3u8文件使用UTF-8字符編碼。


客戶端部分

客戶端開始時(shí)回去抓取 索引文件(.m3u8/.m3u)驶兜,其中用URL來(lái)標(biāo)記不同的流扼仲。索引文件可以指定可用媒體文件的位置远寸,解密的密鑰,以及任何可以切換的流屠凶。對(duì)于選中的流驰后,客戶端會(huì)有序的下載每一個(gè)可獲得的文件。每一個(gè)文件都包含流中的連環(huán)碎片阅畴。一旦下載到足夠量的數(shù)據(jù),客戶端會(huì)開始向用戶展示重新裝配好的媒體資源迅耘。

客戶端負(fù)責(zé)抓取任何解密密鑰贱枣,認(rèn)證或者展示一個(gè)用于認(rèn)證的界面,之后再解密需要的文件颤专。

這個(gè)過(guò)程會(huì)一直持續(xù)知道出現(xiàn) 結(jié)束標(biāo)記#EXT-X-ENDLIST纽哥。如果結(jié)束標(biāo)記不出現(xiàn),該索引就是用于持續(xù)廣播的栖秕〈核客戶端會(huì)定期的加載一些新的索引文件〈睾矗客戶端會(huì)從新更新的索引文件中去查找加密密鑰并且將關(guān)聯(lián)的URL加入到請(qǐng)求隊(duì)列中去只壳。

HLS 的使用

使用 HLS 需要使用一些工具,當(dāng)然大部分工具都是服務(wù)器端使用的暑塑,這里簡(jiǎn)單了解一下就行吼句,包括 media stream segmenter, a media file segmenter, a stream validator, an id3 tag generator, a variant playlist generator.這些工具用英文注明是為了當(dāng)你在蘋果開發(fā)中心中尋找時(shí)方便一些。


會(huì)話模式

通常包含 Live 和 VOD (點(diǎn)播)兩種

點(diǎn)播VOD的特點(diǎn)就是可以獲取到一個(gè)靜態(tài)的索引文件事格,其中那個(gè)包含一套完整的資源文件地址惕艳。這種模式允許客戶端訪問(wèn)全部節(jié)目。VOD點(diǎn)播擁有先進(jìn)的下載技術(shù)驹愚,包括加密認(rèn)證技術(shù)和動(dòng)態(tài)切換文件傳輸速率的功能(通常用于不同分辨率視頻之間的切換)远搪。

Live會(huì)話就是實(shí)時(shí)事件的錄制展示。它的索引文件一直處于動(dòng)態(tài)變化的逢捺,你需要不斷的更新索引文件 playlist 然后移除舊的索引文件谁鳍。這種類型通過(guò)向索引文件添加媒體地址可以很容易的轉(zhuǎn)化為VOD類型。在轉(zhuǎn)化時(shí)不要移除原來(lái)舊的源劫瞳,而是通過(guò)添加一個(gè)#ET-X-ENDLIST標(biāo)記來(lái)終止實(shí)時(shí)事件棠耕。轉(zhuǎn)化時(shí)如果你的索引文件中包含EXT-X-PLAYLIST-TYPE標(biāo)簽,你需要將值從EVENT改為VOD柠新。

客戶端可以緩存m3u8

緩存和發(fā)送協(xié)議

HTTPS通常用于發(fā)送密鑰窍荧,同時(shí),他也可以用于平時(shí)的媒體片段和索引文件的傳輸恨憎。但是當(dāng)擴(kuò)展性更重要時(shí)蕊退,這樣做是不推薦的郊楣。HTTPS 請(qǐng)求通常都是繞開 web 服務(wù)緩存,導(dǎo)致所有內(nèi)容請(qǐng)求都是通過(guò)你的服務(wù)進(jìn)行轉(zhuǎn)發(fā)瓤荔,這有悖于分布式網(wǎng)絡(luò)連接系統(tǒng)的目的净蚤。

處于這個(gè)原因,確保你發(fā)送的網(wǎng)絡(luò)內(nèi)容都明白非常重要输硝。當(dāng)處于實(shí)況廣播模式時(shí)索引文件不會(huì)像分片媒體文件一樣長(zhǎng)時(shí)間的被緩存今瀑,他會(huì)動(dòng)態(tài)不停地變化。

流切換

如果你的視頻具備流切換功能点把,這對(duì)于用戶來(lái)說(shuō)是一個(gè)非常棒的體驗(yàn)橘荠,處于不同的帶寬、不同的網(wǎng)速播放不同清晰度的視頻流郎逃,這樣只能的流切換可以保證用戶感覺(jué)到非常流暢的觀影體驗(yàn)哥童,同時(shí)不同的設(shè)備也可以作為選擇的條件,比如視網(wǎng)膜屏可以再網(wǎng)速良好的情況下播放清晰度更高的視頻流褒翰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贮懈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子优训,更是在濱河造成了極大的恐慌朵你,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揣非,死亡現(xiàn)場(chǎng)離奇詭異撬呢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妆兑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門魂拦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人搁嗓,你說(shuō)我怎么就攤上這事芯勘。” “怎么了腺逛?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵荷愕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我棍矛,道長(zhǎng)安疗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任够委,我火速辦了婚禮荐类,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茁帽。我一直安慰自己玉罐,他們只是感情好屈嗤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吊输,像睡著了一般饶号。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上季蚂,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天茫船,我揣著相機(jī)與錄音,去河邊找鬼扭屁。 笑死算谈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疯搅。 我是一名探鬼主播濒生,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼埋泵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幔欧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起丽声,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤礁蔗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后雁社,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浴井,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年霉撵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磺浙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徒坡,死狀恐怖撕氧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喇完,我是刑警寧澤伦泥,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锦溪,受9級(jí)特大地震影響不脯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刻诊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一防楷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧则涯,春花似錦域帐、人聲如沸赘被。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)民假。三九已至,卻和暖如春龙优,著一層夾襖步出監(jiān)牢的瞬間羊异,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工彤断, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留野舶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓宰衙,卻偏偏與公主長(zhǎng)得像平道,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子供炼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容