簡體   English   中英

Stream static 圖像到 v4l2loopback 使用帶有 v4l2 插件、ffmpeg 或 gstreamer 的 obs

[英]Stream static image to v4l2loopback using obs with v4l2 plugin, ffmpeg or gstreamer

我想將 stream 一個 static 圖像發送到 android 工作室模擬器。 為此,我在 linux ubuntu 20.04 中使用 v4l2loopback v.12.5 創建了一個虛擬相機。 虛擬攝像機在 /dev/video2 中創建。 我可以使用 obs 和插件 ffmpeg 或 gstreamer 在那里 stream ,但每個人都有不同的問題。 我不在乎哪個軟件可以工作……我總是使用分辨率為 1920x1080 的圖像來測試它。

OBS:我在這里按照本教程安裝了 obs 插件。 它解釋了如何安裝 v4l2loopback 並將插件添加到 obs。 該插件名為 obs-v4l2sink。 我使用以下命令啟動 v4l2loopback:

sudo modprobe v4l2loopback exclusive_caps=1 video_nr=2 card_label=virtualCam

接着:

v4l2loopback-ctl set-caps "video/x-raw, format=NV12, width=1920, height=1080" "/dev/video2"

然后我也用基礎 canvas 1920x1080 和 output 1920x1080 啟動 Obs。 在插件中,我選擇 NV12 作為視頻格式,/dev/video2 作為 V4L2 設備。 圖像成功發送到模擬器,但分辨率錯誤。 使用 ffplay 我收到此消息:

“輸入#0,video4linux2,v4l2,來自'/dev/video2':B sq= 0B f=0/0 持續時間:N/A,開始:1650.347834,比特率:27648 kb/s Stream #0:0:視頻: rawvideo (NV12 / 0x3231564E), nv12, 320x240, 27648 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc"

看來,分辨率縮小到 320x240,我不知道為什么。

ffmpeg:我可以 stream 使用 ffmpeg 到 /dev/video2 使用此命令:

ffmpeg -re loop 1 -i licensePlate.png -f v4l2 /dev/video2 

但我在 ffplay 中只得到錯誤的像素,輸出如下:

[video4linux2, v4l2 @ 0x7fb494000bc0] 出隊的 v4l2 緩沖區包含 118784 字節,但預期為 115200。 標志:0x00000001。

Gstreamer: Gstreamer 僅在我在 modprobe 之后不使用以下命令時才有效(如果我使用它,則管道被 Gstreamer 阻塞):

v4l2loopback-ctl set-caps "video/x-raw, format=NV12, width=1920, height=1080" "/dev/video2"

相反,我調用這個命令:

gst-launch-1.0 -v multifilesrc location=licensePlate2.png loop=1 caps="image/png,framerate=10/1" ! pngdec ! videoscale ! videoconvert ! "video/x-raw,format=NV12,width=1920,height=1080" ! v4l2sink device=/-dev/video2

使用 ffplay 我在 1920x1080 中看到了我想要的圖像,一切似乎都很好,但在 android 工作室模擬器中,我只得到一個奇怪的綠屏。 我之前得到了這個綠屏,我認為它與錯誤的分辨率有關。 我真的不知道這里有什么問題。 模擬器多次顯示這些日志:

 emulator: ERROR: camera_device_start_capturing: Dimensions 0x0 are wrong for pixel format NV12 emulator: ERROR: _camera_client_start: Cannot start camera '/dev/video2' for NV12[0x0]: Inappropriate ioctl for device

我正在使用的 avd 是 Pixel2 1920x1080 Android 11 x86 64 ,我正在使用以下命令啟動它:

./emulator -avd Pixel264 -camera-back webcam1 -no-snapshot
Pixel264 is my avd and webcam1 is the virtual webcam, that is linked to /dev/video2

我剛剛用 Android Studio Emulator API 28 (Google X86_ARM) 試了一下,它可以工作。 所以看起來它與模擬器的CPU架構有關,x86 64 不起作用。 不過,我需要 arm,謝天謝地,谷歌在 Api 28 中添加了 Arm 對圖像的翻譯。

似乎只有分辨率為 1920x1080 的圖像才有效,但可能只與比例有關。

由於某種原因,Obs 現在無法正常工作,但此命令可以正常工作: ffmpeg -loop 1 -re -i licensePlate2.png -f v4l2 -vcodec rawvideo -pixfmt nv12 -vf transpose=4 /dev/video2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM