我一直在玩 QMediaplayer 库。我很好奇它如何与一些流式视频源一起工作,所以我使用 VLC 使用 udp 协议来流式传输一些视频。
为了进行快速测试,我使用了名为MediaPlayer example的 Qt 示例。由于该示例仅适用于脱机文件,因此我在 Player 实现中添加了哑功能。
void setM(QUrl url){player->setMedia(url);player->play();}
然后,在main.cpp文件中,我这样调用这个函数:
...
player.setM(QUrl("udp://239.1.1.1:1234"));
return app.exec();
这样做是在读取程序后开始再现流源。
这里的问题是Qt通过我出现以下错误:
DirectShowPlayerService::doSetUrlSource: Unresolved error code 800c000d
要使用本地文件和http 流来执行此操作,它可以工作......但是当我尝试使用 UDP 或 RTP 时,我总是会遇到同样的错误。
我花了几个小时寻找更多信息,但总是得到相同的响应......使用 QMLVLC......例如,看看这个。
以前有人试过吗?这里有什么问题?
PD:我知道有一个 VLC 插件可以完成这项工作,但我想让这项工作只与 Qt 一起工作(或者至少,了解这里发生了什么)。
PD2:我使用的是 Windows 8.1、Qt 5.5 (mingw 4.9.2),并且我安装了所有重要的编解码器。
提前致谢,
更新
最后,我设法处理了新的http://code.qt.io,这是我怀疑阻止 udp(和其他)协议的代码 -> here。也许,只有“http”和“https”被接受为 Directshowsservice 上的有效流源......我将尝试在本周获得一些额外的时间来重新编译 windows 的多媒体模块,以便将 udp 协议添加到函数 doSetUrlSource看看会发生什么。如果有人先测试它,请在这里告诉我!
更新 2
首先,我怀疑 QMediaPlayer 无法重现 UDP/RTP 内容,因为 AddFilter 方法...无论如何,http、https 和 rtsp 都可以完美运行。
其次,我在 udp 协议上发现了一些奇怪的行为。我使用“udp://@239.1.1.1:1234”作为测试多播方向。奇怪的是,在一次测试中,我错误地输入了这个方向“udp://@239.1.1.1:1234z”,而这次没有出现错误。方向似乎需要包含一个字母。