Можно ли передать QBuffer из бэкэнда python в QML MediaPlayer?

Я пытаюсь написать программу просмотра движущихся изображений, сделанных моим смартфоном. Камера снимает видео за несколько секунд до того, как будет сделано изображение, а затем сохраняет и видео, и файл в формате JPEG в одном файле в формате JPEG. [двоичные данные jpg, за которыми следуют двоичные данные mp4].jpg

Я использую python, чтобы открыть сохраненный файл jpeg и прочитать данные jpeg и mp4 в отдельные буферы памяти (QBuffers). Используя QWidgets, я могу передать QBuffer в QMediaPlayer и воспроизвести видео с помощью QVideoWidget. Прежде чем видео закончится, я накладываю на него захваченное изображение высокого качества.

Это работает нормально, однако на долю секунды раздражает мигание черного экрана. При использовании QGraphicsScene мерцания нет, но качество видео и изображения хуже.

Я думал, что QML может не страдать от этого черного мерцания. QML позволяет определить MediaPlayer, однако для этого требуется QUrl. Это может быть локальный файл или веб-ресурс, но я не нашел способа передать данные, уже загруженные в память, в MediaPlayer.

Я не могу получить доступ к объекту QML MediaPlayer из PySide6, поэтому я подумал, что попрошу идеи у влиятельного сообщества :)

Я прочитал предложение предоставить собственный QNetworkAccessManager с динамической загрузкой QML из памяти вместо URL-адреса , однако я пытался как-то понять это, я даже пытался понять синтаксис С++, но мне трудно, будет ли это даже полезно.

PS: это мой первый раз, когда я обращаюсь за какой-либо помощью, связанной с кодированием. Я искал возможные решения

Из QWidgets я попробовал QGraphicsSCene, но качество видео и изображения выглядит хуже.

Поэтому я прибегнул к QML, это может быть полезно, но для MediaPlayer требуется строка, указывающая на исходный файл. Я попытался получить доступ к MediaPlayer напрямую, установив имя объекта в QML и напрямую изменив свойство воспроизведении, однако объект MediaPlayer, по-видимому, уничтожается, когда я пытаюсь получить к нему доступ.

       MediaPlayer {
        id: player
        source: "test_video_file.mp4"
        audioOutput: AudioOutput {}
        videoOutput: videoOutput
        objectName: "medplayer"
        playbackRate: 1.0
    }

    VideoOutput {
        id: videoOutput
        anchors.fill: parent
        anchors.margins: 20
    }
      medplayer = engine.rootObjects()[0].findChild(QObject, "medplayer")
medplayer.setProperty('playbackRate', 1.5)

RuntimeError: внутренний объект C++ (PySide6.QtMultimedia.QMediaPlayer) уже удален.

0 ответов

Другие вопросы по тегам