Всегда получайте 0 при использовании QMediaPlayer.duration () - PullRequest
0 голосов
/ 10 февраля 2019

Вот мой код:

import sys
from PyQt5.Qt import QUrl
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaPlaylist
from PyQt5.QtWidgets import QApplication, QWidget


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.playlist = QMediaPlaylist(self)
        self.player = QMediaPlayer(self)
        self.player.setPlaylist(self.playlist)

        self.playlist.addMedia(QMediaContent(
            QUrl.fromLocalFile('mypath')))
        self.playlist.addMedia(QMediaContent(
            QUrl.fromLocalFile('mypath')))
        self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
        self.playlist.setCurrentIndex(1)

        self.player.setVolume(80)
        self.player.play()

        self.player.durationChanged.connect(self.print_durantion)
        print(self.player.duration())  # 0

    def print_durantion(self, d):
        print(d)                       # never printed


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

Я пытаюсь получить продолжительность файла, но всегда получаю 0. Он говорит в QtAssistant, что значение может быть недоступно, когда начальное воспроизведение начинается, иговорит нам использовать durantionChanged для получения уведомлений о состоянии.

Но как будет передаваться сигнал durationChanged, если длительность всегда равна 0 (значение d никогда не печатается)?

Есть ли способ получитьпродолжительность воспроизведения медиафайла?Любая помощь будет оценена.(Я тестировал приведенный выше код на MacOS)

1 Ответ

0 голосов
/ 16 февраля 2019

Вы подключаете сигнал durationChanged после выбора носителя.Этот сигнал срабатывает только один раз при выборе носителя, а не после.

Если вы поместите его перед setCurrentIndex, он должен работать как положено, но вам, возможно, придется присоединить его перед привязкой списка воспроизведения.

Вот работающее демонстрационное приложение mediaplayer в PyQt5, чтобы подтвердить, что сигнал работает для вашей текущей установки PyQt5.

...