我有一个加密的视频文件,我想将此文件解密到内存中,然后使用此数据播放视频。但是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是文件名,但我想从二进制数据中读取,我该怎么办?
答案 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,谢谢大家。