在 Qt5 中使用 QMediaPlayer 播放流时使用代理? [复制]

Posted

技术标签:

【中文标题】在 Qt5 中使用 QMediaPlayer 播放流时使用代理? [复制]【英文标题】:using a proxy when playing a stream with QMediaPlayer in Qt5? [duplicate] 【发布时间】:2019-07-22 09:11:23 【问题描述】:

我想在代理服务器后面使用 QMediaPlayer 在 QT5 上播放 webradio 流。

我尝试使用以下解决方案:

How to make a proxy working with QMediaPlayer in Qt5?

但是 QNetworkReply 不是从 QIODevice 派生的,因此它不会编译。

我已阅读文档,搜索了很多但没有找到解决方案。

编辑:添加一个最小的可重现示例:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkProxy proxy;
manager->setProxy(proxy);

QNetworkReply *reply = manager -> get(QNetworkRequest( QUrl()));
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QMediaContent(), reply);

编译器说:

参数 2 从“QNetworkReply*”到未知的转换 ‘QIODevice*’

编辑:

在我发现的 QNetworkReply 的 QT 资源中:

class QNetworkReplyPrivate; 
class Q_NETWORK_EXPORT QNetworkReply: public QIODevice

但是为什么向上转换到 QIODevice 不起作用?如果我尝试进行强制转换,编译器会说:

错误:不能将“reply”(类型为“class QNetworkReply*”)动态转换为 type ‘class QIODevice*’ (source 是一个指向不完整类型的指针)

【问题讨论】:

QNetworkReply 确实继承自 QIODevice。 编译器说“没有已知的参数 2 从 'QNetworkReply*' 到 'QIODevice*' 的转换”并参考:void setMedia(const QMediaContent &media, QIODevice *stream = Q_NULLPTR); 对不起,作为评论看起来真的很糟糕。我已经编辑了我的问题,再见。 QNetworkReply:#include <QNetworkReply>是否加入了? 感谢 eyllanesc,这就是我的问题的解决方案! 【参考方案1】:

感谢您的帮助!

我“只”忘记了包含 QNetworkReply。有了这个,它对我有用

#include <QNetworkAccessManager>
#include <QNetworkProxy>
#include <QNetworkReply>

数小时的故障排除和解决方案是如此简单:)

【讨论】:

以上是关于在 Qt5 中使用 QMediaPlayer 播放流时使用代理? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

QMediaPlayer 在 Ubuntu 16.04 / Qt 5.6 上不播放任何内容

如何在 QMediaPlayer (Qt 5.7) 中播放来自 URL LAN 网络的视频

QMediaPlayer 中播放声音的内部扩展

[Windows,Qt5,QMediaPlayer,QMediaPlaylist]:当前视频源更改时的微小持续黑屏

哪些视频文件可以在 Android 上播放 QMediaPlayer?

无法使用 QMediaPlayer 播放某些视频