天天看點

使用mplayer檢視攝像頭

在mplayer中檢視攝像頭,可使用如下指令:

mplayer tv:// -tv driver=v4l2:device=/dev/video0:input=0:outfmt=bgr24:width=640:height=480:fps=25 -vo x11

當然,前提是你已經安裝了攝像頭驅動。

在mplayer中檢視YUV格式的圖檔,可使用如下指令:

mplayer -demuxer rawvideo -rawvideo w=320:h=240:format=yuy2 qvga.yuv -loop 0

由于是raw data檔案,檔案中隻包含圖像資料,參數需由指令行提供,如width,height和format。

注意format的可選項有:420:yv12 i420

                                  422:yuy2 uyvy

可用如下指令檢視所支援的format

mplayer -rawvideo format=help

-loop 0為循環播放。

最近随着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 -vfscale=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輸出設定有關,但還沒找出什麼原因。

繼續閱讀