Ffmpeg passthrough транспортного потока MPEG вызывает ошибки&сбои в потоке

Unbescholtener Бюргер назад с другим вопросом FFmpeg. Моя цель состоит в том, чтобы запустить экземпляр FFmpeg, который получает транспортный поток mpeg через RTP, выполняет произвольные операции над полученным потоком, такие как транскодирование или фильтрация, а затем передает измененный транспортный поток через RTP.

тем не менее, я не могу заставить его работать даже в самой базовой конфигурации: у меня есть .TS файл, который содержит единую программу, состоящую из одного видео и одного аудиопотока. Я использую экземпляр FFmpeg для потоковой передачи этого файла на localhost:

ffmpeg -re -i 1.ts -c copy -f rtp_mpegts rtp://127.0.0.1:5003

С ffplay, я подтверждаю, что это работает правильно:

ffplay -i rtp://127.0.0.1:5003

результат выглядит хорошо, звучит хорошо, не вызывает сообщений об ошибках на консоли.

теперь я пытаюсь поставить еще один экземпляр FFmpeg между ними, и все идет вниз. Я просто хочу, чтобы FFmpeg скопировал поток с порта 5003 на порт 5005 без дальнейшей обработки или транскодирования:

ffmpeg -re -probesize 50M -analyzeduration 50M -i rtp://127.0.0.1:5003?fifo_size=10000 -c copy -f rtp_mpegts rtp://127.0.0.1:5005

Я получаю много повторяющихся сообщения об ошибках на этой консоли, и когда я контролирую поток на порту 5005 с ffplay, появляется много артефактов, сбоев и выпадающих списков. Консольный вывод по большей части выглядит так:

...
Input #0, rtp, from 'rtp://127.0.0.1:5003?fifo_size=10000':
  Duration: N/A, start: 1.400022, bitrate: N/A
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p(progressive), 352x240 [SAR 1:1 DAR 22:15], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1: Audio: ac3 ([129][0][0][0] / 0x0081), 44100 Hz, stereo, fltp, 192 kb/s
Output #0, rtp_mpegts, to 'rtp://127.0.0.1:5005':
  Metadata:
    encoder         : Lavf58.2.102
    Stream #0:0: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p(progressive), 352x240 [SAR 1:1 DAR 22:15], q=2-31, 29.97 fps, 29.97 tbr, 90k tbn, 29.97 tbc
    Stream #0:1: Audio: ac3 ([129][0][0][0] / 0x0081), 44100 Hz, stereo, fltp, 192 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=    0 fps=0.0 q=-1.0 size=       0kB time=00:00:00.48 bitrate=   0.0kbits/s speed=0.957x
frame=    0 fps=0.0 q=-1.0 size=       0kB time=00:00:01.01 bitrate=   0.0kbits/s speed=0.991x
frame=    0 fps=0.0 q=-1.0 size=       0kB time=00:00:01.53 bitrate=   0.0kbits/s speed=1.01x 
frame=    1 fps=0.5 q=-1.0 size=      57kB time=00:00:02.05 bitrate= 227.6kbits/s speed=1.01x 
frame=   17 fps=6.7 q=-1.0 size=      83kB time=00:00:02.54 bitrate= 267.6kbits/s speed=   1x 
frame=   32 fps= 11 q=-1.0 size=     121kB time=00:00:03.04 bitrate= 324.9kbits/s speed=   1x 
[rtp @ 0x3db64c0] max delay reached. need to consume packet
[rtp @ 0x3db64c0] RTP: missed 50 packets
[rtp @ 0x3db64c0] PES packet size mismatch
frame=   37 fps= 10 q=-1.0 size=     132kB time=00:00:04.07 bitrate= 266.0kbits/s speed=1.15x frame=   37 fps=9.1 q=-1.0 size=     132kB time=00:00:04.07 bitrate= 266.0kbits/s speed=1.01x 
[rtp @ 0x3db64c0] max delay reached. need to consume packet
[rtp @ 0x3db64c0] RTP: missed 1 packets
[rtp @ 0x3db64c0] PES packet size mismatch
[rtp @ 0x3db64c0] max delay reached. need to consume packet
[rtp @ 0x3db64c0] RTP: missed 1 packets
frame=   47 fps= 10 q=-1.0 size=     150kB time=00:00:04.57 bitrate= 269.3kbits/s speed=1.01x
...

так... любая идея, что пошло не так и как это исправить? Взгляд на монитор ресурсов не указывает на высокую загрузку ЦП, памяти или сети.

11
задан UnbescholtenerBuerger
12.03.2023 21:13 Количество просмотров материала 2452
Распечатать страницу

1 ответ

Так что, видимо, моя проблема была -re флаг в команде, запускающей сквозной экземпляр FFmpeg.

Если бы я заранее посмотрел официальную документацию, мне бы не пришлось задавать этот вопрос:

-re (ввод)

чтение ввода с собственной частотой кадров. В основном используется для имитации захвата устройства, или текущий поток ввода (например, при чтении из файла). Не следует использовать с фактическими устройствами захвата или потоками ввода в реальном времени (где это может привести к потере пакетов).

http://ffmpeg.org/ffmpeg.html#Advanced-options

это именно то, что случилось со мной.

0
отвечен UnbescholtenerBuerger 2023-03-14 05:01

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх