В последнее время я работаю над некоторыми проектами по управлению видео, а Python уже давно не обновляется, поэтому я сделал простой видеоплеер.
IDE:VS2017
Python:py3.6,pyqt5.12
Система: Win10
Область импорта библиотеки: из *** import ***
класс основной формы:class m_window():
Основная функция: функция входа, выход из программы
-класс основной формы(Реализация основной функции)
1. Конструктор (функция инициализации)
Функция входа класса записывает объявление и инициализацию QMediaPlayer. , инициализация списка, подключение некоторых слотов сигнала (воспроизведение, пауза, индикатор выполнения, переключение списка)
def __init__(self):
super(m_window,self).__init__()
self.setupUi(self)
#Инициализация кнопки
self.PushButtonInit()
#Инициализация индикатора выполнения
self.ProgressBarInit()
#Player, инициализация плейлиста
self.mplayer = QMediaPlayer(self)
self.ListWidgetInit()
self.mplayList.setCurrentIndex(0)
#mVideoWidget Инициализация элемента управления
self.mVideoWin = QVideoWidget(self)
self.mVideoWin.setGeometry(5,5,640,480)
#nplayerУстановить форму вывода видео (QVideoWideget)
self.mplayer.setVideoOutput(self.mVideoWin)
#Сигнал、канавка
self.play.clicked.connect(self.PlayVideo)
self.stop.clicked.connect(self.StopVideo)
self.mplayer.positionChanged.connect(self.PlaySlide)
self.mplayer.durationChanged.connect(self.MediaTime)
self.listWidget.itemDoubleClicked.connect(self.GetItem)
self.Index_Signle.connect(self.SetPlayMedia)
2. Функция инициализации кнопок, включая положение, размер, текст и другие настройки.
def PushButtonInit(self):
self.play = QPushButton(self)
self.play.setGeometry(5,495,50,20)
self.play.setText("Play")
self.play.show()
self.stop = QPushButton(self)
self.stop.setGeometry(65,495,50,20)
self.stop.setText("stop")
self.stop.show()
3. Инициализация индикатора выполнения: объявление, определение, тип, положение, размер, диапазон, отображение.
def ProgressBarInit(self):
self.Slider = QSlider(Qt.Horizontal,self)
self.Slider.setGeometry(150,495,200,20)
self.Slider.setRange(0,100)
self.Slider.show()
4. Реализация функций слота для кнопок воспроизведения и паузы.
def PlayVideo(self):
self.mplayer.play()
def StopVideo(self):
self.mplayer.pause()
5. Установите исходное положение ползунка индикатора выполнения, продолжительность мультимедиа (мс/1000, преобразованную в S), установите диапазон индикатора выполнения в соответствии с продолжительностью мультимедиа и получите функцию слота сигнала для времени мультимедиа.
def MediaTime(self,time):
self.Slider.setValue(0)
self.time = self.mplayer.duration() /1000
self.Slider.setRange(0,int(self.time))
6. Функция слота сигнала изменения позиции воспроизведения мультимедиа (используется для реализации функции индикатора выполнения)
def PlaySlide(self,val):
self.Slider.setValue(int(val/1000))
7. Управление плейлистом, инициализация LIstWidget, инициализация playList (теперь список жестко запрограммирован)
def ListWidgetInit(self):
self.mplayList = QMediaPlaylist();
self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile("https://vd1.bdstatic.com/mda-hg6uempmez9u6mqi/sc/mda-hg6uempmez9u6mqi.mp4?auth_key=1562172911-0-0-4c22196ad1d0fcc49402d91336c999c5&bcevod_channel=searchbox_feed&pd=bjh&abtest=all")))
self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile("https://vd1.bdstatic.com/mda-hgdizw7w7fpc1pcr/sc/mda-hgdizw7w7fpc1pcr.mp4?auth_key=1562254279-0-0-703eb2eca1f7017eaa49b62a7ef56dda&bcevod_channel=searchbox_feed&pd=bjh&abtest=all")))
self.mplayer.setPlaylist(self.mplayList)
self.mplayList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
self.listWidget.addItem("1")
self.listWidget.addItem("2")
8. Функция переключения списка реализует функцию слота, а сигнал представляет собой пользовательский индексный сигнал позиции индекса (дважды щелкните, чтобы начать воспроизведение)
Сигнал
Index_Signle = pyqtSignal(int)
функция слота
def SetPlayMedia(self,Index):
self.mplayer.stop()
self.mplayList.setCurrentIndex(Index)
self.mplayer.play()
9.ListWidgetдвойной щелчок Сигналфункция слота,Signle_IndexСигналфункция эмиссии
def GetItem(self,Item):
self.Index = self.listWidget.row(Item)
self.Index_Signle.emit(self.Index)
Скриншот из видео 1
Скриншот воспроизведения видео 2
это СМИигратьустройство,На самом деле, я представляю себе очень простой медиаплеер.,Пока воспроизведение возможно, все в порядке.,Позже добавлено,играть,пауза,индикатор выполнения,Декоративная функция, такая как список. Другие функции,Перетаскивание индикатора выполнения,Установить игровую позицию,перемотка вперед,Медленная перемотка вперед и другие функции,В этом разделе игрового списка,Приобретение местных СМИ,Приобретение онлайн-СМИ,Добавить медиа в список,списокItemРеализация некоторых функций, таких как автоматическое присвоение имен именам.。Поскольку я написал один раньшеQtмузыкаигратьустройство,Функция апелляции также в основном реализована,Поэтому я не стал писать дальше.,Выполняйте повторяющиеся задачи. Давайте поговорим об идеях:
Приобретение местных СМИ:Добавить элемент управления(кнопка),Использование QFile для реализации поля выбора файла,Добавьте фильтрацию для реализации выбора локальных медиа.
Приобретение онлайн-СМИ:добавить одинLineEidt,Используется для входа в сетьсуществоватьлиния пути к медиафайлам,присоединитьсяигратьсписок
Перетаскивание индикатора выполнения:использоватьSliderСигналvaluechangeждать,получатьиграть Расположение,использоватьsetPostionУстановить игровую позицию
перемотка вперед:Это тоже верноиграть Расположениеобработка,Установите равную разницу во времени,выполнитьиграть Расположениепрыгать
список список:Отрежьте весь путь местным СМИ,Используйте суффикс и «/» для выполнения вырезания и захвата.,Получить элемент списка,Интернет-СМИ вводятся вручную.
Список записей:использовать Конфигурационный файлjson、xmlждать,Запишите, когда вы в последний раз выходили,игратьсписок список、игратьсостояние、времясостояниеждать,В следующий раз, когда вы инициализируете,Сделайте настройки.
/---------------------------------2019.11.19-------------------------------------*/
Реализованы вышеупомянутые функции адаптивного размера окна, быстрой перемотки вперед и замедленной перемотки вперед.