<div dir="ltr">Hi, <div><br></div><div>I am trying to write an MP4 from a received H264 stream using libav. The first SPS and PPS NALS I receive I copy and set as the extradata for the codec. All the other SPS and PPS NALS I drop. </div><div><br></div><div>This method seems to work with streams coming from for instance Google Chrome which always seem to have NALS that use pic_parameter_set_id = 0, but it does not work with streams where the pic_parameter_set_id is growing incrementally (the encoder sends new SPS and PPS packets which I ignore at the moment). When I play the resulting MP4 in ffplay it play the first IDR and the following P frames but it will stop and complain for all other frames, like the example below: </div><div><br></div><div><div>[h264 @ 0x7fe831814600] non-existing PPS 5 referenced</div><div>[h264 @ 0x7fe831814600] decode_slice_header error</div><div>[h264 @ 0x7fe831814600] no frame!</div></div><div><br></div><div>for all frames that has pic_parameter_set_id larger than 0. </div><div><br></div><div>I am relatively new to MP4 and H264 but I guess this is because I simply do not have the referenced PPS/SPS info in the extradata (only the first one at index 0). </div><div><br></div><div>So my question is - how would you get around this problem? Is it possible to make libav rewrite the pic_parameter_set_id for each frame that I send it, so that all frames reference the first SPS/PPS (because it only seems like new copies of the initial SPS/PPS but with new ids)? Or does anyone have code that does this currently outside of libav? Because I should not have to gather all SPS/PPS packets and store them in the extradata, or should I? Or, yet another or, am I totally clueless as to what I am talking about and is the problem something else? </div><div><br></div><div>Kindest regards,</div><div>Stefan</div><div><br></div></div>