如何从内存中读取视频数据使用pyqt5

时间:2018-03-11 01:46:45

标签: python pyqt pyqt5 qmediaplayer

我有一个加密的视频文件,我想将此文件解密到内存中,然后使用此数据播放视频。但是qt mediaplayer类是要传递一个文件名,我需要有什么好办法吗?

这是我的代码

#!/usr/bin/env python

from PyQt5.QtCore import QFile, QFileInfo, QIODevice, QUrl, QDataStream
from PyQt5.QtWidgets import QApplication
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QVideoWidget

if __name__ == '__main__':

import sys
app = QApplication(sys.argv)
player = QMediaPlayer()

file = QFile('mymusic.avi')
stream = QDataStream(file)
# this is where i want read form stream? how can i read from stream?
player.setMedia(QMediaContent(QUrl.fromLocalFile('mymusic.avi')))

videoWidget = QVideoWidget()
player.setVideoOutput(videoWidget)
videoWidget.show()

player.play()
sys.exit(app.exec_())

看,param是文件名,但我想从二进制数据中读取,我该怎么办?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,解决方案如下代码

#!/usr/bin/env python

from PyQt5.QtCore import QFile, QFileInfo, QIODevice, QUrl, QDataStream, QBuffer, QByteArray
from PyQt5.QtWidgets import QApplication
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QVideoWidget

if __name__ == '__main__':

import sys
app = QApplication(sys.argv)
player = QMediaPlayer()

file = QFile('mymusic-encrypt.avi')

isOpen = file.open(QIODevice.ReadOnly)

buffer = QBuffer()
buffer.open(QIODevice.ReadWrite)

player.setMedia(QMediaContent(), buffer)

if isOpen:
    while not file.atEnd():
        temp = file.readLine()
        # temp = QByteArray.fromBase64(temp)
        buffer.write(temp)

videoWidget = QVideoWidget()
player.setVideoOutput(videoWidget)
videoWidget.show()

player.play()
sys.exit(app.exec_())

我需要仔细阅读api,谢谢大家。