視頻都是通過平臺系統(tǒng)提供的API來實現(xiàn)視頻采集,對于TSINGSEE青犀視頻正在開發(fā)的webrtc項目來說,也有一套標準。
Webrtc windows的視頻采集有一套抽象函數(shù):webrtc::VideoCaptureModule。函數(shù)在其中定義了啟動采集和啟動時設(shè)置的各種參數(shù),并且視頻數(shù)據(jù)調(diào)用的接口;內(nèi)部其實還有個DeviceInfo函數(shù)類,定義來獲取各種相機設(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)中的部分代碼:
代碼基本流程為:
A、首先調(diào)用VideoCaptureFactory::CreateDeviceInfo來創(chuàng)建DeviceInfo對象
B、再次調(diào)用m_deviceInfo->GetDeviceName來獲取設(shè)備的唯一標識
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中,之后可以進行本地預(yù)覽和編碼的發(fā)送到遠端。
如果停止采集,其實也很簡單,只需要調(diào)用m_vcm->StopCapture,并釋放m_vcm=nullptr即可,這樣其里面的析構(gòu)函數(shù)中會進行其他的資源釋放操作來防止內(nèi)泄漏。
本文摘自 :https://blog.51cto.com/t