QMediaplayer transmitido a partir de um QIODevice personalizado com criptografia no Mac OS (10.9)

Atualmente, estou portando um aplicativo do Qt4 (.8.4) para o Qt5 (.2.0). Estou quase terminando com todas as alterações conhecidas, como a função toAscii () - obsoleta, com a falta do QtGui e assim por diante. Agora, tínhamos um reprodutor de música usando a estrutura de fone, que não é mais suportado e fomos substituídos pelo módulo QtMultimedia, incluindo o QMediaPlayer e várias classes de manipulação de áudio.

Nossa implementação do player utiliza um QIODevice personalizado. Este dispositivo fornece uma interface para arquivos de áudio criptografados no disco. Agora, o aparelho solicita x bytes, o dispositivo lê o arquivo criptografado, descriptografa os bytes solicitados e os devolve.

Agora, procurei uma função no módulo multimídia para reutilizar meu dispositivo IOD e encontrei a seguinte função:

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

e usou da seguinte maneira:

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

onde m_pDecryptingMediaDevice é a subclasse QIODevice e m_pPlayer o QMediaPlayer.

Agora, no Windows, tudo funciona como esperado. O QMediaplayer altera seu MediaStatus para QMediaPlayer :: LoadingMedia e solicita bytes ao meu dispositivo. Em seguida, muda para QMediaPlayer :: State PlayingState e o status é definido como BufferedMedia. Está tudo bem. Infelizmente, no Mac OS (10.9.1), só recebo QMediaPlayer :: PlayingState e nada mais. O player / audiobackend nunca solicita bytes ao meu dispositivo e não chama nenhuma outra função. Eu não acho que o erro esteja relacionado ao QIODevice personalizado, mas da maneira que é dado ao QMediaPlayer porque o player nem sequer pede bytes ou chama qualquer função no dispositivo.

Eu apenas tentei dividi-lo em um pequeno projeto de teste:

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

Curiosamente, isso não é reproduzido - nem no Windows, nem no Mac OS. O que sempre funciona é dar um URL ao player como

Alguém tem alguma experiência em um caso semelhante de acordo com a transmissão de um QIODevice para o QMediaPlayer usando a função setMedia (const QMediaContent & media, QIODevice * stream = 0)? Eu estou preso com isso.

Atenciosamente e muito obrigado antecipadamente.

Jan

questionAnswers(2)

yourAnswerToTheQuestion