如何打开/关闭Qt视频字幕

2024-06-26 11:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以使用PyQt5打开/关闭视频字幕。为了启用我添加的字幕

import os 
os.environ["QT_GSTREAMER_PLAYBIN_FLAGS"] = str(0x00000017)

在导入QGUI应用程序之前。但我们不能在代码运行时打开/关闭它。有什么办法吗

我可以使用以下命令更改字幕流:

class PlayerHelper(QtCore.QObject):
    qmlplayerChanged = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super().__init__(parent)
        self.qml_player = None

    @QtCore.pyqtProperty(QtCore.QObject, notify=qmlplayerChanged)
    def qmlplayer(self):
        return self.qmlplayer

    @qmlplayer.setter
    def qmlplayer(self, player):
        self.qml_player = player
        self.qmlplayerChanged.emit()

    @staticmethod
    def get_stream_control(qmlplayer):
        mediaObject = qmlplayer.property("mediaObject")
        player = sip.cast(mediaObject, QtMultimedia.QMediaPlayer)
        control = player.service().requestControl(
            "org.qt-project.qt.mediastreamscontrol/5.0"
        )
        return sip.cast(control, QtMultimedia.QMediaStreamsControl)
    @QtCore.pyqtSlot(result=int)
    def subTitleCount(self):
        if not self.qml_player:
            return -1
        stream_control = self.get_stream_control(self.qml_player)
        count = 0
        for i in range(stream_control.streamCount()):
            if (
                stream_control.streamType(i)
                == QtMultimedia.QMediaStreamsControl.SubPictureStream
            ):
                count += 1
        return count
    @QtCore.pyqtSlot(result=int)
    def subTitleActive(self):
        if not self.qml_player:
            return -1
        stream_control = self.get_stream_control(self.qml_player)
        count = 0
        for i in range(stream_control.streamCount()):
            if (
                stream_control.streamType(i)
                == QtMultimedia.QMediaStreamsControl.SubPictureStream
            ):
                if stream_control.isActive(i):
                    return count
                count += 1
        return -1
    
    @QtCore.pyqtSlot(int)
    def setSubTitleActive(self, index):
        if not self.qml_player:
            return
        stream_control = self.get_stream_control(self.qml_player)
        count = 0
        for i in range(stream_control.streamCount()):
            if (
                stream_control.streamType(i)
                == QtMultimedia.QMediaStreamsControl.SubPictureStream
            ):
                if index == count:
                    stream_control.setActive(i, True)
                    return
                count += 1
    @QtCore.pyqtSolt()
    def nextTitle(self):
        if subTitleActive() == subTitleCount()-1:
            setSubTitleActive(0)
        else:
            setSubTitleActive(subTitleActive+1)

通过运行nextTitle(),它将更改当前正在播放的字幕

如果无法禁用,是否有任何方法可以将Gstreamer字幕作为动态变化的字符串变量获取


Tags: selfstreamgetreturnifdefcountqml