How to make ffmpeg stream h264 with PPS and SPS in the RTP stream

ffmpegvideo streaming

I'm trying to use ffmpeg to receive an h264 stream over RTSP and forward that stream as a muliticast rtp stream. I can receive the stream, and output it as a multicast rtp stream using the following command:
ffmpeg -i rtsp://10.255.11.203/ProfileToken_1_1 -vcodec copy -an -f rtp rtp://230.255.10.25:50000

The incoming stream contains SPS PPS and SEI packets. I can't make ffmpeg to output those as well.

I have experimented with the -flags global_header parameter to enable and disable global header, And I have tried adding -bsf h264_mp4toannexb which does not work since the incoming stream is already Annex-B.

Best Answer

Does the incoming stream contain them, or were they just not needed?

If you're receiving the stream via RTSP, you're probably receiving an RTP stream that doesn't have those packets. Your client would have connected via RTCP to get the SDP describing those streams, because PPS and SPS are usually once-per-stream unless you're changing resolutions, framerates, etc.

Run the command you've been running, but in the ffmpeg output you'll see a section like this:

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

Everything after the SDP line needs to be saved into a filename.sdp. To connect to the stream, someone would just need to open the file:

ffplay -i filename.sdp

If you put the file on a server, they could open the address:

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