Loop a video with gst-rtsp-server
Tyler Compton
xaviosx at gmail.com
Mon Mar 30 01:40:26 UTC 2020
Hi list,
I've been trying to create an RTSP stream from a video file source and have
the video loop back to the start when it ends. This has ended up being
quite tricky and I suspect I'm missing something obvious. My pipeline looks
something like this:
filesrc location=video.mp4 ! parsebin ! rtph264pay name=pay0
My current solution is to subclass RTSPMedia and override the
do_handle_message method. I capture EOS messages and seek the pipeline back
to the start. However, this doesn't seem to have any effect. The stream
just ends like normal.
class MyRTSPMedia(GstRtspServer.RTSPMedia):
def do_handle_message(self, message):
print("Got message:", message.type)
if message.type == Gst.MessageType.EOS:
pipeline: Gst.Pipeline = self.get_property("element")
seek_result = pipeline.seek(
rate=1.0,
format=Gst.Format.TIME,
flags=Gst.SeekFlags.FLUSH,
start_type=Gst.SeekType.SET,
start=0,
stop_type=Gst.SeekType.NONE,
stop=-1)
if not seek_result:
logging.error(
f"Failed to seek stream back to start! Seek "
f"returned {seek_result}")
return True
return GstRtspServer.RTSPMedia.do_handle_message(self, message)
I provide this class to my RTSPMediaFactory with the set_media_gtype method.
I noticed that gst-rtsp-server reports the video length to the client, so
the client expects the stream to only last for as long as the original
video. I would like the client to treat the source as a live, unending
stream. Is it possible that this inaccurate runtime is the source of my
problem?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20200329/70e6365a/attachment.htm>
More information about the gstreamer-devel
mailing list