【问题标题】:QMediaplayer streaming from a custom QIODevice with encryption on Mac OS (10.9)在 Mac OS (10.9) 上使用加密的自定义 QIODevice 流式传输 QMediaplayer
【发布时间】:2014-02-19 16:29:18
【问题描述】:

我目前正在将应用程序从 Qt4(.8.4) 移植到 Qt5(.2.0)。 我几乎完成了所有已知的更改,例如不推荐使用的 toAscii() 函数、缺少 QtGui 等等。现在我们有了一个使用 phonon 框架的音乐播放器,它不再受支持,被 QtMultimedia 模块取代,包括 QMediaPlayer 和一堆 Audio-Handling 类。

我们的播放器实现采用自定义 QIODevice。该设备为磁盘上的加密音频文件提供了一个接口。现在播放器向设备请求 x 字节,设备从加密文件中读取,解密播放器请求的字节并返回它们。

现在我在多媒体模块中搜索了一个函数来重用我的 IODevice 并找到了以下函数:

void setMedia(const QMediaContent & media, QIODevice * stream = 0)

并按如下方式使用:

m_pDecryptingMediaDevice = new BYIODevice(filename);    
m_pDecryptingMediaDevice->open(QIODevice::ReadOnly);    
m_pPlayer->setMedia(0, m_pDecryptingMediaDevice);

其中 m_pDecryptingMediaDevice 是 QIODevice 子类,m_pPlayer 是 QMediaPlayer。

现在在 Windows 上一切正常。 QMediaplayer 将其 MediaStatus 更改为 QMediaPlayer::LoadingMedia 并向我的设备询问字节。然后更改为 QMediaPlayer::State PlayingState 并将状态设置为 BufferedMedia。 一切安好。 Mac OS(10.9.1)上的不幸我只得到 QMediaPlayer::PlayingState ,仅此而已。播放器/音频后端从不向我的设备询问字节,也不调用任何其他函数。 我认为错误与自定义 QIODevice 无关,而是与将其提供给 QMediaPlayer 的方式有关,因为播放器甚至不要求任何字节或调用设备上的任何函数。

我只是想把它分解成一个小测试项目:

QMediaPlayer *player = new QMediaPlayer(this);
QFile *music = new QFile("C:/Users/.../Music/Test.mp3");
music->open(QIODevice::ReadOnly);
player->setMedia(0, music);
connect(ui->pushButton, SIGNAL(clicked()), player, SLOT(play()));
connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(stateChanged(QMediaPlayer::State)));

奇怪的是,这根本不播放 - 不在 Windows 上,不在 Mac OS 上。 始终有效的方法是向播放器提供 URL,例如

根据使用函数 setMedia(const QMediaContent & media, QIODevice * stream = 0) 从 QIODevice 流式传输到 QMediaPlayer 是否有人在类似情况下有任何经验?我被这个困住了。

最好的问候,并提前非常感谢。

一月

【问题讨论】:

    标签: c++ qt5 qmediaplayer qiodevice qtmultimedia


    【解决方案1】:

    刚来到this页面。列出了每个平台的可用/选择的音频后端:

    如您所见,DirectShow-Plugin (Windows) 支持流源,而 AVM Foundation/Quicktime 7 (OSX) 不支持流。所以我猜唯一的解决方案似乎是随应用程序(gstreamer、vlc)提供自定义后端。

    【讨论】:

    • 你知道如何为相机添加新的后端吗?
    【解决方案2】:

    无论如何,尝试将空 QMediaContent() 设置为 setMedia 而不是 0。它对我来说工作正常(但是,我在 linux 中尝试过) 在您的小型测试项目中,您使用 mp3 -- 我不确定它是否受支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-29
      • 2013-12-10
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多