0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

移動音視頻SDK開發(fā)工程實(shí)踐

LiveVideoStack ? 來源:LiveVideoStack ? 作者:李明路 ? 2020-08-10 16:38 ? 次閱讀

本文由百度智能云音視頻SDK產(chǎn)品技術(shù)負(fù)責(zé)人李明路在LiveVideoStack線上分享的演講內(nèi)容整理而成,內(nèi)容從音視頻數(shù)據(jù)角度出發(fā),梳理了音視頻SDK的發(fā)展和技術(shù)演進(jìn)。詳細(xì)分析數(shù)據(jù)在常見音視頻模塊上遇到的問題與挑戰(zhàn),并提出相應(yīng)的解決思路和技術(shù)實(shí)踐。

本次分享的主題是移動音視頻SDK開發(fā)工程實(shí)踐,內(nèi)容主要分為以下五個部分:

音視頻SDK的技術(shù)演進(jìn)

數(shù)據(jù)采集管線的設(shè)計(jì)與實(shí)現(xiàn)

特效模塊數(shù)據(jù)中間件設(shè)計(jì)和實(shí)現(xiàn)

連麥模塊數(shù)據(jù)中間件設(shè)計(jì)和實(shí)現(xiàn)

渲染模塊數(shù)據(jù)中間件設(shè)計(jì)和實(shí)現(xiàn)

01音視頻SDK的技術(shù)演進(jìn)1.1 數(shù)字化進(jìn)程

多媒體技術(shù)是一項(xiàng)傳統(tǒng)技術(shù),但同時也是在不斷發(fā)展與進(jìn)步的,我們可以形象的用細(xì)胞分裂來表示,即多媒體技術(shù)內(nèi)部也在不斷發(fā)生分裂,而音視頻SDK則是其中的一個分系。

以下大致列出了音視頻技術(shù)演進(jìn)的幾個重要進(jìn)展。首先,在互聯(lián)網(wǎng)化前期多媒體技術(shù)就已經(jīng)開始出現(xiàn)廣泛的應(yīng)用,得益于通訊技術(shù)的發(fā)展,我們可以借助于廣播、有線電視、衛(wèi)星等等,將數(shù)字信號傳輸給用戶。

解碼器其實(shí)在整個多媒體技術(shù)的發(fā)展當(dāng)中也起到非常重要的作用,只不過當(dāng)時解碼器的能力與現(xiàn)在相比還是有些不同,但同樣可以實(shí)現(xiàn)解碼和容器的分離。

此后,隨著互聯(lián)網(wǎng)的出現(xiàn),我們可以實(shí)現(xiàn)基于一些IP網(wǎng)絡(luò)協(xié)議、光纖的廣泛使用,通過WiFi、蜂窩網(wǎng)絡(luò),傳輸數(shù)據(jù)到設(shè)備終端(此時終端更多的還是指PC端)。因此產(chǎn)生了一些在線類的音視頻服務(wù),例如點(diǎn)播、在線語音等典型的音視頻場景。在這些場景中,SDK更多的還是以服務(wù)端為主。

2010-2015年期間,隨著手機(jī)硬件的發(fā)展,終端的算力不斷提升,編解碼芯片也得以快速發(fā)展,再加上消費(fèi)者使用習(xí)慣的變化,出現(xiàn)了更多碎片化的場景和產(chǎn)品,像直播、短視頻等。此時,隨著手機(jī)等移動設(shè)備的普及,移動端SDK也慢慢進(jìn)入到消費(fèi)級領(lǐng)域,逐漸發(fā)展成獨(dú)立技術(shù)棧。 近年來, 隨著5G、AI人工智能的發(fā)展,VR/AR、語音交互等技術(shù)也在發(fā)生著新的變化,應(yīng)用場景變得更加廣泛,音視頻SDK已經(jīng)不僅僅局限于移動端,未來會出現(xiàn)在各種設(shè)備屏幕、產(chǎn)品形態(tài)當(dāng)中。 1.2 移動端音視頻框架

移動端的音視頻框架與其它移動端框架相比有很大不同。音視頻框架首先要立足移動端提供的系統(tǒng)能力,包括系統(tǒng)框架和硬件能力。如圖,系統(tǒng)框架層有iOS/Android的一些多媒體框架、硬件的編解碼、硬件的處理能力如CPUGPU、NPU的處理模塊,以及一些開源圖像庫。

