2014-03-20 4 views
3

У меня есть поток видео, который я хочу транслировать через RTMP.Живое видео ffmpeg задержка с использованием RTMP

Я использую FFmpeg сделать так, с помощью следующей команды:

ffmpeg -i http://192.168.1.77:18000/stream.flv -c copy -f flv rtmp://localhost/myapp/mystream 

Насколько я знаю, перекодирование видео потока будет ввести некоторую задержку. Поэтому мой вопрос: возможно ли, что я вводил задержку в выходной поток, используя эту команду ffmpeg (copy)?


Примечание стороны: Я пытаюсь перенаправить мой живой поток видео на Nginx сервер-, чтобы транслировать его (через RTMP) несколько jwplayers. До сих пор я получил задержку в 1 секунду и несколько кадров, и мне интересно, можно ли ее уменьшить.

+2

-fflags nobuffer может помочь ... https://trac.ffmpeg.org/wiki/StreamingGuide#Latency я могу Представьте себе, как это вводит много латентности, иначе мудрый ... – rogerdpack

+0

Спасибо @rogerdpack! Я попробовал -fflags nobuffer, и все было нормально, но через некоторое время ffmpeg.exe разбился, я не знаю, почему. Но мне удалось решить мою проблему без изменения команды ffmpeg, поэтому я предполагаю, что она не является ее ошибкой. – anpa

+0

Вы можете использовать ffplayer с nobuffer для проверки латентности, обратитесь к этому [answer] (https://stackoverflow.com/a/45370210/6521116) –

ответ

2

Ну, я решил свою проблему!

Я в конечном итоге пытался с другим игроком и разными настройками, и мне удалось получить некоторую задержку кадров (или вообще не было латентности), поэтому я думаю, что эта команда ffmpeg вообще не вводит латентность.

Просто для записи, я использую Flowplayer со следующими параметрами:

$f("streams", "http://releases.flowplayer.org/swf/flowplayer-3.2.18.swf", { 

       clip: { 
        url: 'mystream', 
        provider: 'rtmp', 
        live: true, 
        bufferLength: 0, 
        bufferTime: 0, 
       }, 

       plugins: { 
        rtmp: { 
         url: 'flowplayer.rtmp-3.2.3.swf', 
         netConnectionUrl: 'rtmp://192.168.1.196:1935/myapp' 
        } 
       } 
      }); 
+0

, так что это настройки «рабочая» низкая латентность? – rogerdpack

+0

Да, ключ здесь - установить «bufferLength: 0» на клиенте. На стороне сервера ни nginx (с модулем rtmp), ни ffmpeg не вводят латентность (или, по крайней мере, соответствующую задержку). – anpa

1

Все внесет небольшую задержку. Ничто не делается бесплатно, и время продолжает двигаться вперед. 1 секунда действительно хороша для rtmp. Чтобы уменьшить латентность, вам необходимо уменьшить количество шагов между проглатыванием и доставкой. Лучший способ сделать это - использовать обнаруженный серверный продукт, такой как wowza или FMS.

+0

Спасибо @szatmary! Я на самом деле не знаю достаточных значений латентности для каждой операции, но, думаю, вы правы! Во всяком случае, мне удалось решить мою проблему, уменьшив значения буферизации игроков. Теперь я получаю действительно живое видео! :) – anpa

Смежные вопросы