在 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 网络的视频
[Windows,Qt5,QMediaPlayer,QMediaPlaylist]:当前视频源更改时的微小持续黑屏