Linux
如何在 Linux 上將我的桌面/螢幕作為(假)“網路攝像頭”流式傳輸到 /dev/video1?
我有兩個命令,一個可以讓我將螢幕錄製到 AVI 影片文件,另一個可以讓我將影片文件作為(假)“網路攝像頭”流式傳輸。這在不支持選擇一個螢幕進行共享的應用程序中非常有用(我在看你 Slack)。
命令#1(https://askubuntu.com/a/892683/721238):
ffmpeg -y -f alsa -i hw:0 -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0+1920,0 -c:v libx264 -pix_fmt yuv420p -qp 0 -preset ultrafast screenStream.avi
命令#2(https://unix.stackexchange.com/a/466683/253391):
ffmpeg -re -i screenStream.avi -map 0:v -f v4l2 /dev/video1
為什麼我不能同時執行這兩個?好吧,每當我使用“網路攝像頭”時,第二個命令都會從文件的開頭開始流式傳輸。所以我必須把它計時得很近,否則會有延遲。
我嘗試了很多很多解決方案(包括使用 gstreamer 而不是 ffmpeg 的解決方案),但都無法正常工作。這是我最後的希望。
如何在 Ubuntu 上將我的桌面/螢幕作為(假)“網路攝像頭”流式傳輸到 /dev/video1?
解決了。
解決步驟:
- 解除安裝以前的 v4l2loopback
sudo modprobe -r v4l2loopback
git clone https://github.com/umlaeute/v4l2loopback/
make && sudo make install
(如果您使用的是安全啟動,則需要先對其進行簽名https://ubuntu.com/blog/how-to-sign-things-for-secure-boot)sudo depmod -a
- 載入 videodev 驅動程序
sudo modprobe videodev
sudo insmod ./v4l2loopback.ko devices=1 video_nr=2 exclusive_caps=1
根據您已經擁有的攝像頭數量更改*video_nr 。*零索引ls -al /dev/video*
使用 /dev/video$$ video_nr $$使用 ffmpegsudo ffmpeg -f x11grab -r 60 -s 1920x1080 -i :0.0+1920,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 -vf 'hflip,scale=640:360' /dev/video2
- 轉到https://webcamtests.com並測試您的虛擬攝像頭
- 利潤!
如果您希望這在兩次啟動之間持續存在,https://askubuntu.com/a/1024786/721238應該這樣做。