1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QSlider,
QVBoxLayout, QHBoxLayout, QLineEdit, QLabel,
QSpacerItem, QSizePolicy)
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QGraphicsVideoItem, QVideoWidget
class Main(QWidget):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout(self)
self.layout.setContentsMargins(0, 0, 0, 0)
self.player_wdg = QVideoWidget()
self.layout.addWidget(self.player_wdg)
self.layout1 = QHBoxLayout()
self.url_led = QLineEdit(self)
self.layout1.addWidget(self.url_led)
self.play_btn = QPushButton("Play", self)
self.layout1.addWidget(self.play_btn)
self.pause_btn = QPushButton("Pause", self)
self.layout1.addWidget(self.pause_btn)
self.stop_btn = QPushButton("Stop", self)
self.layout1.addWidget(self.stop_btn)
spc1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.layout1.addItem(spc1)
self.level_sld = QSlider(self)
self.level_sld.setOrientation(Qt.Horizontal)
self.level_sld.setValue(50)
self.layout1.addWidget(self.level_sld)
self.level_lbl = QLabel(self)
self.level_lbl.setAlignment(Qt.AlignRight|
Qt.AlignTrailing|Qt.AlignVCenter)
self.level_lbl.setText("50")
self.layout1.addWidget(self.level_lbl)
self.layout.addLayout(self.layout1)
self.player = VideoPlayer(self)
self.play_btn.clicked.connect(self.preview_current_video)
self.pause_btn.clicked.connect(self.pause_preview)
self.stop_btn.clicked.connect(self.stop_preview)
self.level_sld.valueChanged.connect(self.set_sound_level)
self.player_wdg.wheelEvent = self.on_video_wheel_event
self.url_led.editingFinished.connect(self.url_changed)
self.current_video = False
def url_changed(self):
url = self.url_led.text()
if url.startswith("http"):
url = QUrl(url)
else:
url = QUrl.fromLocalFile(url)
self.current_video = url
def preview_current_video(self):
if self.player.is_on_pause:
self.set_running_player()
self.player.start()
return
if not self.current_video:
return
self.player.set_media(self.current_video)
self.set_running_player()
self.player.start()
def set_running_player(self):
self.play_btn.setEnabled(False)
self.pause_btn.setEnabled(True)
self.stop_btn.setEnabled(True)
def pause_preview(self):
self.player.set_on_pause()
self.play_btn.setEnabled(True)
self.pause_btn.setEnabled(False)
self.start_btn.setFocus(True)
def stop_preview(self):
self.player.finish()
self.play_btn.setEnabled(True)
self.pause_btn.setEnabled(False)
self.stop_btn.setEnabled(False)
def set_sound_level(self, level):
self.player.set_sound_level(level)
def update_volume_slider(self, level):
self.level_lbl.setText(str(level))
self.level_sld.blockSignals(True)
self.level_sld.setValue(value)
self.level_lbl.setText(str(value))
self.level_sld.blockSignals(False)
def on_video_wheel_event(self, event):
delta = event.angleDelta().y() / 24
level = self.level_sld.value() + delta
self.player.setVolume(level)
event.accept()
class VideoPlayer(QMediaPlayer):
def __init__(self, driver):
super().__init__()
self.driver = driver
self.setVideoOutput(driver.player_wdg)
self.url = None
self.auto_sound_level = True
self.is_running = False
self.is_on_pause = False
self.volumeChanged.connect(self.on_volume_changed)
self.stateChanged.connect(self.on_state_changed)
def set_media(self, media):
if isinstance(media, QUrl):
self.url = media
elif isinstance(media, str):
self.url = QUrl(media)
self.setMedia(QMediaContent(self.url))
def start(self):
self.is_running = True
self.is_on_pause = False
self.play()
def set_on_pause(self):
self.is_running = False
self.is_on_pause = True
self.pause()
def finish(self):
self.is_running = False
self.is_on_pause = False
self.stop()
def set_sound_level(self, level):
self.auto_sound_level = False
self.setVolume(level)
def on_volume_changed(self, value):
if self.auto_sound_level:
self.driver.page.update_volume_slider(value)
self.auto_sound_level = True
def on_state_changed(self, state):
if not state:
self.driver.stop_preview()
if __name__ == "__main__":
app = QApplication([])
main = Main()
main.show()
main.url_led.setText("https://arteconcert-a.akamaihd.net/am/concert/080000/080200/080206-007-A_EQ_0_VO_03452361_MP4-1500_AMM-CONCERT-NEXT_tjK187zWt.mp4")
sys.exit(app.exec_()) |
Partager