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