ubuntu虛擬機下 虛擬攝像頭 模擬攝像頭 virtualCam


ubuntu 虛擬機下使用攝像頭

:把usb2.0改成3.0;或者相反。等了半天,突然好了。虛擬機用攝像頭參考。沒用見下面的安裝一個虛擬攝像頭。

 在vlc,cheese都打不開虛擬攝像頭:no device found。

后來運行kurento的helloworld示例,先推流到虛擬攝像頭:

 ffmpeg -re -i ./doc/source.200kbps.768x320.flv  -f v4l2 /dev/video0

在firefox里面可以獲取到虛擬攝像頭了

 

 

在ubuntu上使用v4l2loopback和ffmpeg模擬攝像頭 

在做webrtc測試時,會發現它提供的peerconnection_client是抓取攝像頭畫面的,在沒有攝像頭的機器上,它是不會傳輸視頻數據的。這對於想在我的Linux台式機上調試webrtc代碼不大方便。

實際上,在src/modules/video_capture/linux/device_info_linux.cc上可以看到,webrtc是去讀/dev/video*設備文件來獲取攝像頭畫面的:

uint32_t DeviceInfoLinux::NumberOfDevices() { RTC_LOG(LS_INFO) << __FUNCTION__; uint32_t count = 0; char device[20]; int fd = -1; /* detect /dev/video [0-63]VideoCaptureModule entries */ for (int n = 0; n < 64; n++) { sprintf(device, "/dev/video%d", n); if ((fd = open(device, O_RDONLY)) != -1) { close(fd); count++; } } return count; } 

因此我們可以利用v4l2loopback模擬攝像頭,利用ffmpeg將桌面數據發送給/dev/video0設備來假冒一個攝像頭。

首選,如果機器上沒有安裝ffmpeg,可以先安裝一個默認版本的ffmpeg:

sudo apt install ffmpeg 

然后我們安裝和配置v4l2loopback內核模塊。
先去github拉取v4l2loopback代碼:

git clone https://github.com/umlaeute/v4l2loopback.git 

然后進入代碼目錄,根據README中的安裝指南進行安裝和加載:

# 編譯和安裝 make && sudo make install sudo depmod -a  # 加載到內核 sudo modprobe v4l2loopback 

然后,我們就可以發現沒有攝像頭設備的機器上出現了/dev/video0(攝像頭設備通常在文件系統的/dev/video*,如果已經有攝像頭設備,那么v4l2loopback映射的設備編號可能不是0,這個需要大家自己去確認)。

如果突然不能用就make clean后重新裝。

利用ffmpeg將桌面截屏推流到/dev/video0設備:

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0 

如此就相當於有了一個攝像頭了,這時候我們再去運行webrt的peerconnection_client,就會發現成功顯示了桌面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM