
Estou tentando usar o ffmpeg para receber um fluxo h264 por RTSP e encaminhar esse fluxo como um fluxo rtp multicast. Posso receber o stream e produzi-lo como um stream rtp multicast usando o seguinte comando:
ffmpeg -i rtsp://10.255.11.203/ProfileToken_1_1 -vcodec copy -an -f rtp rtp://230.255.10.25:50000
O fluxo de entrada contém pacotes SPS PPS e SEI. Não consigo fazer com que o ffmpeg produza isso também.
Eu experimentei o -flags global_header
parâmetro para ativar e desativar o cabeçalho global e tentei adicionar -bsf h264_mp4toannexb
o que não funciona, pois o fluxo de entrada já é o Anexo B.
Responder1
O fluxo de entrada os contém ou eles simplesmente não eram necessários?
Se você estiver recebendo o stream via RTSP, provavelmente estará recebendo um stream RTP que não contém esses pacotes. Seu cliente teria se conectado via RTCP para obter o SDP descrevendo esses fluxos, porque PPS e SPS geralmente ocorrem uma vez por fluxo, a menos que você esteja alterando resoluções, taxas de quadros, etc.
Execute o comando que você está executando, mas na saída do ffmpeg você verá uma seção como esta:
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 239.100.200.100
t=0 0
a=tool:libavformat 56.40.101
m=video 10000 RTP/AVP 96
b=AS:3027
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAM6xyBEB4AiflwEQAAAMABAAAAwDAPGDGEYA=,aOhDssiw; profile-level-id=640033
Tudo após a linha SDP precisa ser salvo em um nome de arquivo.sdp. Para se conectar ao stream, alguém precisaria apenas abrir o arquivo:
ffplay -i filename.sdp
Se você colocar o arquivo em um servidor, eles poderão abrir o endereço:
ffplay -i http://yourhost/filename.sdp