<html><head><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style></head><body><div>Le mercredi 03 mai 2023 à 10:22 -0700, Guru Govindan via gstreamer-devel a écrit :</div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr">Hi There,<br><div>I am having an issue where a lot of video footage from a security camera was recorded without the sprop-parameters-set (SPS/PPS).</div><div><br></div><div>I am unable to play or transcode these ts files as it does not have SPS/PPS values. </div><div><br></div><div>I tried the following by sending the h264parse the stream format but that failed</div></div></blockquote><div><br></div><div>The only way to recover is to find the origin SPS/PPS, note, this is static on most cameras. The sprop-parameters contains it, just it may need to be transformed. Then something like this may work, but never tried`<br><br>gst-launch-1.0 \<br>  filesrc location=truncated.ts ! tsdemux ! filesink location=truncated.h264<br>cat recovered-header.h264 > fixed.h264<br>cat truncated.h264 >> fixed.h264</div><div><div>gst-launch-1.0 \</div></div><div>  filesrc location=fixed.h264 ! h264parse ! mpegtsmux ! filesink location=fixed.ts</div><div><br></div><div>This is video only though, totally untested.<br></div><div><br></div><div>Nicolas</div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>```</div><div>gst-launch-1.0 -v filesrc location=2.ts ! tsparse ! tsdemux name=demux demux. ! queue ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! decodebin ! videoconvert ! vaapih264enc ! h264parse ! mpegtsmux alignment=-1 ! filesink location=output.ts<br></div><div>```</div><div>failed with /</div><div>GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream</div>ERROR: from element /GstPipeline:pipeline0/GstH264Parse:h264parse0: No valid frames found before end of stream<div><br></div><div>I then tried to split it as per keyframes and then mux it.. like below but that failed as well</div><div><br></div><div>```</div><div>gst-launch-1.0 -v filesrc location=2.ts ! tsdemux name=demux ! h264parse ! splitmuxsink max-size-time=1000000000 location=segment%02d.ts mpegtsmux name=mux ! filesink location=output.ts demux.video_0 ! queue ! mux.<br></div><div>```</div><div>failed with h264parse0: No valid frames found before end of stream</div><div><br></div><div>Since it could not find EOS.. I thoiught of sending the entire manifest.. but that didnt work as well</div><div><br></div><div>```</div><div>gst-launch-1.0 -v filesrc location="<manifest uri>" ! hlsdemux ! h264parse ! video/x-h264,stream-format='(string)avc,alignment=(string)au' ! mpegtsmux ! h264parse config-interval=-1 ! mpegtsmux ! filesink location=output.ts<br></div><div>```</div><div><br></div><div>Just like how we can add config-interval to a rtp stream, is there a way to add it to a ts segment?</div><div><br></div><div>Best Regards,</div><div>Guru</div><div><br></div></div></blockquote><div><br></div><div><span></span></div></body></html>