當(dāng)前位置:首頁 > IT技術(shù) > Windows編程 > 正文

開發(fā)webrtc項目如何實現(xiàn)Windows視頻采集?
2021-10-12 14:24:40

視頻都是通過平臺系統(tǒng)提供的API來實現(xiàn)視頻采集,對于TSINGSEE青犀視頻正在開發(fā)的webrtc項目來說,也有一套標(biāo)準(zhǔn)。

開發(fā)webrtc項目如何實現(xiàn)Windows視頻采集? _webrtc

Webrtc windows的視頻采集有一套抽象函數(shù):webrtc::VideoCaptureModule。函數(shù)在其中定義了啟動采集和啟動時設(shè)置的各種參數(shù),并且視頻數(shù)據(jù)調(diào)用的接口;內(nèi)部其實還有個DeviceInfo函數(shù)類,定義來獲取各種相機(jī)設(shè)備信息的接口。

Webrtc中有很多的函數(shù)繼承;webrtc::VideoCaptureModule::VideoCaptureImpl是webrtc::VideoCaptureModule的子類,其中是和DeviceInfo的二個接口配合使用,而這二個接口函數(shù)的實現(xiàn)都和平臺相關(guān)。

Windows平臺相關(guān)的邏輯在VideoCaptureImpl的子類中實現(xiàn)。Windows平臺的實現(xiàn)是webrtc::VideoCaptureModule::VideoCaptureDS代碼中,利用DirectShow實現(xiàn)視頻采集功能。

VideoCaptureModule的基本使用相關(guān)代碼可以參照webrtc自帶的測試代碼(test/vcm_capturer.cc)中的部分代碼:

開發(fā)webrtc項目如何實現(xiàn)Windows視頻采集? _webrtc_02

代碼基本流程為:

A、首先調(diào)用VideoCaptureFactory::CreateDeviceInfo來創(chuàng)建DeviceInfo對象

B、再次調(diào)用m_deviceInfo->GetDeviceName來獲取設(shè)備的唯一標(biāo)識

C、調(diào)用VideoCaptureFactory::Create來創(chuàng)建,使用deviceUTF8創(chuàng)建VideoCaptureModule對象

D、調(diào)用m_vcm->RegisterCaptureDataCallback設(shè)置視頻數(shù)據(jù)的回調(diào)

E、采集的參數(shù)(如寬高等信息)設(shè)置到VideoCapture對象中去

F、最后調(diào)用m_vcm->StartCapture啟動采集

視頻數(shù)據(jù)采集之后,將數(shù)據(jù)通過OnFrame回調(diào)拋出,視頻數(shù)據(jù)封裝在VideoFrame中,之后可以進(jìn)行本地預(yù)覽和編碼的發(fā)送到遠(yuǎn)端。

如果停止采集,其實也很簡單,只需要調(diào)用m_vcm->StopCapture,并釋放m_vcm=nullptr即可,這樣其里面的析構(gòu)函數(shù)中會進(jìn)行其他的資源釋放操作來防止內(nèi)泄漏。

本文摘自 :https://blog.51cto.com/t

開通會員,享受整站包年服務(wù)立即開通 >