Я ищу способ зашифровать видеофайл, а затем использовать его расшифровать для воспроизведения и воспроизвести его напрямую.Как я могу использовать Qt для шифрования/дешифрования/воспроизведения видео?
ответ
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 буферизуется Ио, QIODevice прямая И.О., они не совместимы, так что вы должны двойной буфер, как это:
#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();
}
Большое спасибо. Не могли бы вы прочитать мой ответ ниже и помочь мне? – Nya
Благодаря @aep. Это не имеет ничего общего с QDataStream, и это довольно просто. Шифрование:
unsigned char key = 0xAB;
QFile file("test.mp3");
file.open(QIODevice::ReadOnly);
QByteArray byteArray = file.readAll();
for(int i=1024;i<byteArray.length();i++){
byteArray[i] = byteArray[i]^key;
}
file.close();
QFile encrypted("encrypted.mp3");
encrypted.open(QIODevice::WriteOnly);
encrypted.write(byteArray);
encrypted.close();
и дешифрования:
unsigned char key = 0xAB;
QFile file("encrypted.mp3");
file.open(QIODevice::ReadOnly);
auto byteArray = file.readAll();
for(int i=1024;i<byteArray.length();i++){
byteArray[i] = byteArray[i]^key;
}
QBuffer buffer(&byteArray);
buffer.open(QBuffer::ReadOnly);
// give the IO to the media player
QMediaPlayer player;
player.setMedia(QUrl(), &buffer);
player.play();
В для петли, я хочу объявить я как qint64
, а не int
. Но компилятор показывает QByteArray::operator[](int i)
.
int кажется правильным, поскольку промежуточный буфер может содержать только элементы INT_MAX. зачем вам здесь qint64? – aep
Я хочу манипулировать файлом размером около 200 м. О, 'int' тоже должен работать. @aep – Nya
см. мой отредактированный ответ. Это позволит вам это сделать. @Nya – aep
- 1. Как я могу использовать MITK через Qt?
- 2. Как я могу использовать itemFromIndex в Qt
- 3. Могу ли я использовать GIF как видео?
- 4. Как я могу использовать javascript для получения миниатюры видео html5?
- 5. Как я могу использовать AviSynth для изменения размера области видео?
- 6. Сколько шрифтов я могу использовать в Qt?
- 7. Могу ли я использовать Qt без qmake или Qt Creator?
- 8. Могу ли я использовать QT Creator для программирования на C?
- 9. Могу ли я использовать Qt Creator для создания консольного приложения?
- 10. Какой вид я могу использовать из Qt для моего приложения?
- 11. Могу ли я использовать javascript для динамического изменения источника видео?
- 12. Как я могу снимать видео?
- 13. Могу ли я использовать magnific-popup для отображения видео MP4?
- 14. Могу ли я использовать потоковое видео Vimeo для Android?
- 15. Могу ли я использовать API Gstreamer для объединения двух видео?
- 16. Как я могу использовать OpenGL в Qt 5?
- 17. Как я могу использовать Clojure REPL вместе с Qt Jambi?
- 18. Как я могу воспроизвести видео?
- 19. Как я могу использовать PCA в обработке видео
- 20. Воспроизведение видео с QT
- 21. Как я могу использовать функцию записи макросов для PyQt
- 22. видео Обработка изображений, как я могу?
- 23. Могу ли я использовать QT LPGL 2.1 в коммерческих целях?
- 24. Как использовать Qt для отображения пользовательского видеопотока?
- 25. Qt Как я могу фильтровать несколько столбцов?
- 26. Qt C++ Видео как фон
- 27. Могу ли я установить приложение для обработки видео в облаке?
- 28. Как использовать TPCircularBuffer для видео?
- 29. Как я могу получить текущий фрейм в vlc-qt?
- 30. Почему я не могу использовать Qt с Visual Studio 2008?
Это не работает, потому что вы пытаетесь прочитать данные видео в 'QUrl', что приводит к недействительному' QUrl', который 'player' (вы не указали, что это) явно не может открыть. Поскольку 'QMediaPlayer' может воспроизводить видео напрямую из' QUrl', возможно, вы должны указать _why_, вам нужно играть с 'QDataStream'? – cmannett85
Мои извинения. @ Cmannett85 Не могли бы вы прочитать мой ответ и помочь мне? – Nya