WebRTC框架中的硬件加速
WebRTC框架中的硬件加速
典型緩沖流量
應(yīng)用程序和單元測(cè)試設(shè)置
重要方法調(diào)用
WebRTC軟件包
局限性
WebRTC是一個(gè)免費(fèi)的開源項(xiàng)目,可為瀏覽器和移動(dòng)應(yīng)用程序提供實(shí)時(shí)通信功能。
WebRTC的主要功能是能夠發(fā)送和接收交互式高清視頻??焖偬幚泶祟愐曨l需要硬件加速的視頻編碼。
當(dāng)前,開源WebRTC項(xiàng)目框架支持各種軟件編碼器類型:VP8,VP9和H264。NVIDIA將硬件加速的H.264編碼集成到WebRTC編碼框架中。本文檔使用名稱NvEncoder表示此功能。
典型緩沖液流量
下圖顯示了硬件加速的WebRTC編碼框架中的典型緩沖區(qū)流。
發(fā)送YUV幀,該幀將YUV幀轉(zhuǎn)換為I420格式并在編碼器的輸出平面上排隊(duì)。使用專有的NVIDIA低級(jí)編碼庫(kù)將輸出平面緩沖區(qū)發(fā)送到NvEncoder。NvEncoder在其捕獲平面上返回已填充的已編碼緩沖區(qū)。
根據(jù)應(yīng)用程序的要求,發(fā)送編碼后的緩沖區(qū)以進(jìn)行進(jìn)一步處理。
應(yīng)用程序和單元測(cè)試設(shè)置
WebRTC_r32.2.0_aarch64.tbz2程序包中的readme文件包含有關(guān)應(yīng)用程序使用和安裝的其它信息。
設(shè)置和測(cè)試NvEncoder示例應(yīng)用程序
1。Video Loopback應(yīng)用程序:要運(yùn)行該應(yīng)用程序,請(qǐng)輸入以下命令:
$ ./video_loopback-編解碼器H264-寬度1280-高度720 --capture_device_index 0
其中:
?–codec指定編碼格式。硬件編碼當(dāng)前僅支持H.264。
?–width指定框架寬度。
?–height指定框架高度。
?–capture_device_index指定/ dev / video 的索引。
如果WebRTC框架正常工作,應(yīng)用程序?qū)@示具有所需寬度和高度的攝像機(jī)視頻流。如果WebRTC檢測(cè)到幀丟失,則按比例縮放。
2. 對(duì)等連接客戶端/服務(wù)器應(yīng)用程序:
相機(jī)設(shè)置:將USB相機(jī)連接到Jetson設(shè)備。
服務(wù)器設(shè)置:要在Jetson平臺(tái)上啟動(dòng)peerconnection_client應(yīng)用程序,請(qǐng)輸入以下命令:
$ ./peerconnection_server
此命令使用默認(rèn)配置在端口8888上啟動(dòng)服務(wù)器。
客戶端設(shè)置:要在Jetson平臺(tái)上啟動(dòng)peerconnection_client應(yīng)用程序的兩個(gè)實(shí)例,請(qǐng)輸入以下命令:
$ ./peerconnection_client --autoconnect --server < Server.IP >
$ ./peerconnection_client --server <Server.IP> --autoconnect --autocall
每個(gè)命令都會(huì)啟動(dòng)一個(gè)實(shí)例,該實(shí)例會(huì)自動(dòng)將客戶端連接到服務(wù)器。第二個(gè)命令使用-autocall選項(xiàng)來(lái)調(diào)用服務(wù)器上第一個(gè)可用的其它客戶端,而無(wú)需用戶干預(yù)。
3. ?為NvEncoder 0.264單元測(cè)試:輸入命令:
$ ./modules_tests --gtest_filter =“ TestNvH264Impl。*” --gtest_repeat = <迭代次數(shù)>
如果Jetson設(shè)備上的軟件顯示pulseaudio錯(cuò)誤:
輸入此命令安裝pulseaudio:
$ sudo apt安裝pulseaudio
輸入以下命令以啟動(dòng)pulseaudio守護(hù)程序:
$ pulseaudio –開始
重要方法調(diào)用
NvEncoder基于NvVideoEncoderFactory類,該類在頭文件中定義:
webrtc_headers / modules / video_coding / codecs / nvidia / NvVideoEncoderFactory.h
該頭文件位于軟件包WebRTC_r32.2.0_aarch64.tbz2中。
本節(jié)總結(jié)了對(duì)NvEncoder的重要調(diào)用。
創(chuàng)建支持硬件的視頻編碼器
?執(zhí)行方法調(diào)用:
std :: unique_ptr CreateVideoEncoder(const webrtc :: SdpVideoFormat&format)
參數(shù)為:
?format:指定所需的編碼格式。當(dāng)前僅支持SdpVideoFormat(H.264)。
該方法創(chuàng)建并返回指定格式的NvVideoEncoder對(duì)象。
查詢視頻編碼器
?執(zhí)行函數(shù)調(diào)用:
CodecInfo QueryVideoEncoder(const SdpVideoFormat&format)
參數(shù)為:
?format:指定所需的編碼格式。
該函數(shù)查詢視頻編碼器并返回其編解碼器信息。
獲取受支持的視頻格式
?執(zhí)行方法調(diào)用:
std :: vector GetSupportedFormats()
該方法返回編碼器支持的所有格式的SdpVideoFormat對(duì)象的向量。
WebRTC軟件包
文件WebRTC_r32.2.0_aarch64.tbz2包含以下文件:
?libwebrtc.a:WebRTC庫(kù)文件
?頭文件:所有WebRTC頭文件及其各自的路徑名
?video_loopback:用于測(cè)試基本視頻功能的應(yīng)用程序
?peerconnection_client:連接到服務(wù)器和其它客戶端的客戶端應(yīng)用程序
?peerconnection_server:一個(gè)創(chuàng)建服務(wù)器和客戶端接口的應(yīng)用程序
?module_test:編碼器單元測(cè)試應(yīng)用程序
?README:適用于應(yīng)用程序和NvVideoEncoderFactory的README文件。
局限性
當(dāng)前,硬件加速僅支持H.264編碼器。
該video_loopback僅適用于H.264編碼器。
USB攝像頭以YUY2顏色格式輸出緩沖區(qū),但是NVEncoder希望輸入為I420或NV12格式,需要進(jìn)行顏色轉(zhuǎn)換。當(dāng)前,這是使用CPU上的WebRTC框架完成的。
總結(jié)
以上是生活随笔為你收集整理的WebRTC框架中的硬件加速的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是GStreamer?
- 下一篇: OpenMAX概述