我使用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中的色彩空间转换...你觉得呢?谢谢!
发布于 2019-08-28 01:26:43
使用640x480的分辨率,我可以看到一些改进,但它仍然远远不能被接受……(我把图片的链接放在这里:https://drive.google.com/open?id=1YBNEKOcC9fK6hS5RatvkO9pjKhcbh6Eu)
但不管怎样,我发现对于1280x720的分辨率来说,它是相当不错的!虽然,我的相机支持其他分辨率(如800x600或640x480),但没有像预期的那样工作…
谢谢大家!
发布于 2019-08-28 01:01:29
检查您的摄像头支持的视频分辨率。
示例VGA : 640 x 480
在您的gstreamer管道中使用相同的分辨率。(除非您正在进行一些重新缩放)
https://stackoverflow.com/questions/57678111
复制相似问题