Recover H264 encoded ts segments that dont have PPS/SPS

Guru Govindan gurunathan.govindan at gmail.com
Wed May 3 19:00:49 UTC 2023


Hi Jeff,
Thanks for your response. I am also having the issue with Axis camera
streams where the ts segments were saved without it.
How are you getting the values from the SDP and how are you saving it to
the stream before sending it to decoder? Do you have a code snippet to
share?

Thanks

On Wed, May 3, 2023 at 10:38 AM Jeff Shanab via gstreamer-devel <
gstreamer-devel at lists.freedesktop.org> wrote:

> Not really a GStreamer answer, but the decoder's rules are you must see an
> sps and a pps before the first keyframe but there is no requirement that it
> has to be there before each and every keyframe. Old axis cameras used to
> have this selectable.
> In my code I get it from the SDP packet at the beginning and cache it and
> then replace it if it comes in the bitstream or if the value gets updated
> in the stream. Then I save it and send to decoder with the SPS and PPS
> injected before the keyframes.
>
>
> On Wed, May 3, 2023 at 1:22 PM Guru Govindan via gstreamer-devel <
> gstreamer-devel at lists.freedesktop.org> wrote:
>
>> Hi There,
>> I am having an issue where a lot of video footage from a security camera
>> was recorded without the sprop-parameters-set (SPS/PPS).
>>
>> I am unable to play or transcode these ts files as it does not have
>> SPS/PPS values.
>>
>> I tried the following by sending the h264parse the stream format but that
>> failed
>>
>> ```
>> 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
>> ```
>> failed with /
>> GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps =
>> video/x-h264, stream-format=(string)byte-stream
>> ERROR: from element /GstPipeline:pipeline0/GstH264Parse:h264parse0: No
>> valid frames found before end of stream
>>
>> I then tried to split it as per keyframes and then mux it.. like below
>> but that failed as well
>>
>> ```
>> 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.
>> ```
>> failed with h264parse0: No valid frames found before end of stream
>>
>> Since it could not find EOS.. I thoiught of sending the entire manifest..
>> but that didnt work as well
>>
>> ```
>> 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
>> ```
>>
>> Just like how we can add config-interval to a rtp stream, is there a way
>> to add it to a ts segment?
>>
>> Best Regards,
>> Guru
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20230503/73cc5d61/attachment.htm>


More information about the gstreamer-devel mailing list