Mplayer 无法在本地同步播放两个以上的视频

Mplayer 无法在本地同步播放两个以上的视频

我正在使用 Mplayer 在本地同步播放四个(安全)视频。

对于第一个视频,我正在运行:

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

所有视频都在同一台机器上运行。我只是想同步快进它们。

问题是:只有第一个从属设备与主设备同步播放。其他两个从属设备在第一帧开始冻结,并保持这种状态 10 或 15 秒。此后,播放开始与其他设备不同步。

有什么帮助吗?提前致谢。

编辑:这是第二个从属设备的输出,持续大约前 20 秒,而主设备和第一个从属设备运行良好且同步。

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 

答案1

MPlayer 文档说:

设置-udp-ip为主机的广播地址允许多个具有相同广播地址的从机与主机同步。

我认为这些从属进程通常必须在不同的机器上运行。广播网络流可能会到达多台机器,但在每台机器的上下文中,该流都会绑定到单个监听进程。

有一种方法可以让多个进程接收同一个流(比较我的这个答案reuseaddr)但在我看来mplayer并没有用到它。

socat我设法在 Linux 上使用、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)

通过此运行,slave 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

相关内容