Cómo hacer que ffmpeg transmita h264 con PPS y SPS en la transmisión RTP

Cómo hacer que ffmpeg transmita h264 con PPS y SPS en la transmisión RTP

Estoy intentando usar ffmpeg para recibir una transmisión h264 a través de RTSP y reenviarla como una transmisión rtp de transmisión múltiple. Puedo recibir la transmisión y generarla como una transmisión rtp de multidifusión usando el siguiente comando: ffmpeg -i rtsp://10.255.11.203/ProfileToken_1_1 -vcodec copy -an -f rtp rtp://230.255.10.25:50000

El flujo entrante contiene paquetes SPS, PPS y SEI. No puedo hacer que ffmpeg los genere también.

Experimenté con el -flags global_headerparámetro para habilitar y deshabilitar el encabezado global y intenté agregarlo, -bsf h264_mp4toannexblo que no funciona ya que la transmisión entrante ya es el Anexo-B.

Respuesta1

¿Los contiene el flujo entrante o simplemente no eran necesarios?

Si recibe la transmisión a través de RTSP, probablemente esté recibiendo una transmisión RTP que no tiene esos paquetes. Su cliente se habría conectado a través de RTCP para obtener el SDP que describe esas transmisiones, porque PPS y SPS generalmente son una vez por transmisión a menos que esté cambiando resoluciones, velocidades de fotogramas, etc.

Ejecute el comando que ha estado ejecutando, pero en la salida de ffmpeg verá una sección 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

Todo lo que sigue a la línea SDP debe guardarse en un nombre de archivo.sdp. Para conectarse a la transmisión, alguien simplemente tendría que abrir el archivo:

ffplay -i filename.sdp

Si pones el archivo en un servidor, podrían abrir la dirección:

ffplay -i http://yourhost/filename.sdp

información relacionada