c++ - 限制通过c++中的套接字传输的数据

标签 c++ sockets compression video-streaming bandwidth

我正在开发 USB 重定向软件,它通过在客户端计算机上添加虚拟 USB 设备来重定向网络上的 USB 设备。一切正常,但客户提示说,当他连接分辨率为 640X480 的网络摄像头时,100 Mbps 网络阻塞。我已经在 1 Gbps 适配器上测试了网络摄像头,它使用了大约 16% (160 Mbps) 的带宽。网络摄像头应该占用这么多带宽吗?无论如何,他希望网络使用率低于 50 Mbps。

我曾尝试压缩从 DeviceIoControl 获取的数据,然后在将其传递给 DeviceIoControl 之前在客户端对其进行解压缩。文件传输工作正常,但视频停止工作,带宽下降到 50 Mbps 左右。我尝试在发送数据之前添加短暂的延迟,但这也会导致黑屏。现在我正在考虑以某种方式强行将相机分辨率降低到 320X240。我不确定是否有任何其他方法可以减少 DeviceIoControl 抛出的数据。

如果您能分享您的想法并引导我朝着正确的方向前进,我将不胜感激。提前致谢。

编辑:

它是一个 YUV2 格式的网络摄像头。

是否有任何开源库可用于降低 Windows 平台上网络摄像头的帧率或分辨率?

最佳答案

如果数据未压缩:640 px/line × 480 lines/frame × 30 frames/sec × 24 bit/px ≈ 211 Mbps

您可以查看网络摄像头的文档,看它是否支持某种压缩或帧率控制。

关于c++ - 限制通过c++中的套接字传输的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566275/

相关文章:

c++ - 在删除文件之前检查文件是否仍在被另一个进程使用(c、c++、linux)

c++ - Clang 无法识别 <algorithm> 中的 std::all_of

C++ 服务器连接问题

java - 网络连接断开时如何使Java Client Socket保持 Activity 状态?

video - 如何估计特定分辨率下视频的文件大小?

python - 逐行读取 80GB .gz 文件的内容而不解压缩

linux - 如何在 Ubuntu 中检查 .tar(不是 tar.gz)文件是否损坏?

c++ - QList::at() 返回对常量的引用?

c++ - 什么是 HID_REPORT_DESCRIPTOR?

c++ - 使用 socketpair : hangs reading output from child process 进行双向通信