系統(tǒng)框架層之上是第三方框架,如FFmpeg、OpenSSL(加解密);在點(diǎn)播場景用的比較多的Ijkplayer/Exoplayer;用于底層通訊的技術(shù):雙向的,低延時的WebRTC技術(shù),用于單向點(diǎn)播的RTMP,目前比較火的SRT低延時方案;除此之外,還會有一些圖像處理方面的框架如GPUImage等。

在此之上,就是一些跟場景相結(jié)合比較多的模塊,這里大致列出了部分核心模塊。 數(shù)據(jù)從多媒體采集模塊出來,會經(jīng)過一路或多路的混音混流(與實(shí)際場景相結(jié)合),然后過渡到多媒體編輯模塊:當(dāng)下短視頻的一些能力都是通過多媒體編輯這個處理單元實(shí)現(xiàn),再到后面的多媒體后處理模塊:例如AR特效,以及一些比較好玩的互動能力等; 內(nèi)容生產(chǎn)完成后,我們會根據(jù)點(diǎn)播、直播或者短視頻等場景的不同,采用不同協(xié)議進(jìn)行分發(fā)。再下面就是消費(fèi)側(cè),這里可以直接讀取數(shù)據(jù),也可以間接讀取數(shù)據(jù)作為緩存加快二次讀取數(shù)據(jù)的載入。獲取數(shù)據(jù)后會根據(jù)不同的封裝格式,如FLV、TS或者是MP4等對數(shù)據(jù)進(jìn)行解封裝,再進(jìn)行解碼和渲染操作。 相比與其它移動端框架音視頻框架最特別的地方就是管線部分,因?yàn)橐粢曨lSDK的產(chǎn)品與其它產(chǎn)品不太一樣,首先需要的是實(shí)時處理,數(shù)據(jù)流是不斷在各個模塊之間穿梭的,如何保證各個模塊間的高效傳輸,這里提出了一個管線的概念。 1.3 唯快不破

簡單介紹了音視頻SDK的框架,接下來介紹下目前框架遇到一些問題和挑戰(zhàn)。目前很多業(yè)務(wù)場景,其實(shí)都在追求更多的新玩法。這里可能會有一些追求更大的分辨率,還有一些更高的刷新率,甚至是更極致的體驗(yàn)。但是我們知道音視頻SDK很大程度上會受制于平臺的能力,由于平臺具有更多的差異性,所以導(dǎo)致音視頻SDK在發(fā)展過程當(dāng)中,其實(shí)遇到很多的問題。另外還涉及到模塊間的數(shù)據(jù)交互,因此性能對于移動端來說是一個最大的瓶頸。

其實(shí)在有些場景像點(diǎn)播或短視頻,720p的分辨率已經(jīng)不能滿足場景的使用,甚至在一些運(yùn)動場景,30fps的刷新率也已經(jīng)沒辦法滿足場景的開發(fā),當(dāng)然這些其實(shí)更多的是業(yè)務(wù)挑戰(zhàn)。除此之外,剛才也說過整個多媒體技術(shù)的發(fā)展,編碼器一直起到了舉足輕重的作用,所以底層技術(shù)也在追求更高效的編碼效率。

對于這些問題,其實(shí)大家都能達(dá)成一個共識,就是說速度是音視頻SDK框架要解決的一個問題。但拋開現(xiàn)象看本質(zhì),速度其實(shí)還是來自于數(shù)據(jù)的傳輸,它是一個根本前提條件,因此如何讓數(shù)據(jù)更高效的傳遞和更高效的處理,才是移動端SDK要解決的最根本問題。

02數(shù)據(jù)采集管線的設(shè)計(jì)和實(shí)現(xiàn)

這里介紹一下目前一些開源產(chǎn)品當(dāng)中數(shù)據(jù)鏈的設(shè)計(jì)和方案,以兩個產(chǎn)品為例,一個是GPUImage。相信做過移動端SDK特效的同學(xué)應(yīng)該都是耳熟能詳了,因?yàn)樗_實(shí)是比較好用,可以提供大量的Shader。拋開Shader的不說,我們看一下它在數(shù)據(jù)鏈條的設(shè)計(jì)方式。首先GPUImage提供了一個傳輸數(shù)據(jù)的類Output和一個實(shí)現(xiàn)接收數(shù)據(jù)的Input,然后通過生產(chǎn)模式,生產(chǎn)模塊像相機(jī)采集模塊,以及本地相冊模塊,其實(shí)都是實(shí)現(xiàn)了Output的類,生產(chǎn)模塊生產(chǎn)完畢后會交由Output進(jìn)行渲染,這里它的強(qiáng)大之處在于Output可以與可編程的Shader進(jìn)行強(qiáng)關(guān)聯(lián),很大程度的驅(qū)動了OpenGL的運(yùn)行效率。然后將渲染后RGB的數(shù)據(jù)轉(zhuǎn)換成FrameBuffer這個實(shí)體的對象,整個鏈條都是通過FrameBuffer進(jìn)行接收,然后通過鏈條上的組件去實(shí)現(xiàn)了Input后,就能拿到Output傳出的FrameBuffer,以此類推將FrameBuffer進(jìn)一步的傳遞到下個鏈條當(dāng)中,整個鏈條其實(shí)是非常清晰和簡單。

