python - 使用 h264 编码流式传输 openCV 帧

标签 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 中的色彩空间转换有关……您怎么看? 谢谢!

最佳答案

在 640x480 分辨率下,我可以看到一些改进,但仍远未被接受... (我把图片的链接放在这里:https://drive.google.com/open?id=1YBNEKOcC9fK6hS5RatvkO9pjKhcbh6Eu)

但无论如何,我发现对于 1280x720 的分辨率来说,已经很不错了!虽然,我的相机支持其他分辨率(如 800x600 或 640x480),但没有按预期工作...

谢谢大家!

关于python - 使用 h264 编码流式传输 openCV 帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678111/

相关文章:

python - SWIG 和 Python : Create a package compatible with any 3. x 版本

Python Django Dict 对象不可调用

OpenCV 输入数组/输出数组

python - 在 Windows 主机上使用 python (cv2.VideoCapture) 在 docker 容器中打开网络摄像头

OpenCV 找不到 Gstreamer

python - 根据 groupby 之后其他列中的值之间的数据帧范围对单独的列求和

python - 重新连接远程 Jupyter Notebook 并获取当前单元格输出

c++ - 编码域中的DCT系数和运动 vector 提取

android 内部套接字连接因守护进程服务失败

android - Android JNI 上的 Appsrc Gstreamer 接收视频数据缓冲区