Die Synchronisationswiedergabe von Mplayer funktioniert bei mehr als zwei Videos lokal nicht

438
Rodrogo

Ich verwende Mplayer zur lokalen Wiedergabe von vier (Sicherheits-) Videos.

Für das erste Video laufe ich:

mplayer -udp-master -udp-ip 192.168.0.255 1_01_R_072018150000.avi 

Für jedes der folgenden Videos laufe ich:

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 

Alle Videos laufen auf demselben Rechner. Ich möchte sie nur synchron vorspulen.

Die Sache ist: Nur der erste Slave spielt synchron mit dem Master. Die anderen beiden beginnen im ersten Frame eingefroren und bleiben 10 oder 15 Sekunden lang auf diesem Weg. Danach startet die Wiedergabe nicht mehr mit den anderen.

Irgendeine Hilfe? Danke im Voraus.

Edit: Dies ist die Ausgabe des zweiten Slaves für die ersten 20 Sekunden, während der Master und der erste der Slaves fehlerfrei und synchron laufen.

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  
2
Ich habe versucht, die IP-Adresse in 127.0.0.1 zu ändern und sogar die Option udp-ip auszulassen, jedoch ohne Erfolg. Rodrogo vor 6 Jahren 0
Das Problem kann sein, dass Ihr localhost / loopback-Gerät keinen Broadcast-Verkehr unterstützt. Möglicherweise müssen Sie Ihre anderen Slaves auf anderen Computern, in VMs oder in Containern ausführen. harrymc vor 6 Jahren 0

1 Antwort auf die Frage

0
Kamil Maciorowski

MPlayer-Dokumentation sagt:

Wenn Sie -udp-ipdie Broadcast-Adresse des Masters einstellen, können mehrere Slaves mit derselben Broadcast-Adresse mit dem Master synchronisiert werden.

Normalerweise müssen diese Sklaven auf verschiedenen Maschinen laufen. Der Broadcast-Netzwerk-Stream kann zu vielen Maschinen gelangen, aber im Zusammenhang mit jeder einzelnen Maschine wird der Stream an einen einzelnen Überwachungsprozess gebunden.

Es ist eine Möglichkeit für mehrere Prozesse den gleichen Strom zu erhalten (vergleiche diese Antwort von mir, reuseaddr), aber es scheint mir, dass mplayeres nicht verwenden.

Ich schaffte es, das Problem auf Linux zu lösen mit socat, teeund bash. Da Sie Videos lokal abspielen müssen, bleiben wir bei 127.0.0.1; Wir brauchen nicht einmal Rundfunk.

Der erste Befehl ist wie der, den Sie verwendet haben:

mplayer -udp-master -udp-ip 127.0.0.1 video0.avi 

Führen Sie dann eine Pipe aus, die den empfangenen Stream verzweigt (Hinweis: 23867ist der Standardport, der von verwendet wird mplayer):

socat UDP-LISTEN:23867 - | tee >(socat - UDP-DATAGRAM:127.0.0.1:20001) >(socat - UDP-DATAGRAM:127.0.0.1:20002) >/dev/null 

Dadurch werden eingehende Daten erneut an die Ports 20001und gesendet 20002. Sie können >(socat - UDP-DATAGRAM:127.0.0.1:20003)weitere Ports hinzufügen, wenn Sie möchten.

Mit diesem mplayerVorgang können Slave- s unabhängig voneinander an ihren eigenen Port binden:

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 … 
Du bist toll, Rodrogo vor 6 Jahren 0