Воспроизведение синхронизации Mplayer не работает для более чем двух видео локально

345
Rodrogo

Я использую 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  
2
Я попытался изменить IP-адрес на 127.0.0.1 и даже оставить опцию udp-ip, но безрезультатно. Rodrogo 5 лет назад 0
Проблема может быть в том, что ваше локальное / петлевое устройство не поддерживает широковещательный трафик. Вам может потребоваться запустить других подчиненных на других компьютерах, в виртуальных машинах или в контейнерах. harrymc 5 лет назад 0

1 ответ на вопрос

0
Kamil Maciorowski

Документация 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 … 
Ты обалденный, Rodrogo 5 лет назад 0

Похожие вопросы