歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 配置Linux下的虛擬攝像頭

配置Linux下的虛擬攝像頭

日期:2017/2/28 16:37:03   编辑:Linux教程

最近隨著chatroulette、tinychat等的Flash P2P視頻應用的普及,突然想念起以前Win下softcam之類的軟件,Google了一圈找到個AVLD,Another Video Loopback Device。[請翻牆]

AVLD是作為內核模塊起作用的,掛載avld,就會生成/dev/videoX,於是Flash、Pidgin、Skype(貌似不行)就能打開這個設備作為攝像頭;而AVLD的輸入則是對/dev/videoX文件的寫入,可以用mencoder、ffmpeg之類的工具把其他視頻流轉換特定格式後寫到/dev/videoX,這就完成整個“虛擬”的過程了。

我在Archlinux下用yaourt從AUR裡面安裝avld,很快很方便,下面一些例子命令:

#把自己加入video組,方便以後寫video設備
sudo gpasswd -a boypt video

#掛載avld模塊
sudo modprobe avld

#查看video設備,我的本本自帶的攝像頭是video0,虛擬的為video1
ls -l /dev/video*

#設置虛擬攝像頭的分辨率等參數,後面輸入的視頻必須跟這參數一致,否則會報錯,報錯信息運行dmesg|tail查看
echo "width=320 height=240 fps=25" > /dev/video0

#用mencoder給虛擬攝像頭寫入數據
#其中-vf的scale參數設置輸出的分辨率,format設置視頻顏色參數;
#讀取端的顏色參數需要跟這裡一致畫面才正常
#-ss參數可以設置視頻從某時間開始播放
mencoder "myvideofile.avi" -cache 8192 -nosound -ovc raw -vf scale=320:240,format=rgb24 -of rawvideo -o /dev/video1 -ss 0:5:0

#從另外的終端運行mplayer查看輸出
mplayer tv:// -tv "driver=v4l:device=/dev/video1:noaudio:outfmt=rgb24"
上面echo的命令是可以動態修改虛擬攝像頭的輸出參數的,也可以在掛載時候用參數設置;默認掛載的參數是320x240。
其中fps幀速可以有如下取值:

fps = 0:不設置幀速,輸出幀速跟寫入的一致;
fps > 0:固定輸出某個幀速;
fps < 0:幀速由輸出程序決定(當沒有輸出讀取程序就暫停)。
因為攝像頭設備同時只能被一個程序讀取,退出mplayer後可以打開視頻Flash,或者其他攝像頭應用查看效果。

PS:嘗試使用ffmpeg對X11抓屏發送到攝像頭,沒完全成功,理論上的命令應該如下:

ffmpeg -y -t 30 -f x11grab -qscale 2 -r 15 -s 1024x768 -i :0.0 -s 320x240 -f rawvideo -vcodec rawvideo -pix_fmt rgb24 /dev/video1
即對X進行1024x768, 15fps的抓圖,轉換成320x240大小,按rawvideo,rgb24方式寫到video1,這樣的效果僅僅是更新目標圖像上面一部分,可能跟ffmpeg的rawvideo輸出設置有關,但還沒找出什麼原因。

Copyright © Linux教程網 All Rights Reserved