官术网_书友最值得收藏!

2.1.3 插件化管理

對于音視頻直播客戶端來說,我們不但希望它可以處理音頻數據、視頻數據,而且還希望它可以分享屏幕、播放多媒體文件、共享白板……此外,即使是處理音視頻,我們也希望它可以支持多種編解碼格式,如音頻除了可以支持Opus、AAC外,還可以支持G.711/G.722、iLBC、Speex等,視頻除了可以支持H264外,還可以支持H265、VP8、VP9、AVI等,這樣它才能應用得更廣泛。

實際上,這些音視頻編解碼器都有各自的優缺點,也有各自適用的范圍。比如G.711/G.722主要用于電話系統,音視頻直播客戶端要想與電話系統對接,就要支持這種編解碼格式;Opus主要用于實時通話;AAC主要用于音樂類的應用,如鋼琴教學等。我們希望直播客戶端能夠支持盡可能多的編解碼器,這樣的直播客戶端才足夠強大。

如何才能做到這一點呢?最好的設計方案就是實現插件化管理。當需要支持某個功能時,直接編寫一個插件放上去即可;當不需要的時候,可以隨時將插件拿下來。這樣的設計方案靈活、安全、可靠。

為了讓直播客戶端支持插件化管理,我們對之前的架構圖又做了調整,如圖2.4所示。從圖中可以看到,為了支持插件化管理,我們將原來架構圖中的音視頻編解碼模塊換成音視頻編解碼插件管理模塊,而各種音視頻編解碼器(Opus、AAC、iLBC……)都可以作為一個插件注冊到其中。當想使用某種類型的編碼器時,可以通過參數進行設定,這樣從音視頻采集模塊采集到的數據就會被送往對應的編碼器進行編碼;當接收到RTP格式的音視頻數據時,又可以根據RTP 關于RTP的相關信息將在第9章中詳細介紹。頭中的Payload Type來區分數據,將數據交由對應的解碼器進行解碼。經這樣處理后,音視頻直播客戶端的功能就更強大了,應用范圍也更廣了。

圖2.4 插件管理直播客戶端架構圖

這里以音頻編解碼器為例,簡要介紹一下直播客戶端增加插件管理前后的區別。客戶端在增加插件管理之前,只能使用一種音頻編解碼器,如Opus。因此,在一場直播活動中,所有參與直播的終端都只能使用同一種音頻的編解碼器(Opus)。這樣看起來好像也不會產生什么問題。不過,假如此時我們想將一路電話語音接入這場直播中(電話語音使用的編解碼器為G.711/G.722),那它就無能為力了。而有了插件管理模塊情況就不同了,各終端可以根據接收到的音頻數據類型調用不同的音頻解碼器進行解碼,從而實現不同編解碼器在同一場直播中互通的場景,這就是插件化管理給我們帶來的好處。

[1] 關于RTP的相關信息將在第9章中詳細介紹。

主站蜘蛛池模板: 元朗区| 宁阳县| 赤水市| 吴川市| 大厂| 甘肃省| 海原县| 嘉义县| 昌吉市| 敦煌市| 泽州县| 马公市| 留坝县| 中宁县| 翁源县| 溧阳市| 金乡县| 张北县| 无为县| 修水县| 偏关县| 左贡县| 大余县| 广宗县| 灵台县| 吴川市| 徐水县| 谢通门县| 屏南县| 沽源县| 闽侯县| 博白县| 名山县| 民丰县| 桦南县| 桓台县| 洛扎县| 辛集市| 花垣县| 车险| 绥滨县|