VoIP:如何在 Qt 多媒体中从摄像头捕获实时音频/视频流字节?

Posted

技术标签:

【中文标题】VoIP:如何在 Qt 多媒体中从摄像头捕获实时音频/视频流字节?【英文标题】:VoIP: How to capture the live audio/video streaming bytes from Camera in Qt multimedia? 【发布时间】:2018-05-29 07:23:50 【问题描述】:

这里的目的是从相机捕获那些音频+视频字节,然后使用适当的 Qt 类进行优化(欢迎提出建议)并通过 TCP 将它们发送到服务器。服务器将这些字节发送回另一个客户端进行播放。这就是我们打算建立基本 VoIP(互联网协议语音/视频)的方式。

检查了许多 Qt API,但找不到任何提供现成实用程序的 API。一些 Qt 论坛建议我们应该使用 3rd 方库。其他 SO Qns,不要解决我的具体问题。

不想先在临时文件中捕获这些字节,然后再从那里读取,因为与获取内存字节相比效率不高。

问题

Qt 中是否有任何可用的 API 允许捕获实时流字节? 如果不是,那么 C++ 中有哪些用于跨平台的替代方案?

【问题讨论】:

1 - 不,2 - 离题,但仍然尝试 gstreamer @dtech,以我有限的知识,我了解到一些 Qt API 可以捕获文件中的视频字节或通过 QUrl 发送。他们没有简单的 API 来捕获字节,这难道不令人惊讶吗?我见过 GStreamer,但首先想到的是使用 Qt 的本机实用程序。 Qt中还有其他选择吗?也就是说,只要增加一点复杂性,我们就可以实现 VoIP。 Qt 在这方面非常有限,它可以播放视频,也可以将网络摄像头视频录制到磁盘上,仅此而已,甚至在所有平台上都不起作用。它不是模块化的,也不是可定制的。它甚至不能做像制作一系列图像的视频这样简单和基本的事情。 【参考方案1】:

创建于 Qt 文档中。看来你的情况。

QCamera 类为系统相机设备提供接口。 QCamera 可以与 QCameraViewfinder 一起用于取景器显示, QMediaRecorder 用于视频录制和 QCameraImageCapture 用于图像 服用。您可以使用 QCameraInfo 列出可用的相机并选择 使用哪一个。

【讨论】:

我们检查了 QCamera 和 QMediaRecorder 中的多个 API,但找不到如何获取音频 + 视频的字节流。 Qn 下的评论说,Qt 中没有这样的 API。 Qn 中提到的那些特定 API,您能提供帮助吗?如果您用这些有用的信息更新您的答案,那就太好了。 我只有一个快速的想法。将流写入特殊类型的文件。在 Unix 上可以是“管道”。在我不知道的窗户上。该特殊文件不应在磁盘上写入流,而是将该流传输到另一个应用程序或线程。 (管道的另一端)。

以上是关于VoIP:如何在 Qt 多媒体中从摄像头捕获实时音频/视频流字节?的主要内容,如果未能解决你的问题,请参考以下文章

QT6 C++ 中音频捕获原始数据的选项[关闭]

Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)

无法在 OpenCV 2.4.7 中从摄像头捕获视频

在 .Net Core 2.0 中从网络摄像头捕获图像

如何同时在不同的 QT 小部件上显示多个视频

如何使用 C# 流式传输网络摄像头视频? [关闭]