diff --git a/adapters/gst/sources/rtsp.sh b/adapters/gst/sources/rtsp.sh index 9717911e5..2de20e89e 100755 --- a/adapters/gst/sources/rtsp.sh +++ b/adapters/gst/sources/rtsp.sh @@ -32,6 +32,7 @@ trap handler SIGINT SIGTERM gst-launch-1.0 --eos-on-shutdown \ rtspsrc protocols=tcp location="${RTSP_URI}" ! \ parsebin ! \ + 'video/x-h264,stream-format=byte-stream,alignment=au;video/x-h265,stream-format=byte-stream,alignment=au' ! \ fps_meter "${FPS_PERIOD}" output="${FPS_OUTPUT}" ! \ video_to_avro_serializer source-id="${SOURCE_ID}" ! \ zeromq_sink socket="${ZMQ_ENDPOINT}" socket-type="${ZMQ_SOCKET_TYPE}" bind="${ZMQ_SOCKET_BIND}" sync="${SYNC_OUTPUT}" source-id="${SOURCE_ID}" \ diff --git a/savant/gst_plugins/python/avro_video_demux.py b/savant/gst_plugins/python/avro_video_demux.py index 6577763b8..14bc126a5 100644 --- a/savant/gst_plugins/python/avro_video_demux.py +++ b/savant/gst_plugins/python/avro_video_demux.py @@ -270,6 +270,14 @@ def handle_video_frame(self, message: Dict, buffer: Gst.Buffer) -> Gst.FlowRetur source_id, ) return Gst.FlowReturn.OK + if not message['keyframe']: + self.logger.warning( + 'Frame %s from source %s is not a keyframe, skipping it. ' + 'Stream should start with a keyframe.', + frame_pts, + source_id, + ) + return Gst.FlowReturn.OK source_info = SourceInfo(source_id, frame_params) self.sources[source_id] = source_info source_info.timestamp = time.time()