如何使用Qt加密/解密/播放视频?

ya

我正在寻找一种加密视频文件,然后使用解密将其ram并直接播放的方法。

ep

setMedia将QIOdevice作为第二个参数:

  #include <QMediaPlayer>
  #include <QApplication>
  #include <QFile>
  int main(int argc, char ** argv)
  {
      QApplication app(argc,argv);
      QString fileName = app.arguments().at(1);

      QFile io(fileName);
      io.open(QFile::ReadOnly);

      QMediaPlayer player;

      player.setMedia(QUrl("test.mp3"), &io);
      player.play();

      return app.exec();
  }

但万一你真的意味着QDataStream:

QDataStream是缓冲io的,QIODevice是直接io的,它们不兼容,因此您必须像这样将缓冲区加倍:

#include <QMediaPlayer>
#include <QApplication>
#include <QFile>
#include <QBuffer>
#include <QDataStream>
int main(int argc, char ** argv)
{
    QApplication app(argc,argv);
    QString fileName = app.arguments().at(1);

    // our double buffer
    QByteArray bufferSpace;

    // our stream on which we can put "media" data
    QDataStream stream(&bufferSpace, QIODevice::WriteOnly);

    // this is just demo data
    QFile io(fileName);
    io.open(QFile::ReadOnly);
    stream << io.readAll();

    // open an IO Device on our buffer
    QBuffer buffer(&bufferSpace);
    buffer.open(QBuffer::ReadOnly);

    // give the IO to the media player
    QMediaPlayer player;
    player.setMedia(QUrl("test.mp3"), &buffer);
    player.play();

    return app.exec();
}

编辑

这是您发布的“加密”代码的更快版本,而没有为整个文件使用缓冲区:

#include <QMediaPlayer>
#include <QApplication>
#include <QFile>
#include <QBuffer>
#include <QDataStream>

static const unsigned char key = 0xAB;
class MyFunnyCrypto : public QFile /*or subclass any other IO*/
{
protected:
    virtual qint64 readData(char *data, qint64 maxSize)
    {
        qint64 r = QFile::readData(data, maxSize);
        if (r > 0) {
            for (qint64 i = 0; i < r; i++) {
                data[i] = data[i]^key;
            }
        }
        return r;
    }

};


int main(int argc, char ** argv)
{
    QApplication app(argc,argv);
    QString fileName = app.arguments().at(1);


    MyFunnyCrypto io;
    io.setFileName(fileName);
    io.open(QFile::ReadOnly);

    // give the IO to the media player
    QMediaPlayer player;
    player.setMedia(QUrl("test.mp3"), &io);
    player.play();

    return app.exec();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章