簡體   English   中英

Stream h264 視頻與 opencv+gstreamer 工件

[英]Stream h264 video with opencv+gstreamer artifacts

幾個星期以來,我一直在嘗試使用 opencv 和 gstreamer 通過網絡 stream h264 視頻,但我經常遇到問題。 我編寫了一個簡單的服務器,它從 web 相機或文件中捕獲幀並通過網絡發送。 以及拍攝視頻的客戶。

服務器.py

import cv2

PIPELINE = 'appsrc ! videoconvert ! x264enc tune=zerolatency speed-preset=fast ! rtph264pay ! udpsink host=192.168.0.171 port=5004'
cap_send = cv2.VideoCapture(0)
frame_size = (1280, 720)
out_send = cv2.VideoWriter(PIPELINE, cv2.CAP_GSTREAMER, 0, 16, frame_size, True)    

while True:
    ret, frame = cap_send.read()
    frame = cv2.resize(frame, frame_size)
    out_send.write(frame)
    cv2.imshow('send', frame)
    if cv2.waitKey(1) == 27:
        break

客戶端.py

import cv2

PIPELINE = 'udpsrc port=5004 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! decodebin ! videoconvert ! appsink'
cap_receive = cv2.VideoCapture(PIPELINE, cv2.CAP_GSTREAMER)

while True:
    ret, frame = cap_receive.read()
    cv2.imshow('receive', frame)
    if cv2.waitKey(1) == 27:
        break


結果,我得到了一個帶有偽影的錯誤視頻。 實施1、2

同樣在控制台中我得到一個錯誤: cv::GStreamerCapture::open OpenCV | GStreamer warning: Cannot query video position: status=1, value=3, duration=-1 cv::GStreamerCapture::open OpenCV | GStreamer warning: Cannot query video position: status=1, value=3, duration=-1

問題是什么? 我應該指出一些額外的參數嗎? 還是我的安裝錯誤? 我嘗試設置各種參數 synk、比特率、速度預設等,但總是得到殘缺的視頻。

我還注意到,如果您先嘗試 Client.py,然后再嘗試 Server.py,我會得到一個正常的視頻,一段時間后它也會變得失真

這里有很多東西..

  1. UDP容易丟包。 因此,如果連接丟失或您阻塞接收線程太久,您將丟失數據。 數據不完整意味着圖片損壞。

  2. 隨機訪問。 如果在 stream 已經運行時收到 stream,則您錯過了正確解碼 stream 的數據。 這只會在您收到同步點(I-Frame)后恢復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM