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

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

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

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

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

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

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

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

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

代碼基本流程為:

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

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

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

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

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

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

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

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

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

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