复杂网络下多码率视频流切换关键技术
本文整理自LiveVideoStack線上分享第三季,第十二期,由京東云架構(gòu)師張樹軍從基礎(chǔ)出發(fā),為大家闡述多碼率視頻流切換技術(shù)的原理與實現(xiàn)方式,并結(jié)合京東云視頻云的實踐,分析多碼率幀對齊技術(shù)原理及其在多碼率自適應(yīng)切換中的具體應(yīng)用。
文/張樹軍
整理/LiveVideoStack
?
大家好,我是來自京東云的架構(gòu)師張樹軍,畢業(yè)于天津大學(xué),先后任職于中電華大、永新視博、網(wǎng)易,期間一直從事于視頻編解碼和流媒體開發(fā)和架構(gòu)設(shè)計等工作。在2018年5月加入京東云,目前負(fù)責(zé)京東視頻云音視頻轉(zhuǎn)碼相關(guān)研發(fā)工作。
?
本次分享主要會從以下七個方面來分享京東云在做音視頻方面的心得體驗,首先會為大家介紹京東云為什么會做多碼率視頻流切換以及多碼率視頻流切換的應(yīng)用場景,另外會講一下多碼率視頻流切換端到端的實現(xiàn)方式以及技術(shù)原理,然后會為大家介紹京東云在開發(fā)落地實踐過程中遇到的一些問題,希望以此給大家?guī)硪恍﹩l(fā),最后會有京東云在下一階段要做的一些工作以及后續(xù)開展。
1. 深度編碼的多碼率視頻流切換及應(yīng)用場景
?
?
研發(fā)團隊在最初接到多碼率切換的產(chǎn)品需求時,在很短的時間內(nèi)實現(xiàn)了一版從端到端實現(xiàn)多碼率對齊、切換的解決方案,在對比了競品公開數(shù)據(jù)之后,團隊希望基于Codec角度去做一些深度編碼的多碼率對齊、切換工作。
?
多碼率切換的應(yīng)用場景分為設(shè)備多樣性、網(wǎng)絡(luò)復(fù)雜性、多碼率流/文件對齊和多碼率自適應(yīng)切換四個方面,
?
2. 端到端實現(xiàn)方式
經(jīng)過團隊自研和調(diào)研之后,總結(jié)端到端的多碼率切換對齊有Segment對齊/切換、GOP對齊/切換和幀級對齊/切換三種方式,對齊相當(dāng)于在sever端做內(nèi)容生產(chǎn)時要生產(chǎn)出對齊的視頻直播流和點播文件,切換是指在客戶端如何做流級的切換和文件級的切換。
2.1?Segment對齊/切換
?
Segment對齊在sever端的處理,不論是視頻直播的流還是點播文件都需要多碼率的輸出,直播是多碼率的流輸出,點播需要有VOD多碼率的點播文件生成,Segment對齊方式對于sever端需要切出Segment的IDR,在切割位置做到時間戳PDF對齊,對Segment內(nèi)部沒有要求。
?
?
Segment切換在播放端的處理,由上圖所示,play代表播放器,res1、res2代表不同的碼率,相當(dāng)于多碼率的點播文件輸出。目前自動切換碼率的技術(shù)可以檢測用戶目前網(wǎng)絡(luò)的帶寬和設(shè)備的性能來判斷當(dāng)前用戶適合哪種直播流或點播文件,在手動切換碼率時,用戶點擊切換碼率后首先要等待當(dāng)前Segment播完才能夠切換到下一個Segment,這是由于Segment是IDR對齊的,可以獨立解碼,所以Segment存在的問題上Segment長度越長就越影響用戶切換碼率的時間和響應(yīng)時間,用戶體驗會隨著Segment長度的增加而越來越差。
2.2?GOP對齊/切換
?
?
GOP對齊在sever端的處理,可以在sever端加GOP,將多個GOP打在一個Segment上,Segment內(nèi)部也可以是IDR對齊,GOP對齊相對于Segment對齊要求更高一些,每個GOP之前都有一個IDR,并且同時需要滿足IDR和GOP 的對齊。
?
?
上圖表示在客戶端使用GOP切換的場景,每個GOP都是一個獨立的解碼單元,有一個IDR就可以獨立解碼,手動切換時會在當(dāng)前GOP播放完成后播放切換碼率的GOP。GOP對齊的切換優(yōu)勢相比Segment來說切換的時間要更短,因為GOP比Segment更小一級,而且基本上是最小的獨立解碼單元,用戶使用體驗要比Segment高一級。
2.3?幀級對齊/切換
?
幀級對齊在sever端的處理如上圖所示,假設(shè)用戶需要一個直播流或一個點播流,通過編碼輸出720P和540P兩檔碼率,它可以做到兩種碼率輸出后的每一幀對齊且每一幀的時間戳也對齊,相當(dāng)于做到了最精細的對齊。
?
?
在客戶端如果要做到幀級切換,對應(yīng)的幀級對齊的流切換方式如上圖所示,要做到幀級切換首先要做到對每一幀進行解碼,幀解碼要依賴于獨立的GOP數(shù)據(jù),也就是說要做到幀級對齊,GOP是最基本的cache緩存,每個流中要緩存一個GOP cache,使得每個流都可以獨立解碼,解碼之后具體在display上顯示哪種碼率就可以根據(jù)切換命令來選擇,這樣做的優(yōu)勢是可以做到幀級切換(靈活度更高的無感知切換),但對用戶終端消耗比較大。
2.4 切換方式對比
?
總結(jié)以上三種切換方式可以知道,Segment對齊就是最簡單的IDR對齊,對客戶端和serve端處理起來都很方便,缺點是切換速度較慢;GOP對齊在IDR中可以基于GOP做到更精細的對齊,切換速度比Segment對齊要快,但缺點是GOP固定,有人為因素干預(yù)編碼器編碼,質(zhì)量有所下降;幀級切換由于是逐幀編碼,切換速度最快,但對用戶終端消耗比較大。
3. 技術(shù)原理
?
以點播舉例,點播一般都會做2-pass編碼,第一pass的數(shù)據(jù)肯定會給第二pass數(shù)據(jù)作參考使用,如果做點播多檔轉(zhuǎn)碼輸出,其實可以用其中一檔的mbtree等數(shù)據(jù)去指導(dǎo)其他檔的2-pass轉(zhuǎn)碼輸出,可以做到各檔次幀類型和時間戳均對齊,而且其他檔的1-pass編碼都可以省略,但由于其他檔都是以參考檔的1-pass數(shù)據(jù)去指導(dǎo)2-pass轉(zhuǎn)碼輸出,因此輸出質(zhì)量并不是最優(yōu)的,只有去參考自身的1-pass數(shù)據(jù)才能得到最優(yōu)的編碼質(zhì)量。
京東云在此基礎(chǔ)上改進了轉(zhuǎn)碼流程,增加了上圖中紫色部分的模塊(縮放W*H,特定YUV),保證lookahead輸出的每一幀數(shù)據(jù)在多檔輸出統(tǒng)一一致,這樣就可以保證無論直播還是點播,在各檔次流或者文件輸出時每一幀的picture type和時間戳都是對齊的。
3.1?數(shù)據(jù)損失評估
?
上述工作是為了達到幀&時間戳對齊的目的所做的工作,但還是要評估加上這些模塊后對數(shù)據(jù)所造成的損失,因此團隊做了有關(guān)數(shù)據(jù)損失的對比實驗。使用默認(rèn)的幀決策和指定的模塊去干預(yù)lookahead輸出的幀決策,分別使用4K測試集合1080P測試集作bdrate實驗,bdrate為負(fù)表示同等質(zhì)量下不對齊編碼比對齊編碼節(jié)省的碼率百分比,bdrate越接近0表示對齊編碼影響越小。最后對比數(shù)據(jù)的結(jié)果還在接受范圍內(nèi),可證明改進方案是可行的。
3.2 直播對齊同步機制
?
在直播場景可以將點播邏輯直接拿來用,優(yōu)化之前的直播對齊方案如上圖所示,由于兩個拉流的時間點和數(shù)據(jù)都不一樣,所以在場景切換前無法做到對齊,在場景切換部分之后多檔直播流就可以做到對齊,但如果有些場景切換特別長,對齊的這部分也會被拉長,直接會影響到直播體驗,從功能上來講也不是大家都認(rèn)可的對齊。
因此京東云在直播對齊中將場景切換提前,引入一些同步的機制,在拉流的過程中做一些同步信息加入到流中,這個操作不會影響轉(zhuǎn)碼效果,一旦收到同步信息每條轉(zhuǎn)碼流可以在一個時間點插入I幀對齊,這樣比沒有加對齊同步機制的方法在體驗上和功能滿足性方面都有很大提升。
4. 實踐落地中的挑戰(zhàn)
?
京東云在實踐落地時也遇到過一些問題,第一點,保證Lookahead數(shù)據(jù)一致性,同時Lookahead數(shù)據(jù)一致性也是對齊的前提,之后的picture type幀決策才能一致,后續(xù)做點播與直播相對也會變得容易,另外縮放算法必須保持一致,不同的縮放方式會導(dǎo)致數(shù)據(jù)產(chǎn)生差異;第二點,由于在方法中引入了額外的圖像數(shù)據(jù),這些數(shù)據(jù)一定要配合編碼器的內(nèi)存預(yù)分配機制,以上兩點是在sever端需要關(guān)注的問題。在客戶端方面,IDR幀一定是I幀,但I幀并不一定是IDR幀,IDR幀就是即時解碼刷新幀,一旦遇到IDR幀所有之前的數(shù)據(jù)都被清掉,重新開始進入解碼環(huán)節(jié),不需要參考之前的reference參考幀,但I幀后面的數(shù)據(jù)可以跳過I幀再往前去參考之前的I幀,所以收到I幀之后去解碼容易出現(xiàn)解碼花屏。
5. 展望&總結(jié)
?
關(guān)于后期的展望,還有一些相關(guān)工作要去完善,比如支持變幀率對齊可行性、支持終端幀級別切換可行性、支持直播1.5pass可行性和優(yōu)化lookahead冗余計算@1pass。
?
?
最后簡單總結(jié)下本次分享,直播點播的多碼率對齊中最關(guān)鍵的技術(shù)是引入同步各檔次lookahead幀決策的工作,通過這些可以指導(dǎo)各檔輸出的picture type幀類型和時間戳一致,在直播的多碼率對齊上京東云做了一些同步的工作,提升直播多碼率對齊的使用體驗。客戶端切換目前是基于幀對齊的直播流切換,但目前還是以GOP為主的切換,后期會對其做一些幀級的深度優(yōu)化。
LiveVideoStack? 招募
LiveVideoStack正在招募編輯/記者/運營,與全球頂尖多媒體技術(shù)專家和LiveVideoStack年輕的伙伴一起,推動多媒體技術(shù)生態(tài)發(fā)展。同時,也歡迎你利用業(yè)余時間、遠程參與內(nèi)容生產(chǎn)。了解崗位信息請在BOSS直聘上搜索“LiveVideoStack”,或通過微信“Tony_Bao_”與主編包研交流。
LiveVideoStackCon 2019北京 音視頻技術(shù)大會最新日程現(xiàn)已上線,掃描圖中二維碼或點擊【閱讀原文】了解大會最新日程。
總結(jié)
以上是生活随笔為你收集整理的复杂网络下多码率视频流切换关键技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【专场】揭秘端到端视频技术
- 下一篇: 倒计时3天:3D音带你起飞