web-dev-qa-db-ja.com

デスクトップPCのラップトップからWebカメラを使用する

ラップトップのウェブカメラをPCのビデオデバイスとして使用して、ビデオ会議などに使用したい。

だから私はビデオをストリーミングしたいだけではありません。デバイス全体をネットワーク経由で「ストリーミング」したいのですが。

つまり、2台のコンピューターが1台でWebカメラをストリーミングし、もう1台でビデオデバイスとして使用します。

どちらのコンピューティングも通常のUbuntu 18.04を実行しますが、まもなく20.04にアップグレードします

19
John Doe

両方のマシンがネットワークに接続されており、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

PC上

次を実行して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"

テスト:

  • ラップトップの実際のカメラをPCの仮想カメラにストリーミングします(Laptop_IPをラップトップのIPに変更します):
nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video0
  • 仮想カメラを起動して再生します。
ffplay /dev/video0
  • ノートパソコンのカメラにcheeseと言います。

あなたの顔が見えれば、それは機能しています。


マイク?

ラップトップから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 
  • システム設定->サウンド->入力で新しいマイクデバイスを選択します。

マイクをテストし、圧縮が使用されていないため、サウンドの遅延が発生することを通知します。


通知:

  • これはテストされており、実行中の2台のマシンで問題なく動作します最新のUbuntu 19.10の同じバージョン

テストが失敗する場合は、他のカメラデバイスが仮想であるか、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カメラがすでに選択されて機能しているのを見つけたときです。 :)

13
Raffa

したがって、カメラを別のマシンに借りたいと考えています。遅いかもしれませんが、この質問には解決策があるようです。

よくある問題ですが、ほとんどの会議/チャットアプリはローカルカメラデバイスのみをサポートしています(ネットワークやローカルファイルストリーミングはサポートしていません)。

あなたは一つだけ欠けています:

v4l2loopback

  1. デスクトップ(PC2)でV4L2ループバックデバイスを作成する
  2. ラップトップ(PC1)では、GStreamer(gst-launch-1.0)、ffmpeg、vlc、...カムデバイスからネットワークにビデオをストリーミングする
  3. デスクトップ(PC2)では、GStreamer(gst-launch-1.0)、ffmpeg、vlc、...ビデオを受信して​​ループバックデバイスにパイプする

次に、デスクトップ(PC2)で会議/チャットアプリを設定し、ステップ(1)で作成したV4L2ループバックデバイスをカメラとして使用します。

参考文献:

3
user.dz

私が正しく理解していれば、1台のコンピューターにビデオデバイスがあり、別のコンピューターの物理デバイスから入力を受け取ることになります。ここにテストするためのリソースがない場合でも、それは可能だと思います。少し前に、ビデオではなく似たようなことをしたことを覚えています。 this (また this ;両方の古い投稿)に従って、ビデオも実行できます。

まとめると

それらの投稿のソリューションとコメントは、ddffmpegまたはnetcat(nc)を使用してビデオをダンプ/ストリーミングし、mplayerまたはvlcを使用しますトンネルされたビデオを見るために、そしてteeを使ってパイプすることさえ。

上記の投稿で利用可能なソリューションのいずれかを最初に試し、フィードバックを報告する場合、それは先に進むための良い出発点になります。

Webカメラがローカルに接続されている場合とまったく同じようにアクセスするローカルデバイスの作成はテストされていません。 This (古い投稿) [〜#〜] sshfs [〜#〜] を使用するとうまくいく場合があることを示唆しています。 YMMV。トンネルビデオの使用目的によって異なります。

参照

  1. SSHまたはtcptunnelを介してビデオデバイスをパイプする?

  2. ssh経由で/ dev/videoをパイプできますか

  3. パイピングとSSH経由でリモートWebカメラを見ていますか?

  4. [〜#〜] sshfs [〜#〜]

vlc

この目標を達成するには、 vlc を使用すると 一方向 になります。

ステップ1-セットアップ

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

手順2-VLCでWebカメラを確認する

LinuxシステムとVLCがWebカメラを検出していることを確認してください。

そのためのウェブカメラの名前を知っている必要があります。以下の例では、Webカメラの名前は/dev/video0です。

$ ls /dev/video*
/dev/video0

次に、ウェブカメラからビデオをテストする必要があります。これが使用する必要があるコマンドです。「video0」をデバイスの名前に置き換えることを忘れないでください。

$ vlc v4l2:///dev/video0

WebカメラがVLCによって正常に検出されると、ビデオストリームを表示できるはずです。

手順3-VLCでのWebcamストリーミングの構成

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

ステップ4-ウェブカメラからストリーミングビデオを見る

ストリーミングサーバーが実行を開始すると、ウェブカメラのライブフィードがhttp://:8080/stream.wmvで利用可能になります

VLCプレーヤーまたはMPlayerを使用して、次のようにWebカメラフィードにアクセスできます。

$ vlc http://:8080/stream.wmv
$ mplayer http://:8080/stream.wmv

同じホストからのフィードをテストする場合は、代わりにループバックアドレス127.0.0.1を使用してください。

2

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 &

enter image description here

ファイアウォールで許可:

Sudo ufw allow 4747

enter image description here

20.04の場合、このdroidcamインストールガイドは機能しませんでした。しかし、私は here と記述されている別の方法を見つけました。

1
Gryu

すべてのオプションがすでに提供されているので、私の提案は少し異なります。

  1. インストール TeamViewer を使用してラップトップに接続します。このアイデアの問題は、デスクトップPCを使用している場合でも、ラップトップのカメラを向ける必要があることです。これは、両方のコンピューターが同じネットワーク上にない場合でも機能します。 TeamViewerには、無料(非商用)の使用と有料(商用)の使用があります。

  2. リモート接続を使用するUbuntuを搭載したDekstopコンピューターで remote 接続を使用できます。

0
Arak Rachael