
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_header
parámetro para habilitar y deshabilitar el encabezado global y intenté agregarlo, -bsf h264_mp4toannexb
lo 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