Recover H264 encoded ts segments that dont have PPS/SPS

Jeff Shanab jshanab at jfs-tech.com
Wed May 3 17:38:06 UTC 2023


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/c153d859/attachment.htm>


More information about the gstreamer-devel mailing list