gpt4 book ai didi

OpenCV MPEG 视频流

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:41 29 4
gpt4 key购买 nike

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

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

为了获得更小的编码结果和更好的视频质量,我尝试使用 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())

最佳答案

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

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

关于OpenCV MPEG 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36490103/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com