• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 國內 >
     首頁(yè) > 新聞 > 國內 >

    Agora SDK 2.1新功能:開(kāi)發(fā)視頻直播特效更容易

    2018-04-03 10:07:17   作者:   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      在這個(gè)顏值即正義的時(shí)代,不論是通過(guò) Web 還是移動(dòng)端發(fā)起直播,美顏與特效已經(jīng)是很多直播平臺的標配功能。更有甚者,已經(jīng)開(kāi)始嘗試將AR融入產(chǎn)品,增加更多可以吸引用戶(hù)的體驗。不過(guò)要在直播中實(shí)現以上任何一個(gè)功能,都會(huì )對開(kāi)發(fā)者的技術(shù)棧提出了進(jìn)一步的要求。不論是在Web端基于 WebRTC 進(jìn)行視頻通話(huà)或在線(xiàn)教育的產(chǎn)品,還是 Android、iOS 上做直播。本文將簡(jiǎn)要梳理實(shí)現特效的原理,以及其中需要注意的難點(diǎn)。
      直播特效的實(shí)現原理
      直播的具體流程,包括:采集、前處理、編碼、傳輸、解碼、后處理、播放。通常情況下,我們會(huì )在攝像頭采集到視頻圖像后,開(kāi)始對其進(jìn)行特效處理,也就是在前處理的過(guò)程中進(jìn)行。
      實(shí)現直播特效的流程如下:
      采集:視頻的采集源主要有三種:攝像頭采集、屏幕錄制和從視頻文件推流。直播中常見(jiàn)的是通過(guò)攝像頭采集的圖像。以Android為例,由于需要進(jìn)行圖像的二次處理(濾鏡、特效),所以使用 SurfaceTexture來(lái)處理圖像流,給采集到的圖像增添特效、濾鏡等。SurfaceTexture 是一個(gè)紋理,可以想象成一個(gè) View 的中間件。Camera 把視頻采集的內容交給 SurfaceTexture,SurfaceTexture 進(jìn)行美顏處理,然后把內容交給 SurfaceView,渲染出來(lái)。
      前處理:對采集到的圖像進(jìn)行處理:比如通過(guò)均值模糊、高斯模糊和中值濾波等去噪算法,給原始視頻進(jìn)行“磨皮”;或者利用 GPUImage 庫,增加濾鏡;又或者是利用 ARCore、ARKit 等工具,為視頻添加實(shí)時(shí)的 AR 特效。
      在完成圖像的處理后,按照合適碼率、格式進(jìn)行編碼。
      最后,推流到 CDN。
      要實(shí)現美顏效果,不論是基于 WebRTC 的移動(dòng)端還是Web端,都可以通過(guò) GPUImage 來(lái)實(shí)現。如果是基于 WebRTC 與 React Native、GPUImage 相結合即可,不過(guò)需要修改 react-native-webrtc 的源碼。
      開(kāi)發(fā)中的難點(diǎn)
      在直播中實(shí)現特效、濾鏡,甚至AR特效的例子,我們可以在網(wǎng)上找到很多,我們也曾分享過(guò)基于 ARCore、ARKit 來(lái)實(shí)現。不過(guò)其中有很多需要開(kāi)發(fā)者注意的難點(diǎn)。
      一、缺乏可擴展性、靈活性
      如果通過(guò) WebRTC 來(lái)進(jìn)行開(kāi)發(fā),WebRTC 提供的渲染器是基于 GLSurfaceView 的 View 組件。與SurfaceView 相比,它沒(méi)有動(dòng)畫(huà)或者變形特效,因為 GLSurfaceView 是窗口 (window)的一部分。 因此,如果想往其他地方繪制,或者獲取視頻數據,就會(huì )比較麻煩。
      二、需要大量修改源碼
      通過(guò) WebRTC 的 Native API 是無(wú)法獲取攝像頭數據的,如果要做美顏,需要做大量改動(dòng),比如上述提到的修改 react-native-webrtc 源碼,也只是其中一部分工作。另外可能還需要調整 WebRTC 源碼,并不是拿來(lái)即用,這就要求開(kāi)發(fā)者要熟悉 WebRTC。
      三、性能與功耗問(wèn)題
      性能與功耗問(wèn)題在 Android 平臺上比較明顯。通常情況下,對圖像進(jìn)行處理時(shí),我們可以選擇輸入 YUV 數據,讓 CPU 進(jìn)行圖像處理,然后交給軟件/硬件編碼器進(jìn)行編碼。但這樣做會(huì )產(chǎn)生較高的 CPU 占用率,功耗隨之增加,App 響應速度受到影響。所以我們需要盡量使用 GPU 來(lái)完成圖形處理,更多地利用硬件性能。
      在編碼上也存在相同問(wèn)題。軟件編碼的優(yōu)點(diǎn)是靈活度高,但是缺點(diǎn)是功耗高,影響性能。硬件編碼則相對速度更快、功耗更低,是更優(yōu)的選擇。但它的問(wèn)題在于,能做的優(yōu)化和參數調整,取決于硬件廠(chǎng)商開(kāi)放的接口。而且硬件編碼在部分 Android 手機上的兼容性也存在問(wèn)題。
      四、硬件兼容性問(wèn)題
      WebRTC 等自研方案還需要考慮硬件的兼容性問(wèn)題。iOS 設備相對簡(jiǎn)單,但是在 Android 設備上,不同芯片、系統版本等因素,存在兼容問(wèn)題。
      Agora SDK 2.1版:實(shí)現直播特效更靈活
      相對于這種自研來(lái)講,聲網(wǎng)Agora SDK 將采集和渲染開(kāi)放,開(kāi)發(fā)者可以更靈活的處理視頻數據。如下圖綠色部分所示,處理權限開(kāi)放給開(kāi)發(fā)者,帶來(lái)更大的靈活性與擴展性。
      Capture(采集):聲網(wǎng)Agora SDK 支持自定義的視頻源類(lèi)型,可以方便利用我們提供的輔助類(lèi)構建 camera 視頻源,或者屏幕共享視頻源,或者文件視頻源等。
      添加特效:Agora SDK 的新接口直接利用 Android 系統組件Surface Texture 處理,并傳遞給 GPU,最后通過(guò)Agora SDK 硬件編碼器進(jìn)行視頻編碼。整條鏈路上最大限度發(fā)揮硬件性能,不經(jīng)過(guò)內存拷貝,不僅可以獲得更好的性能與功耗表現,避免影響 App 響應速度,也無(wú)需擔心硬件編解碼問(wèn)題。
      Renderer(渲染):聲網(wǎng)Agora SDK 開(kāi)放了視頻渲染器的接口,用戶(hù)可以靈活的根據現有的業(yè)務(wù),向 Android 標準的 SurfaceView,TextureView組件上或者是自定義的 View 組件上渲染。
      開(kāi)放新功能帶來(lái)的差異
      升級2.1版之前:
      在2.1之前的版本中,開(kāi)發(fā)者需要通過(guò) pushExternalVideoSource 接口,以共享Texture id 的方式來(lái)實(shí)現特效、美顏等功能,即需要傳入texture 所在的 EGL Context,以及Texture 的id。
      升級2.1之后:
      通過(guò)2.1版的自定義視頻源、自定義渲染器兩個(gè)新功能,能更靈活地實(shí)現想要的效果。通過(guò)它們,開(kāi)發(fā)者可以使用原有的共享 texture id 的方式,也可以利用系統組件,如 SurfaceTexture 或者 Surface 來(lái)傳遞 texture。例如,TextureSource 類(lèi)封裝了 SurfaceTexture 對象,開(kāi)發(fā)者可以利用它創(chuàng )建出 EglSurface,美顏處理后得到紋理數據,直接繪制到 EglSurface 上即可。
      這兩個(gè)功能給了我們在視頻、圖像渲染方面提供更開(kāi)放的想象空間,可以在直播中實(shí)現更多場(chǎng)景,比如我們此前結合 ARCore、ARKit 實(shí)現的 AR 場(chǎng)景,再比如類(lèi)似抖音跳舞機的游戲也能放到直播中。
      在 Agora SDK 2.1 中,我們?yōu)樽远x視頻源與自定義渲染器增加了多個(gè)新接口,更多原文查看。
    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 府谷县| 平山县| 湘阴县| 灌阳县| 嘉兴市| 永年县| 河南省| 云和县| 云浮市| 塔城市| 湘潭县| 璧山县| 昭苏县| 聂荣县| 海原县| 贵德县| 札达县| 渭源县| 正宁县| 连平县| 湛江市| 西乌珠穆沁旗| 大田县| 安国市| 永善县| 崇阳县| 股票| 婺源县| 邯郸市| 三明市| 卫辉市| 勐海县| 邳州市| 姚安县| 工布江达县| 永康市| 阳信县| 新宾| 庄河市| 临西县| 娄烦县| http://444 http://444 http://444 http://444 http://444 http://444