视频生产环境下的音视频解决方案
隨著云剪輯、云導(dǎo)播、音視頻生產(chǎn)在線協(xié)作的興起, 生產(chǎn)環(huán)境下的音視頻處理越發(fā)為人所關(guān)注。音視頻處理在生產(chǎn)環(huán)境下,對(duì)控制精準(zhǔn)性有著更高的要求。從服務(wù)端到客戶端,精準(zhǔn)的時(shí)間控制、畫(huà)面控制都是生產(chǎn)環(huán)境音視頻和分發(fā)環(huán)境下音視頻處理的重要區(qū)別。服務(wù)端與客戶端的協(xié)同上,容易產(chǎn)生微小的差異。
文 / 姜雨晴
整理 / LiveVideoStack
視頻回放:
https://www.livevideostack.cn/video/online-jyq/
大家好,我叫姜雨晴,是MediaTrack音視頻研發(fā)負(fù)責(zé)人,之前就職于熊貓直播,一直從事前端的播放器,后來(lái)有幸去了字節(jié)跳動(dòng),最近在參與和熊貓直播的創(chuàng)業(yè)項(xiàng)目。這個(gè)項(xiàng)目主要是關(guān)于生產(chǎn)環(huán)境下的解決方案,我們不再做傳統(tǒng)2C的視頻分發(fā)解決方案,而是針對(duì)于視頻的創(chuàng)作者的協(xié)同和合作進(jìn)行一個(gè)解決方案,這和傳統(tǒng)2C的觀看端有很多不一樣的地方。
本次內(nèi)容主要分為四個(gè)部分:一是架構(gòu);二是工作流;三是一致性;四是擴(kuò)展性。
首先,了解一下我們的產(chǎn)品,在網(wǎng)頁(yè)端和小程序端會(huì)有修改和批注的功能,也就是我們最早上線這版的功能。如果要做一個(gè)生產(chǎn)環(huán)境下的解決方案,我個(gè)人比較傾向于先了解生產(chǎn)環(huán)境下,用戶如何去使用這款產(chǎn)品。
因?yàn)槲覀€(gè)人比較喜歡使用一些剪輯軟件去剪輯一些片子。這張圖是我個(gè)人剪輯時(shí)的狀態(tài),首先需要精確到幀的控制,而且每一段的時(shí)間戳都非常準(zhǔn)確,要清楚哪一段插進(jìn)的內(nèi)容,如要清楚知道圖中字幕的位置等要精確到哪一個(gè)像素。尤其在網(wǎng)絡(luò)的視頻分發(fā)過(guò)程中,并不能保證這樣的一致性。平時(shí)在觀看時(shí)是不需要保證到幀的,這就給我們的服務(wù)帶來(lái)了很大的挑戰(zhàn)。
我們現(xiàn)在最核心的兩個(gè)業(yè)務(wù)是:媒體轉(zhuǎn)碼和視頻標(biāo)注和截圖。首先,媒體轉(zhuǎn)碼是網(wǎng)絡(luò)分發(fā),我們所看到的東西不可能用源流,因?yàn)樵戳骺赡芴貏e大,有可能在網(wǎng)頁(yè)或小程序端解碼不了,這就涉及到轉(zhuǎn)碼,所以轉(zhuǎn)碼流和源流是否保持一致就成了很大的問(wèn)題。其次,視頻標(biāo)注和截圖也會(huì)在一致性上產(chǎn)生差異。
1
架構(gòu)
這張圖是我們現(xiàn)在的MediaTrack整個(gè)的架構(gòu),整個(gè)命名方式延續(xù)了熊貓的命名方式,所有的項(xiàng)目都采用英雄聯(lián)盟的英雄為項(xiàng)目名稱。現(xiàn)在最主要的兩個(gè)項(xiàng)目是:一是對(duì)用戶可見(jiàn)的Web端的Sona和小程序的Neeko,它們的背后是第二層長(zhǎng)連接Riven和API的Kayn這兩個(gè)部分,也就是和前端進(jìn)行交互的這層,它們的靈活性會(huì)比較高,并根據(jù)產(chǎn)品的需求加接口。
最后這部分是微服務(wù)集群,重點(diǎn)是音視頻服務(wù)Ahri,對(duì)于系統(tǒng)內(nèi)的其他服務(wù)而言,Ahri只是音視頻服務(wù),與其他的微服務(wù)沒(méi)有任何區(qū)別。
Ahri是所有媒體相關(guān)操作的微服務(wù)集合,包括媒體轉(zhuǎn)碼、文件格式矯正、媒體信息的獲取、截圖、音頻waveform抽樣、標(biāo)注點(diǎn)繪制、圖片處理等一系列工作。Ahri對(duì)外僅是個(gè)普通的微服務(wù)。對(duì)內(nèi)是微服務(wù)組,這也是它命名的原因。Ahri是一個(gè)九尾妖狐,它可以將能量存儲(chǔ)在火球中并釋放出去,它的九條尾巴就像對(duì)內(nèi)的微服務(wù)一樣,都是它不可或缺的部分。
這張圖展示了Ahri的架構(gòu),Ahri對(duì)外的服務(wù)就是Ahri網(wǎng)關(guān),并沒(méi)有自己實(shí)際的操作,它所有的操作都是向內(nèi)部的微服務(wù)創(chuàng)建任務(wù)并匯總這些任務(wù),但轉(zhuǎn)碼還是采用云廠商的轉(zhuǎn)碼。
2
工作流
我們兩個(gè)比較重要的工作流:一是調(diào)用工作流,Ahri先要知道需要做什么再進(jìn)行工作,利用Magic number判斷文件類型。因?yàn)槲覀兊南到y(tǒng)允許用戶傳任何文件,這樣會(huì)把文件的擴(kuò)展名改掉,或者前端無(wú)法判斷它是否是一個(gè)音視頻文件。這時(shí)Ahri會(huì)再進(jìn)行判斷,如果是一個(gè)視頻文件會(huì)通知其他服務(wù)矯正它,并進(jìn)入真正的媒體處理的流程。
媒體處理流程也會(huì)做一個(gè)矯正,實(shí)際并不想同一個(gè)文件處理多次。當(dāng)多個(gè)用戶上傳同一個(gè)文件時(shí),需要做hash。當(dāng)事件任務(wù)完成或者狀態(tài)更新時(shí),就進(jìn)行廣播消息。
如果沒(méi)有媒體信息、獲取媒體信息矯正。截圖標(biāo)記會(huì)遇到一些坑點(diǎn):一是時(shí)間戳找齊;二是畫(huà)圖標(biāo)記找齊。
3
一致性
時(shí)間一致性,傳統(tǒng)上,現(xiàn)在可以看到的視頻片段如圖所示,首先是格式上的時(shí)間零點(diǎn),然后是音頻首幀時(shí)間點(diǎn)、視頻首幀時(shí)間點(diǎn),最后是標(biāo)注點(diǎn)。
圖中上部分是服務(wù)器的原片,因?yàn)橛脩舯容^專業(yè),大部分上傳的片子都是如圖所示,也就是音頻時(shí)間原點(diǎn)和視頻時(shí)間原點(diǎn)幾乎是一致的,甚至有些在上面打了時(shí)間碼。
但我們現(xiàn)在所用的轉(zhuǎn)碼服務(wù)經(jīng)常會(huì)把轉(zhuǎn)碼流變成圖中下部分,也就是它們起始時(shí)間并不一致。所以在找一幀畫(huà)面時(shí)是需要基準(zhǔn)點(diǎn)的,一般基準(zhǔn)點(diǎn)是視頻圖像的首幀,也就是start time,然后標(biāo)記時(shí)間戳是以視頻時(shí)間的start time基準(zhǔn)點(diǎn)去找。
我以前是做網(wǎng)頁(yè)播放器出身,網(wǎng)頁(yè)播放器會(huì)對(duì)start time進(jìn)行處理。因?yàn)橐罁?jù)圖中的轉(zhuǎn)碼流處理,如果start time是4秒鐘,首屏?xí)r間就要等4秒之久,所以一般會(huì)計(jì)算一個(gè)Base-Time,也就是把音頻和視頻的start time小的值作為基準(zhǔn)時(shí)間點(diǎn),作為時(shí)間零點(diǎn),之后的每一幀都會(huì)減去這個(gè)時(shí)間點(diǎn)。像這種時(shí)間點(diǎn)的控制就會(huì)造成真正的start time其實(shí)并不是首幀的PTS,這時(shí)MSE Buffer就需要再一次找齊時(shí)間點(diǎn)。
這其中會(huì)有一個(gè)坑點(diǎn),現(xiàn)在的時(shí)間點(diǎn)在瀏覽器上有可能會(huì)被清除掉,因?yàn)闉g覽器有一個(gè)機(jī)制是播放一定時(shí)間時(shí)會(huì)把前面的緩存清除,以節(jié)省內(nèi)存空間,但這時(shí)候的start time點(diǎn)就不準(zhǔn)了。所以在取視頻的時(shí)間點(diǎn)時(shí)要保證是第一個(gè)片段塞進(jìn)MSR Buffer。
根據(jù)圖中所展示的處理,目的是加速起播時(shí)間,其次是盡量保留展現(xiàn)數(shù)據(jù)。
因?yàn)樾〕绦虿シ牌魇切〕绦虻牡讓?#xff0c;它的起始時(shí)間點(diǎn)是視頻的首幀,這是利用用戶打好時(shí)間戳的視頻,根據(jù)視頻的轉(zhuǎn)碼流和源流PTS對(duì)出來(lái)的,小程序的基準(zhǔn)時(shí)間點(diǎn)為0。
小程序以視頻為基準(zhǔn)播放,無(wú)需特殊處理。小程序另外一個(gè)坑是小程序?yàn)榱吮WC它的消化不會(huì)過(guò)大,會(huì)保持timeupdate為250ms,需要精確到幀,必須自制定時(shí)器。但需要注意,定時(shí)器過(guò)多,會(huì)導(dǎo)致程序崩潰,建議做全局定時(shí)器。
這部分是關(guān)于畫(huà)面的定位,這比時(shí)間上的一致性效果要好得多,圖中展示的是一個(gè)特殊情況,圖中圓點(diǎn)是基準(zhǔn)點(diǎn),內(nèi)部方形是實(shí)際畫(huà)面,外部是播放框。以實(shí)際畫(huà)面為準(zhǔn),將它的寬和高定一個(gè)百分比作為標(biāo)記點(diǎn)。即使這個(gè)視頻被處理了,也可以根據(jù)相對(duì)標(biāo)點(diǎn)找到實(shí)際位置。
4
拓展性
這部分介紹我們系統(tǒng)的擴(kuò)展性,圖中是Ahri整個(gè)架構(gòu)圖,首先Ahri會(huì)創(chuàng)建workflow并下發(fā)任務(wù),這些任務(wù)可能會(huì)在Ahri自己的服務(wù)上進(jìn)行,也可能在云廠商服務(wù)上進(jìn)行。如果云廠商質(zhì)量達(dá)不到我們的精度,需要做自己的服務(wù)時(shí),可以直接在workflow這一層做遷移,如果需要加比如第三方轉(zhuǎn)碼時(shí),可以橫向擴(kuò)展我們的workflow。
LiveVideoStackCon 2020?北京
2020年10月31日-11月1日
點(diǎn)擊【閱讀原文】了解更多詳細(xì)信息
總結(jié)
以上是生活随笔為你收集整理的视频生产环境下的音视频解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 是MPEG没有未来,还是未来不需要MPE
- 下一篇: 【LiveVideoStack线上分享】