我們再來看一下右邊的FFmpeg,除了提供很多的數(shù)據(jù)鏈條的處理機(jī)制、數(shù)據(jù)的分包,它還可以在不進(jìn)行解碼的情況下進(jìn)行轉(zhuǎn)包,也可以把數(shù)據(jù)進(jìn)行解碼,做一些后處理等等,整個鏈條其實(shí)也是比較清晰的。

介紹了兩種多媒體框架,接下來看一下我們團(tuán)隊(duì)是怎么去考慮這些問題。實(shí)際開發(fā)中,音視頻SDK框架中管線其實(shí)是不可控的,我們來看一下這兩種方案的一些優(yōu)勢和問題。

首先GPUImage的優(yōu)勢是顯而易見的,就是協(xié)議相對簡單清晰,另外通過可編程Shader驅(qū)動了OpenGL,這樣它的運(yùn)行效率變的非???,通過大量的Shader可以讓開發(fā)同學(xué)去進(jìn)一步學(xué)習(xí)這門語言,是一個優(yōu)秀的圖像處理 開源框架。但同樣存在一些問題,首先我們看到它提供的這些Shader其實(shí)大多數(shù)都是圖像處理,并且基本上都是同步處理的。所以可能導(dǎo)致在使用GPUImage跟一些框架進(jìn)行結(jié)合的時候,當(dāng)你的某個模塊涉及到耗時處理,這個時候有可能會出現(xiàn)某個對象被其它釋放掉或怎么樣,會造成整個線程的不安全。

FFmpeg的優(yōu)勢特別多,簡單說一下它的函數(shù)指針,其實(shí)也是FFmpeg的一個最佳實(shí)踐,它通過指針的方式,把數(shù)據(jù)進(jìn)行一層層的拆分跟傳遞。但是它也同樣存在一些問題,比如說FFmpeg是面向過程的,它的鏈路設(shè)計(jì)對于不熟悉FFmpeg的同學(xué)來說,可能會覺得鏈路非常復(fù)雜,使用起來可能并不是那么的得心應(yīng)手。

所以我們經(jīng)過多輪討論跟思考,就希望得到一個數(shù)據(jù)管線,它首先像GPUImage,協(xié)議比較簡單,用起來比較容易上手,對開發(fā)者來說是友好的;另外需要它是可控的,因?yàn)殡S著SDK的模塊越來越多,我們發(fā)現(xiàn)在很多場景下,會出現(xiàn)不可控的問題;除此之外我們還希望它是支持同步或者是異步的,調(diào)度是安全的,鏈路配置是簡單可依賴的。

我們也總結(jié)了自己的一些方法論跟實(shí)踐:專注鏈?zhǔn)?,這主要還是考慮到音視頻框架,鏈?zhǔn)绞撬囊粋€核心思想,所以我們遵從這種法則自研數(shù)據(jù)管線。

首先是制定數(shù)據(jù)協(xié)議,主要解決的是最基本的模塊間數(shù)據(jù)的高效、穩(wěn)定的傳遞。這里可以看到左圖,它的方案跟剛才介紹的GPUImage有些相似,但是也有些不同。我們也提供了類似的AVOutput的模塊和AVInput的數(shù)據(jù)傳輸接收的協(xié)議。但是我們并沒有跟GPUImage的OpenGL進(jìn)行綁定,只是單純的去記錄和管理這條鏈條上的各個的組件,我們叫target。然后通過Dispatcher的機(jī)制,分發(fā)從生產(chǎn)端上報的視頻幀,通過視頻幀不斷的傳遞到各個鏈路的target當(dāng)中,而每個target實(shí)現(xiàn)AVInput其中的協(xié)議方法。例如frame跟type兩個函數(shù),frame就是從raiseFrame Output傳遞下來的數(shù)據(jù);type主要是做一些音視頻的音頻跟視頻的區(qū)分。

