PyQt5使用VLC播放器简单实现(一)

1. 开发环境

1. 系统环境

Ubuntu22.04,python 3.10.12,

2.安装依赖

pip install python-vlc==3.0.21203
pip install PyQt5==5.15.11

3.代码实现

# encoding: utf-8
# @Time    : 2024/12/27 下午5:26
# @File    : pyqt5-vlc.py
import os

import vlc
from PyQt5.QtCore import Qt
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import QMainWindow, QDockWidget, QHBoxLayout, QPushButton, QStyle, QWidget, QApplication


class VideoPlayer(QMainWindow):

    def __init__(self):
        super().__init__()

        self.setGeometry(100, 100, 800, 600)

        # 使用 QVideoWidget 作为视频显示部件
        self.video_widget = QVideoWidget()
        self.setCentralWidget(self.video_widget)

        # 创建 UI
        self.create_ui()

        self.instance = vlc.Instance()
        self.player = self.instance.media_player_new()

    def create_dock_widget(self, widget):
        dock = QDockWidget()
        dock.setWidget(widget)
        dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
        return dock

    def create_ui(self):
        control_layout = QHBoxLayout()

        # 播放按钮
        self.play_button = QPushButton()
        self.play_button.setEnabled(False)
        self.play_button.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))

        self.play_button.clicked.connect(self.toggle_play_pause)

        control_layout.addWidget(self.play_button)

        control_widget = QWidget()
        control_widget.setLayout(control_layout)

        self.dockWidget = self.create_dock_widget(control_widget)
        self.addDockWidget(Qt.BottomDockWidgetArea, self.dockWidget)

    def open_vide(self, path):
        if os.path.isfile(path) or path.startswith(('http://', 'https://')):
            self.video_path = path

            self.media = self.instance.media_new(self.video_path)
            self.player.set_media(self.media)
            self.media.parse()

            # 将 VLC 播放器的输出窗口设置为 QVideoWidget
            self.player.set_xwindow(int(self.video_widget.winId()))
            self.play_button.setEnabled(True)

    def toggle_play_pause(self):
        if self.player.is_playing():
            self.player.pause()
            self.play_button.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        else:
            self.player.play()
            self.play_button.setIcon(self.style().standardIcon(QStyle.SP_MediaPause))


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    player = VideoPlayer()
    video_path = 'https://github.com/facefusion/facefusion-assets/releases/download/examples-3.0.0/target-240p.mp4'
    player.open_vide(video_path)
    player.show()
    sys.exit(app.exec_())

以上代码,仅实现了pyqt5中使用vlc播放器的播放功能。VLC播放器要比QT5中自带的多媒体播放器更好用!

参考:
python-vlc

### 使用PyQt5VLC播放本地视频文件 为了实现功能,可以利用`Python`中的`vlc`模块以及图形界面库`PyQt5`。下面是简单的例子来展示如何创建个基本的应用程序以读取并播放本地视频文件[^1]。 首先安装必要的软件包: ```bash pip install pyqt5 python-vlc ``` 接着编写如下代码片段用于构建应用程序框架,并集成VLC媒体播放器控件到GUI中。 ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QFileDialog import vlc class VideoPlayer(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Video Player') self.setGeometry(300, 200, 800, 600) layout = QVBoxLayout() widget = QWidget(self) self.setCentralWidget(widget) widget.setLayout(layout) open_button = QPushButton("Open File", self) layout.addWidget(open_button) open_button.clicked.connect(self.open_file_dialog) self.media_player = vlc.Instance() self.player = self.media_player.media_player_new() self.video_frame = None # Add the video frame to the layout after opening a file. def open_file_dialog(self): options = QFileDialog.Options() fileName, _ = QFileDialog.getOpenFileName( self, "QFileDialog.getOpenFileName()", "", "All Files (*);;MP4 (*.mp4)", options=options ) if fileName: media = self.media_player.media_new(fileName) self.player.set_media(media) if sys.platform.startswith('linux'): # For Linux using the X Server self.player.set_xwindow(self.video_frame.winId()) elif sys.platform == "win32": # For Windows self.player.set_hwnd(self.video_frame.winId()) elif sys.platform == "darwin": # For MacOS self.player.set_nsobject(int(self.video_frame.winId())) self.player.play() if __name__ == '__main__': app = QApplication(sys.argv) window = VideoPlayer() window.show() sys.exit(app.exec_()) ``` 上述脚本定义了个名为`VideoPlayer`的类继承自`QMainWindow`,它包含了打开文件对话框按钮的功能,允许用户选择要播放的视频文件;同时初始化了VLC实例及其关联的播放器对象。当选择了具体的视频路径之后,则会通过设置相应的窗口句柄方法使视频能够在指定区域显示出来。 需要注意的是,在不同操作系统上嵌入视频渲染表面的方式有所区别,因此这里提供了针对Linux(X Window System), Windows 和 macOS 的处理逻辑分支。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苗清水

如有帮助,求打赏哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值