1.win+r打開運行。
2.在運行中鍵入services.msc回車,打開服務。
3.右邊下拉找到VMware Authorization Service。
4.雙擊打開屬性,啟動類型->自動,點擊驅動,點擊應用,點擊確定。這個時候已經授權虛擬機能訪問到攝像頭了。
5.打開虛擬機,點擊"虛擬機"->可移動設備,找到攝像頭camera,點擊鏈接。此時虛擬機完成對攝像頭的接管。
6.查看在/dev/下有video的文件。
安裝cheese,打開攝像頭:
sudo apt
-get install cheese
在終端輸入cheese回車->此時可以看到打開的攝像頭。
查看設備類型
ffmpeg
-devices
可以看到有video4linux2,v4l2這個選項
“ v4l2”可以用作“ video4linux2”的別名。
alsa是音頻類型,見另一篇:虛擬機使用pc麥克風聲卡
根據設備類型查看具體設備名
ffmpeg
-sources video4linux2
或
ffmpeg
-sources v4l2
可以看到有這兩個設備,這兩個設備對應pc的攝像頭
/dev
/video1
[Integrated Camera
: Integrated I
]/dev
/video0
[Integrated Camera
: Integrated C
]
用命令打開攝像頭,另一個不能用來打開
ffplay
-f video4linux2
-video_size
640x480
-pixel_format yuyv422
-framerate
30 -i
/dev
/video0
查看設備輸入輸出參數
ffmpeg
-h demuxer
=v4l2
如查看都支持哪些像素格式
ffplay
-f video4linux2
-list_formats all
/dev
/video0
這些選項也可以用代碼設置,"video_size"等名稱與ffmpeg -h demuxer=v4l2 命令列舉的名稱一樣。
AVDictionary *options = NULL;
av_dict_set(&options, “video_size”, “1920x1080”, 0);
av_dict_set(&options, “framerate”, “30”, 0);
//以上參數如果不設置的話,ffmpeg就會用默認值,但默認值攝像頭不一定支持
int re = avformat_open_input(&ic, “/dev/video0”, ifmt, &options);
其次對于顯示在/dev/video中的攝像頭其實都是支持UVC協議的攝像頭,一般說攝像頭免驅動也是基于UVC開發的,我們可以用luvcview這款軟件查看所有基于UVC的攝像頭的信息,對于ubuntu12,可以直接執行下列命令安裝,因為當時是為ubuntu12設計的:
sudo apt-get install luvcview
對于其他版本,可以到官網下載deb包安裝,連接:
luvcview_0.2.6-5_amd64.deb (52.3 KiB)
安裝好后
打開攝像頭
luvcview
-l
打開攝像頭
luvcview
-d
/dev
/video1
-f yuv
-s
640x480
查看設備支持的像素格式和幀率
luvcview
-d
/dev
/video0
-L
可以看到支持的像素格式:MJPG YUYV RGB3 BGR3 YU12 YV12
Time interval between frame: 1/30 也就是幀間的時間間隔,也就是幀率了。
luvcview
0.2.6SDL information
:Video driver
: x11A window manager is available
Device information
:Device path
: /dev
/video0
{ pixelformat
= 'MJPG', description
= 'Motion-JPEG' }
{ discrete
: width
= 1280, height
= 720 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 180 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 352, height
= 288 }Time interval between frame
: 1/30,
{ discrete
: width
= 424, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 360 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 848, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 960, height
= 540 }Time interval between frame
: 1/30,
{ pixelformat
= 'YUYV', description
= 'YUYV 4:2:2' }
{ discrete
: width
= 640, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 180 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 352, height
= 288 }Time interval between frame
: 1/30,
{ discrete
: width
= 424, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 360 }Time interval between frame
: 1/30,
{ discrete
: width
= 848, height
= 480 }Time interval between frame
: 1/20,
{ discrete
: width
= 960, height
= 540 }Time interval between frame
: 1/15,
{ discrete
: width
= 1280, height
= 720 }Time interval between frame
: 1/10,
{ pixelformat
= 'RGB3', description
= 'RGB3' }
{ discrete
: width
= 1280, height
= 720 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 180 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 352, height
= 288 }Time interval between frame
: 1/30,
{ discrete
: width
= 424, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 360 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 848, height
= 480 }Time interval between frame
: 1/20,
{ discrete
: width
= 960, height
= 540 }Time interval between frame
: 1/30,
{ pixelformat
= 'BGR3', description
= 'BGR3' }
{ discrete
: width
= 1280, height
= 720 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 180 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 352, height
= 288 }Time interval between frame
: 1/30,
{ discrete
: width
= 424, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 360 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 848, height
= 480 }Time interval between frame
: 1/20,
{ discrete
: width
= 960, height
= 540 }Time interval between frame
: 1/30,
{ pixelformat
= 'YU12', description
= 'YU12' }
{ discrete
: width
= 1280, height
= 720 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 180 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 352, height
= 288 }Time interval between frame
: 1/30,
{ discrete
: width
= 424, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 360 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 848, height
= 480 }Time interval between frame
: 1/20,
{ discrete
: width
= 960, height
= 540 }Time interval between frame
: 1/30,
{ pixelformat
= 'YV12', description
= 'YV12' }
{ discrete
: width
= 1280, height
= 720 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 180 }Time interval between frame
: 1/30,
{ discrete
: width
= 320, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 352, height
= 288 }Time interval between frame
: 1/30,
{ discrete
: width
= 424, height
= 240 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 360 }Time interval between frame
: 1/30,
{ discrete
: width
= 640, height
= 480 }Time interval between frame
: 1/30,
{ discrete
: width
= 848, height
= 480 }Time interval between frame
: 1/20,
{ discrete
: width
= 960, height
= 540 }Time interval between frame
: 1/30,
ffplay
-f video4linux2
-framerate
60 -video_size
1920x1080
-pixel_format mjpeg
-i
/dev
/video4
用mjpeg的方式播放,并設置幀率。
如果你想把其他的raw流放入/dev/video設備中,也是可以用ffmpeg推流的:
ffmpeg
-f x11grab
-r
15 -s
1280x720
-i
:0.0+0,0 -vcodec rawvideo
-pix_fmt yuv420p
-threads
0 -f v4l2
/dev
/video0
以上把屏幕推流到/dev/video0上,但video0是必須是虛擬設備,不對應實際device
如何設置虛擬/dev/video參考:https://www.cnblogs.com/xl2432/p/13501145.html
補充:
ffmpeg的libavdevice模塊支持的計算機中常用的音視頻捕獲或輸出設備:ALSA、AUDIO_BEOS 、JACK、OSS、1394、VFW等。
總結
以上是生活随笔為你收集整理的虚拟机使用pc摄像头的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。