除此之外我們還支持一些二進(jìn)制場景的分發(fā),主要是為了配合像直播這種對數(shù)據(jù)有分發(fā)要求的場景做了一些協(xié)議的升級。在鏈條的最末端,可以看到我們也實(shí)現(xiàn)了AVControl,跟之前不太一樣是我們制定了一個控制協(xié)議,這個控制協(xié)議主要是為了控制數(shù)據(jù)的流入和流出。為什么要做這個事情呢?我們知道音視頻SDK最核心的就是數(shù)據(jù)在不斷的傳遞,如果說某個模塊出現(xiàn)異常,數(shù)據(jù)沒有一種機(jī)制能保護(hù)它,可能會導(dǎo)致整個SDK的運(yùn)行出現(xiàn)不穩(wěn)定的情況。比如在直播場景分發(fā)的時候,我們發(fā)現(xiàn)網(wǎng)絡(luò)有抖動,此時我們可以調(diào)整發(fā)送的速率、速度等。

這里簡單的畫了一下我們的數(shù)據(jù)流向,一個是推的方式,就是直接從相機(jī)這種模塊采集數(shù)據(jù),直接著向后面的某個模塊去傳遞。一個是拉的方式,主要是指讀取本地文件或者說是間接的獲取數(shù)據(jù),比如從網(wǎng)絡(luò)讀取數(shù)據(jù)首先需要將數(shù)據(jù)讀下來,然后再傳遞到各個模塊。這里其實(shí)相對于之前說了GPU在異步線程的一些處理,我們也做了一些兼容和保護(hù),就是防止異步處理時對象被釋放的情況發(fā)生。所以說我們基本上也是沿用了GPUImage協(xié)議簡單的這種思想,然后在此基礎(chǔ)上又增加了一些像控制協(xié)議的實(shí)現(xiàn)機(jī)制,讓整個鏈路變得可控。

除此之外,我們也發(fā)現(xiàn)在日常過程當(dāng)中,只是簡單的設(shè)計(jì)數(shù)據(jù)管線,其實(shí)并不能很好的對業(yè)務(wù)場景開發(fā)提供幫助,原因什么呢?

其實(shí)我們只是解決了各個模塊數(shù)據(jù)之間的傳遞問題,但是并不能對最終產(chǎn)品的場景開發(fā)落地解決所有的問題,因?yàn)閳鼍案K是有很大差異的。我們所了解的像點(diǎn)播、直播,甚至是特效等,它其實(shí)都是通用性的能力。但是實(shí)際場景就涉及到各個模塊之間的組合,所以數(shù)據(jù)的傳遞并不能說傳遞一個數(shù)據(jù),就能把一個場景串聯(lián)起來。

這里也舉了幾個日常過程中典型的例子,比如對于點(diǎn)播的畫質(zhì)優(yōu)化,會發(fā)現(xiàn)類型轉(zhuǎn)換不是那么通暢和簡單。對于連麥場景,如何讓我們的SDK或者產(chǎn)品用起來更簡單,像人臉特效,比如說涉及到能力的多樣化,如何做到兼容性等,這些都不只是靠數(shù)據(jù)鏈路或模塊搭載就能解決的。因此我們提到了一個中間件的概念,就是把數(shù)據(jù)進(jìn)行橋接實(shí)現(xiàn)資源的共享,在各個模塊或業(yè)務(wù)輸出或使用的時候,就能提高整體數(shù)據(jù)采集或處理的應(yīng)用性。所以說應(yīng)用性也是我們數(shù)據(jù)采集管線的另一個考量指標(biāo)。

03特效模塊數(shù)據(jù)中間件設(shè)計(jì)和實(shí)現(xiàn) 接下來我們來看一下,在實(shí)際過程當(dāng)中遇到的一些問題跟解決方案。

特效模塊通常是典型的PaaS結(jié)構(gòu),它上面存在多種模型,而且模型之間是可以進(jìn)行插拔;它還有另外一個特點(diǎn)就是耗資源。那么如何在音視頻SDK中將這個模塊更好的運(yùn)用起來,去對外提供能力呢?我們這里以人臉特效的高級美顏接口為例,高級美顏中涉及到的特征點(diǎn)非常多,像大眼、瘦臉、下巴等,而且這些特征點(diǎn)并不是通過一次迭代或是一個模型就能解決的,它可能會涉及到多次的迭代和多種模型的組合疊加。這樣就會帶來一個問題,在集成特效模塊的時候,如果這些能力都是不斷變化的,對于模塊的使用來說,就存在一個不安全不穩(wěn)定的因素。那么我們該如何把這個問題解決,或者說屏蔽掉呢?

