Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV MPEG视频流_Opencv_Video Streaming - Fatal编程技术网

OpenCV MPEG视频流

OpenCV MPEG视频流,opencv,video-streaming,Opencv,Video Streaming,我正在开发用于网络吞吐量测试的点对点视频流。 两个对等网络之间的网络支持低比特率传输 我使用OpenCV为视频流制作了简单的python程序。 该程序从网络摄像头抓取视频帧并将其编码为JPEG,然后将字节流发送给对等方。它工作得很好。但有一个问题与我的目的背道而驰。 一个编码帧的大小约为5千字节,即使它以较低的JPEG质量编码 为了获得更小的编码结果和更好的视频质量,我尝试使用MPEG编解码器(如H264或H263)进行编码。很快我发现自己陷入了困境。 互联网上没有这样的例子。 如何更改以下代码

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

我使用OpenCV为视频流制作了简单的python程序。
该程序从网络摄像头抓取视频帧并将其编码为JPEG,然后将字节流发送给对等方。它工作得很好。但有一个问题与我的目的背道而驰。 一个编码帧的大小约为5千字节,即使它以较低的JPEG质量编码

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


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


你的分辨率是多少?通常情况下,jpeg是您可以获得的最高压缩。(每帧5千字节非常小)分辨率为320x240。上述代码中的大小是len(jpeg.tobytes()),您使用的是灰度还是彩色?你也考虑过二值图像吗?(然后发送二进制图像?)。但我担心,它似乎引用的二进制图像是未压缩的。它可能是巨大的。在这个例子中,是的,他们没有压缩它。然而,与灰度相比,jpeg格式应该能够进一步压缩二值图像。从你告诉我的情况来看,你已经做了大约20倍的压缩(非常高)。您可以尝试的另一件事是将图像的大小调整为160x120(应该可以降低到1.6-1.8 kbs左右)
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())
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