<div dir="ltr">Hi Vinod, Nicolas,<div>Do you have an example pipeline that you can share? </div><div>I tried setting the sprop-parameter-sets in the h264parse caps information, but the pipeline failed with byte-stream not accepted</div><div>Here is an example pipeline</div><div><br></div><div><font color="#660000">GST_DEBUG=3 /opt_gst120/bin/gst-launch-1.0  filesrc location=not_working.ts ! tsdemux ! rtph264pay ! 'application/x-rtp,encoding-name=H264,sprop-parameter-sets=(string)"Z2QAMq0AxSAKAC1puAgIDSgAbd0ADN/mAHiRFQ==,aO48sA=="' ! fakesink<br>Setting pipeline to PAUSED ...<br>0:00:00.020035191  5621 0x5596029ba4f0 WARN                 basesrc gstbasesrc.c:3688:gst_base_src_start_complete:<filesrc0> pad not activated yet<br>Pipeline is PREROLLING ...<br>0:00:00.020646281  5621 0x5596027cab60 WARN                GST_CAPS gstpad.c:3235:gst_pad_query_accept_caps_default:<rtph264pay0:sink> caps: video/x-h264, stream-format=(string)byte-stream were not compatible with: video/x-h264, stream-format=(string)byte-stream, profile=(string)constrained-baseline, alignment=(string){ nal, au }; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }<br>0:00:00.020659449  5621 0x5596027cab60 WARN                GST_CAPS gstpad.c:5757:pre_eventfunc_check:<rtph264pay0:sink> caps video/x-h264, stream-format=(string)byte-stream not accepted<br>0:00:00.020678024  5621 0x5596027cab60 WARN                GST_CAPS gstpad.c:3235:gst_pad_query_accept_caps_default:<rtph264pay0:sink> caps: video/x-h264, stream-format=(string)byte-stream were not compatible with: video/x-h264, stream-format=(string)byte-stream, profile=(string)constrained-baseline, alignment=(string){ nal, au }; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }<br>0:00:00.020683790  5621 0x5596027cab60 WARN                GST_CAPS gstpad.c:5757:pre_eventfunc_check:<rtph264pay0:sink> caps video/x-h264, stream-format=(string)byte-stream not accepted<br>0:00:00.020697187  5621 0x5596027cab60 WARN                GST_CAPS gstpad.c:3235:gst_pad_query_accept_caps_default:<rtph264pay0:sink> caps: video/x-h264, stream-format=(string)byte-stream were not compatible with: video/x-h264, stream-format=(string)byte-stream, profile=(string)constrained-baseline, alignment=(string){ nal, au }; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }<br>0:00:00.020702788  5621 0x5596027cab60 WARN                GST_CAPS gstpad.c:5757:pre_eventfunc_check:<rtph264pay0:sink> caps video/x-h264, stream-format=(string)byte-stream not accepted<br>0:00:00.020723520  5621 0x5596027cab60 WARN              mpegtsbase mpegtsbase.c:1764:mpegts_base_loop:<tsdemux0> error: Internal data stream error.<br>0:00:00.020728593  5621 0x5596027cab60 WARN              mpegtsbase mpegtsbase.c:1764:mpegts_base_loop:<tsdemux0> error: streaming stopped, reason not-negotiated (-4)<br>ERROR: from element /GstPipeline:pipeline0/GstTSDemux:tsdemux0: Internal data stream error.</font><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 9, 2023 at 11:28 AM vinod kesti <<a href="mailto:vinodkesti@yahoo.com">vinodkesti@yahoo.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px"><div><div dir="ltr">Hi Guru.</div><div dir="ltr"><br></div><div dir="ltr">The data used may not be in NAL format. Simply appending SPS and PPS may not help</div><div dir="ltr">Once you pack SPS and PPS as NAL then pass that buffer to the mpegts muxer. or h264parse can do it for you if you set sprop parameter in the rtph264parse.</div><div><br></div><div><div><br></div><div><br></div><div>Sent from Yahoo Mail. <a href="https://yho.com/148vdq" rel="nofollow" target="_blank">Get the app</a></div></div></div>
        <div><br></div><div><br></div>
        
        </div><div id="m_-2083520840656013968yahoo_quoted_4586456111">
            <div style="font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;color:rgb(38,40,42)">
                
                <div>
                    On Wednesday, 3 May, 2023 at 08:43:09 pm GMT-5, Nicolas Dufresne via gstreamer-devel <<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a>> wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div><div id="m_-2083520840656013968yiv2981505957"><div><div><div><br clear="none"><br clear="none"><div><div dir="ltr">Le mer. 3 mai 2023, 21 h 15, Guru Govindan <<a rel="nofollow noopener noreferrer" shape="rect" href="mailto:gurunathan.govindan@gmail.com" target="_blank">gurunathan.govindan@gmail.com</a>> a écrit :<br clear="none"></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Nicolas,<div>Thanks for your response, I figured out a way to extract the h264 header by making another connection to the camera and extracting data from the first stream. I used help from here <a rel="nofollow noopener noreferrer" shape="rect" href="https://stackoverflow.com/questions/24884827/possible-locations-for-sequence-picture-parameter-sets-for-h-264-stream/24890903#24890903" target="_blank">https://stackoverflow.com/questions/24884827/possible-locations-for-sequence-picture-parameter-sets-for-h-264-stream/24890903#24890903</a></div><div><br clear="none"></div><div>I also verified that the extracted header is valid by running `ffmpeg -i header1.h264 -an -c:v copy -bsf:v trace_headers -f null` and verified that it is a valid h264 file and contains SPS and PPS values.</div><div><br clear="none"></div><div>However when I cat the recovered header and copy the truncated file, it says it is not a valid file.</div><div><br clear="none"></div><div>Any ideas? Should it be inserted before every keyframe and not just in front of the file?</div></div></blockquote></div></div><div><br clear="none"></div><div><br clear="none"></div><div>You only need it once, unless you had dynamic resolution change (which never happen with security cam). My guess would be the stream format (avec vs byte-stream), you want byte stream for mpeg ts.</div><div id="m_-2083520840656013968yiv2981505957yqtfd50705"><div><br clear="none"></div><div><div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br clear="none"></div></div><br clear="none"><div><div dir="ltr">On Wed, May 3, 2023 at 12:47 PM Nicolas Dufresne <<a rel="nofollow noopener noreferrer" shape="rect" href="mailto:nicolas@ndufresne.ca" target="_blank">nicolas@ndufresne.ca</a>> wrote:<br clear="none"></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><div>Le mercredi 03 mai 2023 à 10:22 -0700, Guru Govindan via gstreamer-devel a écrit :</div><blockquote type="cite" style="margin:0px 0px 0px 0.8ex;border-left:2px solid rgb(114,159,207);padding-left:1ex"><div dir="ltr">Hi There,<br clear="none"><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 clear="none"></div><div>I am unable to play or transcode these ts files as it does not have SPS/PPS values. </div><div><br clear="none"></div><div>I tried the following by sending the h264parse the stream format but that failed</div></div></blockquote><div><br clear="none"></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 clear="none"><br clear="none">gst-launch-1.0 \<br clear="none">  filesrc location=truncated.ts ! tsdemux ! filesink location=truncated.h264<br clear="none">cat recovered-header.h264 > fixed.h264<br clear="none">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 clear="none"></div><div>This is video only though, totally untested.<br clear="none"></div><div><br clear="none"></div><div>Nicolas</div><div><br clear="none"></div><blockquote type="cite" style="margin:0px 0px 0px 0.8ex;border-left:2px solid rgb(114,159,207);padding-left:1ex"><div dir="ltr"><div><br clear="none"></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 clear="none"></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 clear="none"></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 clear="none"></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 clear="none"></div><div>```</div><div>failed with h264parse0: No valid frames found before end of stream</div><div><br clear="none"></div><div>Since it could not find EOS.. I thoiught of sending the entire manifest.. but that didnt work as well</div><div><br clear="none"></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 clear="none"></div><div>```</div><div><br clear="none"></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 clear="none"></div><div>Best Regards,</div><div>Guru</div><div><br clear="none"></div></div></blockquote><div><br clear="none"></div><div><span></span></div></div>
</div></blockquote></div>
</blockquote></div></div></div></div><div id="m_-2083520840656013968yiv2981505957yqtfd50508">
</div></div></div></div>
            </div>
        </div></div></blockquote></div>