Como fazer stream ffmpeg h264 com PPS e SPS no stream RTP

Como fazer stream ffmpeg h264 com PPS e SPS no stream RTP

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_headerparâmetro para ativar e desativar o cabeçalho global e tentei adicionar -bsf h264_mp4toannexbo 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

informação relacionada