這里我們提供了一個概念:首先在調(diào)用能力的時候,不直接去調(diào)用,而是把這些能力做進(jìn)行抽象、封裝,然后這些封裝的模型,用來關(guān)聯(lián)后面的一些不同的算法。因?yàn)閯e人在用SDK的時候,不一定按照你所有東西來集成,可能只使用其中部分能力,這樣就有可能會導(dǎo)致一些特效的SDK存在版本不一致。如果沒有這個代理層,當(dāng)出現(xiàn)版本不一致的情況,對于上層來說可能就會出現(xiàn)大量接口的調(diào)整和修改,會比較耗時耗力。不過我們做代理的話,可能就給屏蔽上層接口的穩(wěn)定性,然后通過我們的模型跟一些抽象對象,可以去驅(qū)動不同的AR模塊的版本。

通過數(shù)據(jù)管線我們可以看到,從錄制模塊把數(shù)據(jù)傳到effect接口,再把數(shù)據(jù)再給到AR SDK的時候,每個AR SDK都會有一個處理檢測能力,會定時的檢測主屏指標(biāo)等,為什么要這么做?

我們知道現(xiàn)在的特效,場景、玩法是特別復(fù)雜的,處理效果沒辦法完全保證。所以為了保證每幀的處理和整體鏈路的穩(wěn)定,我們需要不斷做一些性能指標(biāo)的監(jiān)測,這些指標(biāo)監(jiān)測需要不斷的反饋給上層的調(diào)用。比如當(dāng)前數(shù)據(jù)傳輸?shù)乃俣容^快,或者傳遞幀太多處理不完,我們就可以通過數(shù)據(jù)管線進(jìn)行回傳,進(jìn)行控制。甚至可以調(diào)整錄制模塊采集的幀率等,這樣再把數(shù)據(jù)返回給錄制模塊,錄制模塊再將數(shù)據(jù)傳遞給其它模塊,像預(yù)覽進(jìn)行渲染等。通過數(shù)據(jù)管線加代理的方案,我們就可以很好的整合不同AR版本、能力,對外保持接口的統(tǒng)一。

04連麥模塊數(shù)據(jù)中間件設(shè)計(jì)和實(shí)現(xiàn)

連麥模塊也是目前音視頻產(chǎn)品中用的比較多的一個能力,如在線教育、直播帶貨、PK、娛樂等等,并且已經(jīng)慢慢成為一個標(biāo)準(zhǔn)化能力,但連麥模塊在使用過程當(dāng)中還存在比較多的問題。

標(biāo)準(zhǔn)直播是單向通信,且信令相對簡單。融合連麥模塊后,則會變成雙向通信,信令會變得復(fù)雜,媒體流從單路流變成了多路流。如左下圖,一個標(biāo)準(zhǔn)的直播SDK加連麥SDK的整合結(jié)構(gòu),可以看到白色區(qū)域是標(biāo)準(zhǔn)的直播流程,從創(chuàng)建直播間到建鏈、編碼、封包,包括通過隊(duì)列進(jìn)行分發(fā)等等。當(dāng)融合了連麥能力之后,對整個模塊來說會增加更多的鏈路。首先會引入RTC的服務(wù)端,媒體服務(wù)端與信令服務(wù)端。另外可能還會引入一些類似于業(yè)務(wù)系統(tǒng)的消息機(jī)制,IM服務(wù)器等等。

用戶如果發(fā)起連麥,可以看到左圖紅色的箭頭。首先它會向RTC信令服務(wù)器發(fā)送連麥請求,同時也會向IM服務(wù)器發(fā)送一個請求,向IM服務(wù)器發(fā)送請求的原因,主要是為了做一些業(yè)務(wù)上的處理,比如說UI界面或者場景的一些流程處理。實(shí)際上信令服務(wù)器主要是為了傳遞加入房間的請求,請求到達(dá)主播直播間后,主播直播間會響應(yīng)信令服務(wù)器,選擇同意或者拒絕。如果同意,則會通過信令服務(wù)器將信號返回給小主播/觀眾,小主播/觀眾這個時候就會把數(shù)據(jù)傳遞到RTMP的媒體服務(wù)器,主播也會把媒體流傳到RTMP服務(wù)器,兩路流匯聚到RTMP服務(wù)器后,通過旁路轉(zhuǎn)播等方式來進(jìn)行對外的轉(zhuǎn)播,此時觀眾就會看到兩個主播或主播和觀眾合流的畫面。

