Esta é a minha configuração atual: Uma máquina Windows transmite um arquivo .ts
via VLC Media Player na configuração "RTP / Transport Stream" para uma máquina Debian. O Stream se desenrola em um loop infinito. Na máquina Debian, eu quero que o FFmpeg pegue o fluxo de entrada e o encaminhe para localhost:[different port]
. Eu monitore o fluxo encaminhado com ffplay
.
Veja como eu inicio o ffmpeg:
ffmpeg -probesize 50M -analyzeduration 50M -i rtp://127.0.0.1:5005?fifo_size=10000 -c copy -f mpegts udp://127.0.0.1:1234
O jogador é iniciado com
ffplay udp://localhost:1234
Até agora, tudo parece funcionar bem ... até que o vídeo transmitido termine e comece de novo. Nesse caso, o FFmpeg se espalha um pouco com essas mensagens:
[rtp @ 0x2c8e4a0] New audio stream 0:3 at pos:-1 and DTS:NOPTSsrate= 998.2kbits/s speed= 1x
[NULL @ 0x2d19580] non-existing PPS 0 referenced
Last message repeated 14 times
[NULL @ 0x2d19580] non-existing PPS 0 referenced00:02:24.52 bitrate= 997.9kbits/s speed= 1x
Last message repeated 13 times
[NULL @ 0x2d19580] non-existing PPS 0 referenced00:02:24.52 bitrate= 997.9kbits/s speed=0.996x
Last message repeated 14 times
[NULL @ 0x2d19580] non-existing PPS 0 referenced00:02:24.52 bitrate= 997.9kbits/s speed=0.992x
Last message repeated 14 times
[NULL @ 0x2d19580] non-existing PPS 0 referenced00:02:24.52 bitrate= 997.9kbits/s speed=0.988x
Last message repeated 1 times
frame= 3584 fps= 21 q=-1.0 Lsize= 17616kB time=00:02:24.52 bitrate= 998.5kbits/s speed=0.862x
Além disso, o sinal de vídeo no monitor ffplay
cai naturalmente. Se eu sair e reiniciar o FFmpeg com os mesmos parâmetros, ele funcionará bem. DuckDuckEste problema gerou a sugestão de adicionar -re -stream_loop -1
aos parâmetros do FFmpeg - isso realmente piorou: a saída de vídeo fica instável e rica em artefatos. Isso é explicado por essas mensagens de erro recorrentes:
Last message repeated 1 times
[rtp @ 0x2fbf4e0] max delay reached. need to consume packet
[rtp @ 0x2fbf4e0] RTP: missed 20 packets
[rtp @ 0x2fbf4e0] PES packet size mismatch
Ah, e além disso, isso não resolve o problema. Assim que o fluxo voltar ao início, o FFmpeg dropa a bola. Minha presunção é que é um problema relacionado ao timestamp, mas estou lutando para encontrar uma solução para isso.
É possível receber e encaminhar um fluxo em loop com o FFmpeg? Quais são os parâmetros de linha de comando apropriados para isso? A alteração do material de origem / formato do contêiner / protocolo de transporte não é uma opção.