私は、Wi-Fi に接続された Raspberry Pi と Pi Cam v2 を持っています。カメラ フィードを Wi-Fi 経由でラップトップにストリーミングし、そのストリームをラップトップのハードウェア カメラのように表示しようとしています。ハードウェア カメラを必要とする他のソフトウェアに取り込むためにこれを行いたいです (このソフトウェアは書き換えることができないため、回避策を講じる必要があります)。
私はラップトップで Ubuntu 18.04 を実行しています。私の調査によると、ffmpeg と vfl2loopback の組み合わせを使用すれば、これは非常に可能であるはずです。まず、このライブラリをインストールして、カメラを Web サーバーにストリーミングしました。https://github.com/silvanmelchior/RPi_Cam_Web_Interfaceこれはうまく機能し、ブラウザでカメラストリームにアクセスできるようになりました。http://10.0.0.47/http簡単にするために、ユーザー名/パスワードなしで設定しました。nmap の出力によると、カメラ ポートは 80 であると思われます。
私は現在、Ubuntu ラップトップでストリームをリダイレクトしようとしています。調査と実験に基づくと、次のコマンドが最も近いものです。
ffmpeg -re -ihttp://10.0.0.47/html-map 0:v -f v4l2 /dev/video0
(または、/html の代わりにポート 80 を使用しても同じですが、これが重要かどうかはわかりません): ffmpeg -re -ihttp://10.0.0.47:80-map 0:v -f v4l2 dev/video0
これは最初は機能しているように見えますが、その後次のエラーが発生します。
http://10.0.0.47:80: 入力処理中に無効なデータが見つかりました
Google で調べたところ、rpi_cam_web インターフェイスから間違った種類のストリームが出力されていることが原因の可能性がありますが、これが本当かどうか、また、もしそうなら、どのように修正すればよいのかはわかりません。また、Web サーバーにアクセスするページの HTML コードも調査したところ、ファイル名のタイムスタンプが常に変化する一連の jpg を送信していることがわかりました。これが問題なのかもしれませんが、これもわかりません。
何かアイデアはありますか? ご協力いただければ幸いです。
編集: 別の方法を試してみましたが、少しは改善されたようですが、まだ問題が発生しています:
(Pi の場合): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/' :demux=h264
-->これにより、VLCメディアプレーヤーで正常に表示できるストリームが開始されます。
(その後、ホスト システムで): gst-launch-1.0 -v rtspsrc location=rtsp://10.0.0.47:8000/ ! v4l2sink device=/dev/video4
/dev/video0、/dev/video1 など、さまざまなデバイスを試しました。video4 を除いて、すべて「"/dev/videoX" は出力デバイスではありません」というメッセージが表示されます。video4 は最初は動作しているように見えますが、その後、次のようなエラーが発生します。
エラー: 要素 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1 から: 内部データ ストリーム エラー。追加のデバッグ情報: gstbasesrc.c(3072): gst_base_src_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: ストリーミングが停止しました。理由はリンクされていません (-1) 実行は 0:00:00.082360368 後に終了しました
何が問題になっているのか、何か考えはありますか?
再度、感謝します!
編集2:
次のコマンドシーケンスで動作する可能性があります:
(pi の場合): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/' :demux=h264
(ホストコンピュータ上): ffmpeg -f h264 -i tcp://10.0.0.47:8000/ -f v4l2 -pix_fmt yuv420p /dev/video0
これはエラーをスローしませんが、カメラフィードを取得しようとしているソフトウェアでストリームをまだロードできないため、100% 機能しているかどうかはわかりません。次の Web サイト ツールを使用してテストしてみました。
そして、このツールでは「ダミービデオデバイス 0x0000」を選択できるのですが、これが正しいと確信しています。しかし、その後「ビデオデバイスが検出されませんでした」と表示され、テストでカメラが見つかりません。その後、同じダミービデオデバイスが、その後のページの再読み込み時にオプションとして表示されません。つまり、ストリームを渡す方法に問題があると思います。
答え1
このウェブサイトでは、RPi を OBS にストリーミングする方法を説明しています。 https://www.instructables.com/Webcam-Over-WiFi-for-OBS/
次に、OBS Virtual Camera を使用してハードウェア カメラをシミュレートできます。
(私は個人的に OBS Virtual Camera を使用していますが、RPi では使用したことはありません。)
あるいは、これを試すこともできます: https://www.tomshardware.com/uk/how-to/use-raspberry-pi-as-pc-webcam