0

我想创建如下图所示的管道;

https://i.stack.imgur.com/Nb17P.png

GSTREAMER_OUT = ' ! '.join([
        'appsrc',
        'queue',
        f'video/x-raw,format=BGR,width={frame_width},height={frame_height}',
        'videoconvert',
        'video/x-raw,format=YV12',
        'x264enc byte-stream=true',
        'video/x-h264,stream-format=avc,alignment=au,profile=baseline',
        ' '.join([
            'kvssink',
            f'stream-name={kvs_out_stream_name}',
            'storage-size=512',
            f'access-key={access_key}',
            f'secret-key={secret_key}',
            'aws-region=ap-northeast-1',
            # 'buffer-duration=60',
            f'framerate=1',
            # 'max-latency=10',
        ]),
    ])

cap = cv2.VideoCapture(in_stream_url)
out = cv2.VideoWriter(GSTREAMER_OUT, cv2.CAP_GSTREAMER, 0, target_fps, (frame_width, frame_height), True)

while True:
    ret, frame = cap.read()
    result = some_image_process(frame)
    out.write(result)

但是,管理控制台经常显示如下所示的断帧;

https://i.stack.imgur.com/oecrR.png

整个视频:https ://youtu.be/vBAgECHYJjU

我想知道如何修复这个 GStreamer 管道。我对 GStreamer 不是很熟悉,所以如果您详细介绍 GStreamer 管道,将不胜感激。

4

1 回答 1

0

我发现当我删除queue并添加选项以x264enc喜欢下面的命令时,此问题已修复;

GSTREAMER_OUT = ' ! '.join([
    'appsrc',
    'clockoverlay halignment=right valignment=top font-desc="Sans bold 60px"',
    'videoconvert',
    'video/x-raw,format=YV12',
    'x264enc byte-stream=true noise-reduction=10000 speed-preset=ultrafast tune=zerolatency ',
    'video/x-h264,stream-format=avc,alignment=au,profile=baseline',
    ' '.join([
        'kvssink',
        f'stream-name={kvs_out_stream_name}',
        'storage-size=512',
        f'access-key={access_key}',
        f'secret-key={secret_key}',
        'aws-region=ap-northeast-1',
        # 'buffer-duration=10',
        # 'connection-staleness=60',
        # "fragment-acks=true",
        "framerate=1",
        # "key-frame-fragmentation=false",
        # "max-latency=10"
    ]),
])

更长的示例代码:https ://gist.github.com/LittleWat/c93394bb4f6dc125d1c4a66f1a7aee9d

损坏的图像已修复,但存在延迟问题。

所以我会问另一个问题。 如何减少“AWS Kinesis Video Stream(kvs) -> gstreamer+opencv image processing -> kvs”过程中的 gstreamer 管道延迟?

于 2021-11-17T02:35:05.237 回答