0

我在 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(当我输入 un 废话代理主机名时,我的 HTTP 请求不再有效,但 QMediaPlayer 仍然有效......)。

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

提前感谢您的帮助!

4

1 回答 1

0

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

有一个简短的片段:

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();

希望这对您有所帮助。

于 2017-01-19T12:43:48.167 回答