OpenCV MPEG视频流

时间:2016-04-08 01:41:50

标签: opencv video-streaming

我正在开发用于网络吞吐量测试的点对点视频流。 两个对等体之间的网络支持低比特率传输。

我使用OpenCV为视频流制作了简单的python程序 该程序从Webcam抓取视频帧并将其编码为JPEG,然后将字节流发送给对等。它运作良好。但是我的目的存在问题。 即使编码具有较低的JPEG质量,一个编码帧的大小约为5千字节。

为了获得更小的编码结果和更好的视频质量,我尝试使用MPEG编解码器编码,如H264或H263。不久,我发现自己陷入了困境。 互联网上没有例子 如何更改以下代码?

import cv2 
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
success, image = cap.read()
quality = 20 # quality 0 to 100. default:95
ret, jpeg = cv2.imencode('.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), quality])
# send(jpeg.tobytes())

1 个答案:

答案 0 :(得分:1)

这是从网络摄像头实时编码视频帧的答案!!
我意识到使用OpenCV无法进行实时MPEG编码,但OpenCV可以将原始视频帧保存为MPEG文件。
我使用ffmpeg opensource实用程序解决了我的问题。 我让ffmpeg编码一个视频帧并用UDP包发送它。 我的应用程序收到UDP数据包并在测试网络上流式传输。数据的平均比特率为320x240 5 FPS,小于25kbps(每秒位数)。

ffmpeg -s 320x240 -f dshow -i video="USB HD Webcam" -r 5 -vcodec msmpeg4v2 -b:v 25k -an -f h263 udp://127.0.0.1:10000