使用python opencv从网络摄像头读取编码的帧

问题描述 投票:0回答:1

此刻,我显示VideoImageTrack类,下面显示了波纹管(改编自here),该类返回av VideoFrame。我显示的脚本效果很好。我的问题是帧编码步骤:

VideoFrame.from_ndarray(image, format="bgr24")

非常慢。

是否有gstreamer管道输出已编码的帧并且可以用python-opencv read()迭代?

class VideoImageTrack(VideoStreamTrack):
    """
    A video stream track that returns a rotating image.
    """

    def __init__(self):
        super().__init__()  # don't forget this!

        self.video = cv2.VideoCapture("v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=15/1,bitrate=250000  ! appsink")


    async def recv(self):
        pts, time_base = await self.next_timestamp()

        retval, image = self.video.read()
        frame = VideoFrame.from_ndarray(image, format="bgr24")
        frame.pts = pts
        frame.time_base = time_base

        return frame
opencv gstreamer video-capture python-gstreamer
1个回答
0
投票

尽管我不知道处理是否会更快,但是您可以尝试使用GStreamer的videoconvert,即transcodes多种格式之间的视频帧。

示例管道:

v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=BGR,width=640,height=480,framerate=15/1 ! appsink
© www.soinside.com 2019 - 2024. All rights reserved.