如何在Qt5中使代理与QMediaPlayer一起使用? [英] How to make a proxy working with QMediaPlayer in Qt5?

查看:107
本文介绍了如何在Qt5中使代理与QMediaPlayer一起使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Qt上的项目有一个小问题.我正在尝试像这样直接通过QMediaPlayer播放网络广播:

I have a little problem with my project on Qt. I am trying to play a web-radio directly with QMediaPlayer like this :

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

它可以工作,但是我的另一个限制是设置SSH隧道(部署网络上的端口8000被阻止).因此,我在设备上设置了端口转发,并按如下方式配置了Qt代理:

It works but another constraint I have is to setup an SSH tunneling (port 8000 is blocked on the network of deployment). So i set up my port forwarding on my device and I configured Qt proxy like this:

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

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

The proxy works for every HTTP request my application do, but it seems not working with QMediaPlayer (when I enter un bullshit proxy host name, my HTTP requests don't work anymore but QMediaPlayer still works...).

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

Any idea about setting up this correctly with QMediaPlayer ?

在此先感谢您的帮助!

推荐答案

您可以尝试使用QNetworkAccessManager机制使用代理创建请求,并将QNetworkReply设置为 QMediaPlayer :: setMedia(const QMediaContent& media,QIODevice * stream = Q_NULLPTR).在此处中查看更多信息.

You can try to create a request with proxy using QNetworkAccessManager mechanism and set QNetworkReply as a second parameter in QMediaPlayer::setMedia(const QMediaContent & media, QIODevice * stream = Q_NULLPTR). Check more info here.

有一个简短的摘要:

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

希望这对您有所帮助.

这篇关于如何在Qt5中使代理与QMediaPlayer一起使用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