ラップトップのウェブカメラをPCのビデオデバイスとして使用して、ビデオ会議などに使用したい。
だから私はビデオをストリーミングしたいだけではありません。デバイス全体をネットワーク経由で「ストリーミング」したいのですが。
つまり、2台のコンピューターが1台でWebカメラをストリーミングし、もう1台でビデオデバイスとして使用します。
どちらのコンピューティングも通常のUbuntu 18.04を実行しますが、まもなく20.04にアップグレードします
両方のマシンがネットワークに接続されており、PCがラップトップのIPに到達できると仮定します。次の手順に従ってください。
次を実行してv4l-utils
およびffmpeg
をインストールします:
Sudo apt install v4l-utils ffmpeg
このようにmatroska
メディアコンテナをインストールします:
Sudo apt install libmatroska6v5
次のコマンドを実行して、カメラストリームのnetcat
リスナーを開きます:
ffmpeg -i /dev/video0 -codec copy -f matroska - | nc -l 9999
次を実行してv4l-utils
およびffmpeg
をインストールします:
Sudo apt install v4l-utils ffmpeg
インストールv4l2loopback
および仮想カメラをロードします:
Sudo apt install v4l2loopback-dkms v4l2loopback-utils
Sudo modprobe -r v4l2loopback
Sudo depmod -a
Sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"
テスト:
Laptop_IP
をラップトップのIPに変更します):nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video0
ffplay /dev/video0
あなたの顔が見えれば、それは機能しています。
マイク?
ラップトップからPCのマイク出力も送信するには、次の手順に従ってください。
ラップトップ:
arecord -f cd -c 1 | nc -l 7777
パソコン上:
Sudo modprobe snd-aloop
arecord -l | grep -i loopback
出力は次のようになります。
card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
デバイス1を使用します(通常、これは仮想マイクです)カード1このようにhw:1,1
Laptop_IP
をラップトップのIPに変更します):nc Laptop_IP 7777 | aplay -f cd -D hw:1,1
マイクをテストし、圧縮が使用されていないため、サウンドの遅延が発生することを通知します。
通知:
テストが失敗する場合は、他のカメラデバイスが仮想であるか、PCの/dev
ディレクトリに存在している可能性があります。
これを修正するには、ls /dev/video*
を実行して、その数をメモします。次に、テスト内の2つのコマンドで、その後に番号が大きい方を使用します。これは次のように行われます:
Sudo modprobe -r v4l2loopback
を実行します
次にls /dev/video*
を実行し、/dev/video0 /dev/video1 /dev/video2 ... etc
のような既存のカメラをメモします。
次に実行します:
Sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"
次に、再度実行しますls /dev/video*
新しいカメラ/dev/video3
が次のように追加されます/dev/video0 /dev/video1 /dev/video2 /dev/video3
次のように、/dev/video0
ではなく、最後の2つのコマンドで新しいカメラを使用します。
nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video3
そして
ffplay /dev/video3
トラブルシューティング:
ストリームが通過しているかどうかをテストするにはv4l2loopback
で問題が発生している場合は、PCで実行できます。
nc Laptop_IP 9999 | mplayer -
または
nc Laptop_IP 9999 | vlc -
または
nc Laptop_IP 9999 | ffplay -
Googleハングアウトで使用するには:
@ janjaromirhorak のおかげで このコメント に示されています。
これを行う方法は他にもありますが、これはMozilla Firefoxでの私の方法でした。Googleハングアウトを開き、ビデオ通話を開始して、マイクと内部ウェブカメラの両方のリクエストを許可します。次に、cogwhellアイコンをクリックして、使用するWebカメラを選択できる設定ダイアログを開きます。仮想Webカメラを選択し、許可リクエストを受け入れて[完了]をクリックします。また、この設定は今後のビデオハングアウトでも持続するようです。次回、仮想Webカメラがすでに選択されて機能しているのを見つけたときです。 :)
したがって、カメラを別のマシンに借りたいと考えています。遅いかもしれませんが、この質問には解決策があるようです。
よくある問題ですが、ほとんどの会議/チャットアプリはローカルカメラデバイスのみをサポートしています(ネットワークやローカルファイルストリーミングはサポートしていません)。
あなたは一つだけ欠けています:
v4l2loopback
gst-launch-1.0
)、ffmpeg、vlc、...カムデバイスからネットワークにビデオをストリーミングするgst-launch-1.0
)、ffmpeg、vlc、...ビデオを受信してループバックデバイスにパイプする次に、デスクトップ(PC2)で会議/チャットアプリを設定し、ステップ(1)で作成したV4L2ループバックデバイスをカメラとして使用します。
参考文献:
私が正しく理解していれば、1台のコンピューターにビデオデバイスがあり、別のコンピューターの物理デバイスから入力を受け取ることになります。ここにテストするためのリソースがない場合でも、それは可能だと思います。少し前に、ビデオではなく似たようなことをしたことを覚えています。 this (また this ;両方の古い投稿)に従って、ビデオも実行できます。
まとめると
それらの投稿のソリューションとコメントは、dd
、ffmpeg
またはnetcat(nc
)を使用してビデオをダンプ/ストリーミングし、mplayer
またはvlc
を使用しますトンネルされたビデオを見るために、そしてtee
を使ってパイプすることさえ。
上記の投稿で利用可能なソリューションのいずれかを最初に試し、フィードバックを報告する場合、それは先に進むための良い出発点になります。
Webカメラがローカルに接続されている場合とまったく同じようにアクセスするローカルデバイスの作成はテストされていません。 This (古い投稿) [〜#〜] sshfs [〜#〜] を使用するとうまくいく場合があることを示唆しています。 YMMV。トンネルビデオの使用目的によって異なります。
参照
この目標を達成するには、 vlc を使用すると 一方向 になります。
Debian、Ubuntu、またはLinux MintにVLCをインストールするには:
$ Sudo apt-get install vlc
FedoraにVLCをインストールするには、まずRPM Fusionの無料リポジトリを有効にしてから、次を実行します:
$ Sudo yum install vlc
CentOSまたはRHEL 6にVLCをインストールするには、最初にEPELリポジトリをセットアップしてから、次のコマンドを使用します。
$ cd /etc/yum.repos.d/
$ Sudo wget http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo
$ Sudo yum install vlc
LinuxシステムとVLCがWebカメラを検出していることを確認してください。
そのためのウェブカメラの名前を知っている必要があります。以下の例では、Webカメラの名前は/dev/video0
です。
$ ls /dev/video*
/dev/video0
次に、ウェブカメラからビデオをテストする必要があります。これが使用する必要があるコマンドです。「video0」をデバイスの名前に置き換えることを忘れないでください。
$ vlc v4l2:///dev/video0
WebカメラがVLCによって正常に検出されると、ビデオストリームを表示できるはずです。
VLCでWebカメラが正常に検出されました。次はWebカメラストリーミングの構成です。
この例では、WebカメラはWMV形式でHTTPを介してストリーミングされます。ウェブカメラストリーミング用にVLCを設定するには、まずVLCを起動します。
$ vlc
VLCメニューで「ストリーミング」を選択します。
画面で、ウェブカメラまたはオーディオデバイスの名前を選択します。たとえば、ウェブカメラの場合は/ dev/video0、オーディオの場合はhw:0,0です。 [その他のオプションを表示]チェックボックスをオンにし、[MRL]および[オプションの編集]フィールドの値の文字列をメモします。これらの文字列は、チュートリアルの後半で使用されます。 「ストリーム」ボタンをクリックします。
ビデオソース(v4l2:/// dev/videoなど)を確認し、[次へ]をクリックして続行します。
Webカメラストリーミングの宛先、つまりストリーミング方法/ターゲットを選択します。この例では、ドロップダウンリストからHTTPを選択し、[追加]をクリックします。
次に、ストリーミングサービスのポート番号とパスを指定します。ポート番号には、8080と入力します。パス-"/stream.wmv"の場合、ポート番号は使用されていないと想定しています。トランスコーディングの場合は、ドロップダウンリストから[ビデオ-WMV + WMA(ASF)]プロファイルを選択します。 「次へ」をクリックします。
次の画面には、自動的に生成されたストリーム出力文字列が表示されます。書き留めて「ストリーム」ボタンをクリックします。
この時点で、VLCはHTTP経由でWebカメラからビデオのストリーミングを開始します。ストリーミングトラフィックはTCPポート番号8080のローカルホストに直接送信されるため、VLCウィンドウには何も表示されません。
TCPポート8080でVLCが正しく実行されていることを確認するには、次のコマンドを実行してVLCを探します。
$ Sudo netstat -nap | grep 8080
ストリーミングサーバーが実行を開始すると、ウェブカメラのライブフィードがhttp://:8080/stream.wmv
で利用可能になります
VLCプレーヤーまたはMPlayerを使用して、次のようにWebカメラフィードにアクセスできます。
$ vlc http://:8080/stream.wmv
$ mplayer http://:8080/stream.wmv
同じホストからのフィードをテストする場合は、代わりにループバックアドレス127.0.0.1を使用してください。
DroidCamを使用してみてください。私は1か所にラップトップを備えたPCを持っていないので、Android電話とUbuntu 19.10でテストしました。あなたのケースで試すことができるWifi Serverオプションがあります。
Ubuntuへのインストール:
Sudo apt install linux-headers-`uname -r`
Sudo apt install v4l2loopback-dkms v4l2loopback-utils
Sudo modprobe v4l2loopback
wget https://www.dev47apps.com/files/600/droidcam-64bit.tar.bz2 -O droidcam.tar.bz2
tar xjvf droidcam.tar.bz2
cd droidcam-64bit/
Sudo ./install
echo -e '[Desktop Entry]\n Version=1.0\n Name=DroidCam\n Exec=droidcam\n Icon=droidcam\n Type=Application\n Categories=Application' | Sudo tee /usr/share/applications/droidcam.desktop
端末から実行できます:droidcam &
ファイアウォールで許可:
Sudo ufw allow 4747
20.04の場合、このdroidcamインストールガイドは機能しませんでした。しかし、私は here と記述されている別の方法を見つけました。
すべてのオプションがすでに提供されているので、私の提案は少し異なります。
インストール TeamViewer を使用してラップトップに接続します。このアイデアの問題は、デスクトップPCを使用している場合でも、ラップトップのカメラを向ける必要があることです。これは、両方のコンピューターが同じネットワーク上にない場合でも機能します。 TeamViewerには、無料(非商用)の使用と有料(商用)の使用があります。
リモート接続を使用するUbuntuを搭載したDekstopコンピューターで remote 接続を使用できます。