這個實(shí)現(xiàn)流程其實(shí)比較復(fù)雜繁瑣,對于用戶(主播)來說可能理解起來非常吃力。首先他要關(guān)心的東西特別多,例如 IM服務(wù)器、旁路直播,旁路直播還會涉及一些模板的設(shè)置等等,他可能都要去關(guān)心,所以使用起來非常的麻煩。而對于消費(fèi)側(cè)的觀眾來說,也同樣存在一些問題,比如說會出現(xiàn)相同地址,但是會出現(xiàn)不同編碼的兩路流,這種情況下可能對于一些播放器來說會有一些挑戰(zhàn),可能會出現(xiàn)一些卡頓,因?yàn)樗诓粩嗟闹刂靡恍┚幋a參數(shù),另外這種方案通過旁路轉(zhuǎn)推的方式,可能原始的直播流會斷掉,就在頻繁切換直播流跟混合流的過程當(dāng)中可能就會出現(xiàn)延遲,可能對于拉流側(cè)來說它就有很多的問題,也不太好。

針對這些問題其實(shí)我們也看到,就是用戶在使用過程當(dāng)中其實(shí)有很多的不方便,所以說可以看到說簡單的數(shù)據(jù)傳遞,其實(shí)并不能讓這個場景做的特別的簡單和應(yīng)用,后面我們就做了一些大量的端到端的一些數(shù)據(jù)鏈的整合,首先是我們考慮到了就是消費(fèi)側(cè)的編碼播放器的一些問題,首先是切換編碼參數(shù),這個方案可能并不是一個適用的方案,所以我們采用了本地混流的技術(shù)方案,其好處在于我的推流各方面的參數(shù)可以保持一致而不發(fā)生變化,而其實(shí)對于移動端的處理能力來說,本地的2~3路流的合流,其實(shí)對一些硬件來說,壓力并不是特別大。另外我們把IM服務(wù)器跟RTC信令服務(wù)器進(jìn)行了整合,因?yàn)槲覀冇X得讓用戶去關(guān)心這么多的信令其實(shí)是沒有必要的,而且用戶也可能會被這些問題所困擾,所以我們內(nèi)部就通過服務(wù)端的方式進(jìn)行了消息的整合,這樣子就讓用戶使用起來變得更加簡單。通過這種端到端的一些媒體和信令的整合,其實(shí)也是讓數(shù)據(jù)流變得簡單,提高了整體接入的應(yīng)用性。

05渲染模塊數(shù)據(jù)中間件設(shè)計(jì)和實(shí)現(xiàn)

為什么說渲染是音視頻SDK關(guān)鍵技術(shù)之一?從整體技術(shù)鏈路的角度來說,渲染模塊實(shí)際上是用戶最能感知到的一個模塊。在一些復(fù)雜的場景下,渲染模塊也承載了一些數(shù)據(jù)的交互和處理。因此渲染模塊所包括的處理已經(jīng)不再只是渲染,可能會涉及到某些場景的特殊需求,例如清屏等等:多人會議的時候,相當(dāng)于一個關(guān)閉畫面的效果;如多路混流,前面提到的RTC混流方案等等,渲染模塊也可以作為其中的一個技術(shù)方案。也包括像小程序,尤其是一些小程序、安卓的同層設(shè)計(jì)方案,渲染方案等等。

每個模塊甚至每個處理的節(jié)點(diǎn),都有可能存在渲染的需求,所以說我們要將渲染模塊進(jìn)一步拆分。首先通過數(shù)據(jù)管線的一個能力,把各個模塊的數(shù)據(jù)匯聚到渲染模塊,然后再進(jìn)行數(shù)據(jù)的處理。這里通常會將一些數(shù)據(jù)轉(zhuǎn)換成各個平臺的處理能力,比如CPU的Buffer,還有一些Surface等等。

數(shù)據(jù)加工,相對之前的生產(chǎn)流程這是新增的一個節(jié)點(diǎn),它主要是為了應(yīng)對一些復(fù)雜場景,如安卓的同層渲染、Surface的創(chuàng)建與繪制相分離,比如業(yè)務(wù)模塊持有了Surface,但是渲染模塊會間接引用并繪制。這里可能還會去做多路流混流的一些參數(shù)化配置,可以把每路流作為一個間值進(jìn)行保存,也會做像圖層跟視頻幀的綁定,然后通過渲染線程同時繪制多路流。

