web-dev-qa-db-ja.com

Linuxで(偽の)「ウェブカメラ」としてデスクトップ/画面を/ dev / video1にストリーミングするにはどうすればよいですか?

2つのコマンドがあります。1つは画面をAVIビデオファイルに記録するコマンドで、もう1つはビデオファイルを(偽の)「ウェブカメラ」としてストリーミングするコマンドです。これは、共有する1つの画面の選択をサポートしていないアプリで本当に便利です(私は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

これらの両方を同時に実行できないのはなぜですか?さて、2番目のコマンドは、「webcam」を使用するたびに、ファイルの先頭からストリーミングを開始します。だから私はそれを本当に閉じる時間を計らなければなりません、さもなければ待ち時間があります。

私は何度も試してみましたが(ffmpegの代わりにgstreamerを使用したソリューションを含む)、何も機能しません。これが私の最後の希望です。

Ubuntuで(偽の)「ウェブカメラ」としてデスクトップ/画面を/ dev/video1にストリーミングするにはどうすればよいですか?

3
ratskin

解決しました。

解決する手順:

  1. 以前のv4l2loopbackをアンロードSudo modprobe -r v4l2loopback
  2. git clone https://github.com/umlaeute/v4l2loopback/
  3. make && Sudo make install(セキュアブートを使用している場合は、最初に署名する必要があります https://ubuntu.com/blog/how-to-sign-things-for-secure-boot
  4. Sudo depmod -a
  5. VideodevドライバーをロードしますSudo modprobe videodev
  6. Sudo insmod ./v4l2loopback.ko devices=1 video_nr=2 exclusive_caps=1すでに取得したカメラの数に基づいてvideo_nrを変更します。ゼロインデックス
  7. ls -al /dev/video* ffmpegで/ dev/video [video_nr]を使用します
  8. Sudo 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
  9. https://webcamtests.com にアクセスして、ダミーカムをテストします dummy cam
  10. 利益! working

これをブート間で持続させたい場合は、 https://askubuntu.com/a/1024786/721238 を実行する必要があります。

6
ratskin