使用h264编码流式传输openCV帧

时间:2019-08-27 15:36:43

标签: python opencv gstreamer h.264

我使用OpenCV和GStreamer创建了一个python程序,以将帧流式传输到GStreamer udpsink。这是代码:

import cv2
import config

def send():

    cap = cv2.VideoCapture(0) #open the camera
    fourcc = cv2.VideoWriter_fourcc(*'H264')
    out = cv2.VideoWriter('appsrc ! videoconvert ! x264enc tune=zerolatency noise-reduction=10000 bitrate=2048 speed-preset=superfast ! rtph264pay config-interval=1 pt=96 ! udpsink host=127.0.0.1 port=5000',fourcc,config.CAP_PROP_FPS, (800,600),True) #ouput GStreamer pipeline

    if not out.isOpened():
        print('VideoWriter not opened')
        exit(0)

    while cap.isOpened():
        ret,frame = cap.read()

        if ret:


            # Write to pipeline
            out.write(frame)

            if cv2.waitKey(1)&0xFF == ord('q'):
                break

    cap_send.release()
    out_send.release()

send()

然后,在我的终端中,我的GStreamer接收器管道为:

gst-launch-1.0 -v udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! decodebin ! videoconvert ! autovideosink

问题是我收到的帧是这样的: https://drive.google.com/open?id=14PeiGlEfcSuzRjSPENrCjGQIQk-04OHb

我想这全都与openCV中的色彩空间转换有关……您怎么看? 谢谢!

2 个答案:

答案 0 :(得分:0)

检查相机支持的视频分辨率。

VGA示例:640 x 480

在gstreamer管道中使用相同的分辨率。 (除非您要进行一些缩放)

答案 1 :(得分:0)

在640x480的分辨率下,我可以看到一些改进,但仍远远不能令人满意... (我将图像的链接放在这里:https://drive.google.com/open?id=1YBNEKOcC9fK6hS5RatvkO9pjKhcbh6Eu

但是无论如何,我发现对于1280x720的分辨率来说,这是相当不错的!虽然,我的相机支持其他分辨率(例如800x600或640x480),但无法正常工作...

谢谢大家!