日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

直播平台开发直播特效的原理与难点

發布時間:2024/1/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直播平台开发直播特效的原理与难点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直播平臺開發直播特效的原理與難點

在這個顏值即正義的時代,不論是通過 Web 還是移動端發起直播,美顏與特效已經是很多直播平臺的標配功能。更有甚者,已經開始嘗試將AR融入產品,增加更多可以吸引用戶的體驗。不過要在直播中實現以上任何一個功能,都會對開發者的技術棧提出了進一步的要求。不論是在Web端基于 WebRTC 進行視頻通話或在線教育的產品,還是 Android、iOS 上做直播。本文將簡要梳理實現特效的原理,以及其中需要注意的難點。

?

?

?

直播特效的實現原理

直播的具體流程,包括:采集、前處理、編碼、傳輸、解碼、后處理、播放。通常情況下,我們會在攝像頭采集到視頻圖像后,開始對其進行特效處理,也就是在前處理的過程中進行。

?

?

?

實現直播特效的流程如下:

  • 采集:視頻的采集源主要有三種:攝像頭采集、屏幕錄制和從視頻文件推流。直播中常見的是通過攝像頭采集的圖像。以Android為例,由于需要進行圖像的二次處理(濾鏡、特效),所以使用 SurfaceTexture來處理圖像流,給采集到的圖像增添特效、濾鏡等。SurfaceTexture 是一個紋理,可以想象成一個 View 的中間件。Camera 把視頻采集的內容交給 SurfaceTexture,SurfaceTexture 進行美顏處理,然后把內容交給 SurfaceView,渲染出來。

  • 前處理:對采集到的圖像進行處理:比如通過均值模糊、高斯模糊和中值濾波等去噪算法,給原始視頻進行“磨皮”;或者利用 GPUImage 庫,增加濾鏡;又或者是利用 ARCore、ARKit 等工具,為視頻添加實時的 AR 特效。

  • 在完成圖像的處理后,按照合適碼率、格式進行編碼。

  • 最后,推流到 CDN。

要實現美顏效果,不論是基于 WebRTC 的移動端還是Web端,都可以通過 GPUImage 來實現。如果是基于 WebRTC 與 React Native、GPUImage 相結合即可,不過需要修改 react-native-webrtc 的源碼。

開發中的難點

在直播中實現特效、濾鏡,甚至AR特效的例子,我們可以在網上找到很多,我們也曾分享過基于 ARCore、ARKit 來實現。不過其中有很多需要開發者注意的難點。

一、缺乏可擴展性、靈活性

如果通過 WebRTC 來進行開發,WebRTC 提供的渲染器是基于 GLSurfaceView 的 View 組件。與SurfaceView 相比,它沒有動畫或者變形特效,因為 GLSurfaceView 是窗口 (window)的一部分。 因此,如果想往其他地方繪制,或者獲取視頻數據,就會比較麻煩。

二、需要大量修改源碼

通過 WebRTC 的 Native API 是無法獲取攝像頭數據的,如果要做美顏,需要做大量改動,比如上述提到的修改 react-native-webrtc 源碼,也只是其中一部分工作。另外可能還需要調整 WebRTC 源碼,并不是拿來即用,這就要求開發者要熟悉 WebRTC。

三、性能與功耗問題

性能與功耗問題在 Android 平臺上比較明顯。通常情況下,對圖像進行處理時,我們可以選擇輸入 YUV 數據,讓 CPU 進行圖像處理,然后交給軟件/硬件編碼器進行編碼。但這樣做會產生較高的 CPU 占用率,功耗隨之增加,App 響應速度受到影響。所以我們需要盡量使用 GPU 來完成圖形處理,更多地利用硬件性能。

在編碼上也存在相同問題。軟件編碼的優點是靈活度高,但是缺點是功耗高,影響性能。硬件編碼則相對速度更快、功耗更低,是更優的選擇。但它的問題在于,能做的優化和參數調整,取決于硬件廠商開放的接口。而且硬件編碼在部分 Android 手機上的兼容性也存在問題。

四、硬件兼容性問題

WebRTC 等自研方案還需要考慮硬件的兼容性問題。iOS 設備相對簡單,但是在 Android 設備上,不同芯片、系統版本等因素,存在兼容問題。

Agora SDK 2.1版:實現直播特效更靈活

相對于這種自研來講,聲網Agora SDK 將采集和渲染開放,開發者可以更靈活的處理視頻數據。如下圖綠色部分所示,處理權限開放給開發者,帶來更大的靈活性與擴展性。

Capture(采集):聲網Agora SDK 支持自定義的視頻源類型,可以方便利用我們提供的輔助類構建 camera 視頻源,或者屏幕共享視頻源,或者文件視頻源等。

添加特效:Agora SDK 的新接口直接利用 Android 系統組件Surface Texture 處理,并傳遞給 GPU,最后通過Agora SDK 硬件編碼器進行視頻編碼。整條鏈路上最大限度發揮硬件性能,不經過內存拷貝,不僅可以獲得更好的性能與功耗表現,避免影響 App 響應速度,也無需擔心硬件編解碼問題。

Renderer(渲染):聲網Agora SDK 開放了視頻渲染器的接口,用戶可以靈活的根據現有的業務,向 Android 標準的 SurfaceView,TextureView組件上或者是自定義的 View 組件上渲染。

?

?

?

開放新功能帶來的差異

升級2.1版之前:

在2.1之前的版本中,開發者需要通過 pushExternalVideoSource 接口,以共享Texture id 的方式來實現特效、美顏等功能,即需要傳入texture 所在的 EGL Context,以及Texture 的id。

升級2.1之后:

通過2.1版的自定義視頻源、自定義渲染器兩個新功能,能更靈活地實現想要的效果。通過它們,開發者可以使用原有的共享 texture id 的方式,也可以利用系統組件,如 SurfaceTexture 或者 Surface 來傳遞 texture。例如,TextureSource 類封裝了 SurfaceTexture 對象,開發者可以利用它創建出 EglSurface,美顏處理后得到紋理數據,直接繪制到 EglSurface 上即可。

這兩個功能給了我們在視頻、圖像渲染方面提供更開放的想象空間,可以在直播中實現更多場景,比如我們此前結合 ARCore、ARKit 實現的 AR 場景,再比如類似抖音跳舞機的游戲也能放到直播中。

直播平臺開發直播特效的原理與難點

本文轉載自網絡,感謝(聲網Agora)的分享,轉載僅為分享干貨知識,如有侵權歡迎聯系云豹科技進行刪除處理

總結

以上是生活随笔為你收集整理的直播平台开发直播特效的原理与难点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。