我們都知道渲染必須要獨(dú)立于當(dāng)前的線程,否則對CPU和整體的開銷影響還是比較大的。因此在創(chuàng)建完GL的環(huán)境之后,會按照GL隊(duì)列將數(shù)據(jù)進(jìn)行遍歷拆分,來實(shí)現(xiàn)單路流,甚至是多路流的繪制。接下來就是一些標(biāo)準(zhǔn)的渲染流程,包括設(shè)置渲染的頂點(diǎn),取渲染紋理,然后新增混合模式,通過綁定紋理來實(shí)現(xiàn)OpenGL整體的繪制。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)采集
    +關(guān)注

    關(guān)注

    38

    文章

    5819

    瀏覽量

    113430
  • 音視頻
    +關(guān)注

    關(guān)注

    4

    文章

    460

    瀏覽量

    29842
  • 數(shù)字化
    +關(guān)注

    關(guān)注

    8

    文章

    8547

    瀏覽量

    61585

原文標(biāo)題:移動音視頻SDK工程實(shí)踐之?dāng)?shù)據(jù)采集和處理

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    dm368錄制音視頻后用vlc播放不同步是怎么回事?

    目前我們用其他的開發(fā)板 能夠錄制音視頻,但是用vlc播放的時候發(fā)現(xiàn)每次都是視頻播放完成了音頻還要播放一會,隨著錄制時間加上,延后的這個時間也會變長 請問有知道怎么回事的嗎?
    發(fā)表于 10-15 06:56

    盤點(diǎn)那些常見音視頻接口

    我們熟知的一些常見音視頻接口,發(fā)展至今在日常使用中已經(jīng)漸漸少了。但是在工業(yè)領(lǐng)域的音視頻連接,依然能看到其身影。這些看似消失的接口,它們現(xiàn)在發(fā)展成什么樣子了?本期我們將做一個大盤點(diǎn)。
    的頭像 發(fā)表于 09-09 14:34 ?404次閱讀

    常見音視頻接口的靜電浪涌防護(hù)和濾波方案

    音視頻接口在現(xiàn)代多媒體設(shè)備中扮演著至關(guān)重要的角色,它們確保了音視頻信號在不同設(shè)備間的順暢傳輸,各種類型的音視頻接口滿足了多樣化的應(yīng)用場景需求。 在音視頻接口的設(shè)計(jì)領(lǐng)域,靜電浪涌防護(hù)與濾
    的頭像 發(fā)表于 06-25 11:28 ?571次閱讀

    音視頻IP化浪潮全面來襲,分布式系統(tǒng)開創(chuàng)音視頻行業(yè)新時代!

    在傳統(tǒng)音視頻頻系統(tǒng)中,廠商們各自采用不同的通訊方式和控制協(xié)議,這使得不同的產(chǎn)品之間就像一座座的信息孤島,要連接起來就需要復(fù)雜的轉(zhuǎn)換設(shè)備和系統(tǒng)再開發(fā)。隨著音視頻項(xiàng)目的規(guī)模不斷擴(kuò)大,各類音頻設(shè)備產(chǎn)品
    的頭像 發(fā)表于 05-30 16:55 ?608次閱讀

    音視頻產(chǎn)品EMC整改案例解析

    音視頻產(chǎn)品EMCRE整改案例解析
    的頭像 發(fā)表于 05-20 16:49 ?352次閱讀
    <b class='flag-5'>音視頻</b>產(chǎn)品EMC整改案例解析

    高清HDMI轉(zhuǎn)USB 3.0音視頻多功能音采集卡-測評

    LCC380的設(shè)計(jì)理念在于全面考慮到各種用戶場景下的需求。為了實(shí)現(xiàn)高品質(zhì)的音視頻采集效果,卡體搭載了業(yè)界領(lǐng)先的音頻處理器解決方案。無論您是熱衷于游戲直播、視頻會議還是其他音視頻應(yīng)用,都能通過LCC380獲得出色的音頻輸入輸出體驗(yàn)
    的頭像 發(fā)表于 05-14 17:45 ?734次閱讀
    高清HDMI轉(zhuǎn)USB 3.0<b class='flag-5'>音視頻</b>多功能音采集卡-測評

    【RTC程序設(shè)計(jì):實(shí)時音視頻權(quán)威指南】音視頻的編解碼壓縮技術(shù)

    音視頻所載有的信息在通過傳輸?shù)臅r候就需要壓縮編碼。 其中,文本壓縮是指通過使用各種算法和技術(shù),將文本數(shù)據(jù)表示為更緊湊的形式,以減少存儲空間。 霍夫曼編碼是一種無損壓縮算法,它可以根據(jù)字符出現(xiàn)
    發(fā)表于 04-28 21:04

    音視頻SoC與AI技術(shù)融合,帶來更智能的音視頻處理解決方案

    電子發(fā)燒友網(wǎng)報道(文/李彎彎)音視頻SoC,即音視頻系統(tǒng)級芯片或片上系統(tǒng),是一種高度集成化的芯片,它將電路板上的多塊芯片以及嵌入式軟件全部集成到一塊芯片中。音視頻SoC芯片廣泛應(yīng)用于各種嵌入式系統(tǒng)
    的頭像 發(fā)表于 04-26 01:20 ?4135次閱讀

    【RTC程序設(shè)計(jì):實(shí)時音視頻權(quán)威指南】音頻采集與預(yù)處理

    閑暇之余,繼續(xù)學(xué)習(xí)【RTC程序設(shè)計(jì):實(shí)時音視頻權(quán)威指南】這本書。 書中對于音頻采集的介紹非常詳細(xì)和全面,包括原理、方法、技術(shù)細(xì)節(jié)以及實(shí)踐應(yīng)用等方面的內(nèi)容。 音頻采集是實(shí)時音視頻通信中的關(guān)鍵步驟之一
    發(fā)表于 04-25 10:41

    【RTC程序設(shè)計(jì):實(shí)時音視頻權(quán)威指南】新書一瞥

    本人從事音視頻領(lǐng)域的開發(fā),經(jīng)常接觸實(shí)時音視頻處理相關(guān)的技術(shù),看到這本書非常有興趣閱讀,這本書全面介紹實(shí)時音視頻(RTC)技術(shù)的權(quán)威著作,該書詳細(xì)講解了RTC的基本概念、技術(shù)原理、系統(tǒng)設(shè)
    發(fā)表于 04-22 09:09

    【RTC程序設(shè)計(jì):實(shí)時音視頻權(quán)威指南】傳輸控制優(yōu)化閱讀 及其實(shí)踐分享

    應(yīng)用的,所以結(jié)合個人在UAC的開發(fā)實(shí)踐,結(jié)合書中介紹,分享下該部分內(nèi)容。 個人從UAC實(shí)時音頻傳輸開發(fā)來看,抖動緩存與均衡發(fā)送是最重要的部分,比必須實(shí)現(xiàn)的。因?yàn)閷?shí)時音視頻傳輸,實(shí)際
    發(fā)表于 04-21 17:11

    【RTC程序設(shè)計(jì):實(shí)時音視頻權(quán)威指南】本書概覽

    ,這都是按照音視頻流的開發(fā)的一般流程介紹的。然后介紹了編解碼以上所技術(shù),信令與媒體協(xié)商(個人覺得協(xié)商這里用協(xié)議更合適,因?yàn)槔锩嬷v解的是各種音視頻傳輸?shù)膮f(xié)議)。然后是控制傳輸優(yōu)化,可擴(kuò)展架構(gòu),評價指標(biāo)等
    發(fā)表于 04-21 17:09

    音視頻解碼生成:打造極致觀影體驗(yàn)的關(guān)鍵技術(shù)

    在現(xiàn)代多媒體時代,音視頻解碼生成技術(shù)已成為提供極致觀影體驗(yàn)的核心要素。它不僅能夠確保音視頻數(shù)據(jù)的高效傳輸,還能保證播放的流暢性和畫質(zhì)清晰度,為用戶帶來身臨其境的觀影享受。 1. 解碼生成的重要性
    的頭像 發(fā)表于 02-25 14:43 ?423次閱讀

    音視頻解碼生成與流媒體傳輸?shù)慕Y(jié)合

    音視頻解碼生成與流媒體傳輸是現(xiàn)代數(shù)字媒體技術(shù)中兩個不可或缺的部分,它們的結(jié)合為用戶提供了高質(zhì)量、實(shí)時性的多媒體體驗(yàn)。 1. 解碼生成與流媒體傳輸?shù)年P(guān)系 解碼生成是流媒體傳輸?shù)那疤?。在流媒體服務(wù)中
    的頭像 發(fā)表于 02-21 14:36 ?351次閱讀

    音視頻

    音視頻技術(shù)都喜歡深究內(nèi)部最核心的原理和機(jī)制,尤其是ffmpeg這個編解碼庫,可以說是音視頻領(lǐng)域事實(shí)上的標(biāo)準(zhǔn)。語音智能算法,語言語義分析和理解,流媒體服務(wù)器等高端技術(shù)也都基于它而構(gòu)建。希望有幸獲得本書,深度學(xué)習(xí)ffmpeg核心技術(shù),和作者一起在技術(shù)海洋中探索和進(jìn)步。
    發(fā)表于 11-23 08:51