Gstreamer returns opening in block mode

I am trying to read the drone RTSP stream through Video capture GStreamer appsink and adding the overlay text to the frame. I am pushing the processed frame to the rtmp endpoint using Video writer.

To decode the RTSP src, I am using h264parse and nvv4l2decoder. Attaching the sample code for the reference

#!/usr/bin/env python
import cv2
import gi
import numpy as np
from datetime import datetime
import json
import time
import hashlib

gi.require_version('Gst', '1.0')
from gi.repository import Gst

class Video():
    def __init__(self, port=5600):
        self.port = port
        self._frame = None
        self.video_source = 'rtspsrc location=rtsp://'
        self.video_codec = '! application/x-rtp, payload=96 ! rtph264depay ! h264parse '
        self.video_decode = \
            '! nvv4l2decoder ! nvvidconv ! video/x-raw, format=BGRx ! videoconvert ! video/x-raw,format=BGR'
        self.video_sink_conf = \
            '! appsink emit-signals=true sync=false max-buffers=1 drop=true'
        self.video_pipe = None
        self.video_sink = None
    def start_gst(self, config=None):
        if not config:
            config = \
                    'videotestsrc ! decodebin',
                    '! videoconvert ! video/x-raw,format=(string)BGR ! videoconvert',
                    '! appsink'
        command = ' '.join(config)
        print (command)
        self.video_pipe = Gst.parse_launch(command)
        self.video_sink = self.video_pipe.get_by_name('appsink0')
    def gst_to_opencv(sample):
        buf = sample.get_buffer()
        caps = sample.get_caps()
        array = np.ndarray(
            buffer=buf.extract_dup(0, buf.get_size()), dtype=np.uint8)
        return array
    def frame(self):
        """ Get Frame
            iterable: bool and image frame, output
        return self._frame
    def frame_available(self):
        """Check if frame is available
            bool: true if frame is available
        return type(self._frame) != type(None)
    def run(self):
        """ Get frame to update _frame
        self.video_sink.connect('new-sample', self.callback)
    def callback(self, sink):
        sample = sink.emit('pull-sample')
        new_frame = self.gst_to_opencv(sample)
        print (hashlib.md5(new_frame).hexdigest())
        self._frame = new_frame
        #print (hashlib.md5(self._frame).hexdigest()+"------"+hashlib.md5(new_frame).hexdigest())
        return Gst.FlowReturn.OK

if __name__ == '__main__':
    # Create the video object
    # Add port= if is necessary to use a different one
    scale = 1
    font = cv2.FONT_HERSHEY_PLAIN
    xMargin = 10
    yMarginBottom = 10
    yMarginTop = 20
    updatedTime =
    video = Video()
    out_send = cv2.VideoWriter("appsrc ! video/x-raw, format=BGR ! videoconvert !  nvvidconv ! nvv4l2h264enc ! video/x-h264, stream-format=byte-stream ! h264parse !  flvmux ! rtmpsink location=rtmp://*.*.*.*:1935/live", cv2.CAP_GSTREAMER, 0, 13.0, (1280,720))
    while True:
        # Wait for the next frame
        if not video.frame_available():
            #print ()
        frame = video.frame()
        cv2.putText(frame, updatedTime, (vechileBatAndSatAlignX, vechileBatAndSatAlignY), font, scale, (255,255,255), 1, cv2.LINE_4)

#        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):

While flying the drone the code randomly fails and returns below error.

The error occurs randomly, CPU load was stable during that time. Also, there is no network interruption. If I restart the code, everything works and it breaks on random time.

There is no update from you for a period, assuming this is not an issue any more.
Hence we are closing this topic. If need further support, please open a new one.

Is the stream containing 10bit HDR video data?