Mplayerを使用して、4つの(セキュリティ)ビデオをローカルで同期して再生しています。
最初のビデオでは、私は実行しています:
mplayer -udp-master -udp-ip 192.168.0.255 1_01_R_072018150000.avi
私が実行している後続のビデオのそれぞれについて:
mplayer -udp-slave -udp-ip 192.168.0.255 1_02_R_072018150000.avi
mplayer -udp-slave -udp-ip 192.168.0.255 1_03_R_072018150000.avi
mplayer -udp-slave -udp-ip 192.168.0.255 1_04_R_072018150000.avi
すべてのビデオは同じマシンで実行されています。それらを同期して早送りしたいだけです。
重要なのは、最初のスレーブだけがマスターと同期して再生するということです。他の2つは最初のフレームでフリーズを開始し、10秒または15秒間その状態を維持します。その後、再生は他と同期しなくなります。
何か助けはありますか?前もって感謝します。
編集:これは、マスターと最初のスレーブが正常に同期して実行されている間の、最初の20秒程度の2番目のスレーブからの出力です。
mplayer -udp-slave -udp-ip 192.168.0.255 1_04_R_072018150000.avi
MPlayer 1.3.0 (Debian), built with gcc-6.2.1 (C) 2000-2016 MPlayer Team
do_connect: could not connect to socket
connect: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing 1_04_R_072018150000.avi.
libavformat version 57.56.101 (external)
Mismatching header version 57.56.100
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
Badly interleaved AVI file detected - switching to -ni mode...
AVI: No audio stream found -> no sound.
VIDEO: [H264] 704x576 24bpp 25.000 fps 1214.6 kbps (148.3 kbyte/s)
Failed to open VDPAU backend libvdpau_i965.so: cannot open shared object file: No such file or directory
[vdpau] Error when calling vdp_device_create_x11: 1
[VO_XV] Could not grab port 110.
[VO_XV] Could not grab port 111.
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 57.64.101 (external)
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
Load subtitles in ./
==========================================================================
Opening audio decoder: [alaw] aLaw/uLaw audio decoder
AUDIO: 8000 Hz, 1 ch, s16le, 64.0 kbit/50.00% (ratio: 8000->16000)
Selected audio codec: [alaw] afm: alaw (aLaw)
==========================================================================
AO: [Pulse] 8000Hz 1ch s16le (2 bytes per sample)
Starting playback...
Movie-Aspect is undefined - no prescaling applied.
VO: [xv] 704x576 => 704x576 Planar YV12
A: 0.0 V: 0.0 A-V: 0.000 ct: 0.000 1/ 1 ??% ??% ??,?% 0 0
MPlayerのドキュメント 言います:
マスターのブロードキャストアドレスに_
-udp-ip
_を設定すると、同じブロードキャストアドレスを持つ複数のスレーブがマスターに同期できるようになります。
通常、これらのスレーブは異なるマシンで実行する必要があると思います。ブロードキャストネットワークストリームは多くのマシンに到達する可能性がありますが、すべての単一マシンのコンテキストでは、ストリームは単一のリスニングプロセスにバインドされます。
複数のプロセスが同じストリームを受信する方法はありますが(比較 私のこの答え 、reuseaddr
)、mplayer
はそれを使用していないようです。 。
Linuxでsocat
、tee
、bash
を使って問題を解決することができました。ビデオをローカルで実行する必要があるので、_127.0.0.1
_に固執しましょう。放送すら必要ありません。
最初のコマンドは、使用したコマンドと似ています。
_mplayer -udp-master -udp-ip 127.0.0.1 video0.avi
_
次に、受信したストリームをフォークするパイプを実行します(注:_23867
_はmplayer
が使用するデフォルトのポートです):
_socat UDP-LISTEN:23867 - | tee >(socat - UDP-DATAGRAM:127.0.0.1:20001) >(socat - UDP-DATAGRAM:127.0.0.1:20002) >/dev/null
_
これにより、受信データがポート_20001
_および_20002
_に再送信されます。必要に応じて、>(socat - UDP-DATAGRAM:127.0.0.1:20003)
以上のポートを追加できます。
これを実行すると、スレーブmplayer
- sは独立してバインドでき、それぞれが独自のポートにバインドできます。
_mplayer -udp-slave -udp-ip 127.0.0.1 -udp-port 20001 video1.avi
mplayer -udp-slave -udp-ip 127.0.0.1 -udp-port 20002 video2.avi
…
_