【问题标题】:How to make a proxy working with QMediaPlayer in Qt5?如何使代理在 Qt5 中与 QMediaPlayer 一起工作?
【发布时间】:2016-02-10 17:37:00
【问题描述】:

我的 Qt 项目有点问题。我正在尝试像这样直接使用 QMediaPlayer 播放网络广播:

QMediaPlayer player;
player.setMedia(QUrl("http://listen.42fm.ru:8000/stealkill"));
player.play();

它可以工作,但我的另一个限制是设置 SSH 隧道(端口 8000 在部署网络上被阻止)。所以我在我的设备上设置了端口转发,并像这样配置了 Qt 代理:

QNetworkProxy proxy;
proxy.setType(QNetworkProxy::Socks5Proxy);
proxy.setHostName("localhost");
proxy.setPort(1234);
QNetworkProxy::setApplicationProxy(proxy);

该代理适用于我的应用程序执行的每个 HTTP 请求,但它似乎不适用于 QMediaPlayer(当我输入一个废话代理主机名时,我的 HTTP 请求不再有效,但 QMediaPlayer 仍然有效......)。

关于使用 QMediaPlayer 正确设置的任何想法?

提前感谢您的帮助!

【问题讨论】:

    标签: c++ http proxy qt5 qmediaplayer


    【解决方案1】:

    您可以尝试使用 QNetworkAccessManager 机制通过代理创建请求,并将 QNetworkReply 设置为第二个参数 QMediaPlayer::setMedia(const QMediaContent & media, QIODevice * stream = Q_NULLPTR)。查看更多信息here

    有一个简短的sn-p:

    QNetworkAccessManager * manager = new QNetworkAccessManager(this);
    
    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::Socks5Proxy);
    proxy.setHostName("localhost");
    proxy.setPort(1234);
    
    manager -> setProxy(proxy);
    
    QNetworkReply * reply = manager -> get(
      QNetworkRequest(
        QUrl("http://listen.42fm.ru:8000/stealkill")
      )
    );
    
    QMediaPlayer * player = new QMediaPlayer();
    player -> setMedia(QMediaContent(), reply);
    player.play();
    

    希望这对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 2015-02-27
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多