先上效果图:

代码:

import os, platform# 设置VLC库路径,需在import vlc之前
os.environ['PYTHON_VLC_MODULE_PATH'] = "./VLC"import vlcclass Player:'''args:设置 options'''def __init__(self, *args):if args:instance = vlc.Instance(*args)self.media = instance.media_player_new()else:self.media = vlc.MediaPlayer()# 设置待播放的url地址或本地文件路径,每次调用都会重新加载资源def set_uri(self, uri):self.media.set_mrl(uri)# 播放 成功返回0,失败返回-1def play(self, path=None):if path:self.set_uri(path)return self.media.play()else:return self.media.play()# 暂停def pause(self):self.media.pause()# 恢复def resume(self):self.media.set_pause(0)# 停止def stop(self):self.media.stop()# 释放资源def release(self):return self.media.release()# 是否正在播放def is_playing(self):return self.media.is_playing()# 已播放时间,返回毫秒值def get_time(self):return self.media.get_time()# 拖动指定的毫秒值处播放。成功返回0,失败返回-1 (需要注意,只有当前多媒体格式或流媒体协议支持才会生效)def set_time(self, ms):return self.media.get_time()# 音视频总长度,返回毫秒值def get_length(self):return self.media.get_length()# 获取当前音量(0~100)def get_volume(self):return self.media.audio_get_volume()# 设置音量(0~100)def set_volume(self, volume):return self.media.audio_set_volume(volume)# 返回当前状态:正在播放;暂停中;其他def get_state(self):state = self.media.get_state()if state == vlc.State.Playing:return 1elif state == vlc.State.Paused:return 0else:return -1# 当前播放进度情况。返回0.0~1.0之间的浮点数def get_position(self):return self.media.get_position()# 拖动当前进度,传入0.0~1.0之间的浮点数(需要注意,只有当前多媒体格式或流媒体协议支持才会生效)def set_position(self, float_val):return self.media.set_position(float_val)# 获取当前文件播放速率def get_rate(self):return self.media.get_rate()# 设置播放速率(如:1.2,表示加速1.2倍播放)def set_rate(self, rate):return self.media.set_rate(rate)# 设置宽高比率(如"16:9","4:3")def set_ratio(self, ratio):self.media.video_set_scale(0)  # 必须设置为0,否则无法修改屏幕宽高self.media.video_set_aspect_ratio(ratio)# 设置窗口句柄def set_window(self, wm_id):if platform.system() == 'Windows':self.media.set_hwnd(wm_id)else:self.media.set_xwindow(wm_id)# 注册监听器def add_callback(self, event_type, callback):self.media.event_manager().event_attach(event_type, callback)# 移除监听器def remove_callback(self, event_type, callback):self.media.event_manager().event_detach(event_type, callback)import tkinter as tkclass App(tk.Tk):def __init__(self):super().__init__()self.player = Player()#"--audio-visual=visual","--effect-list=scope", "--effect-fft-window=flattop"self.title("流媒体播放器")# self.create_video_view()# self.create_control_view()self._canvas = tk.Canvas(self, bg="black")self._canvas.pack()self.player.set_window(self._canvas.winfo_id())self.player.play("rtmp://192.168.1.3:1935/rtmp/test")def create_video_view(self):self._canvas = tk.Canvas(self, bg="black")self._canvas.pack()self.player.set_window(self._canvas.winfo_id())# def create_control_view(self):#     frame = tk.Frame(self)#     tk.Button(frame, text="播放", command=lambda: self.click(0)).pack(side=tk.LEFT, padx=5)#     tk.Button(frame, text="暂停", command=lambda: self.click(1)).pack(side=tk.LEFT)#     tk.Button(frame, text="停止", command=lambda: self.click(2)).pack(side=tk.LEFT, padx=5)#     frame.pack()# def click(self, action):#     if action == 0:#         if self.player.get_state() == 0:#             self.player.resume()#         elif self.player.get_state() == 1:#             pass  # 播放新资源#         else:#             self.player.play("rtmp://192.168.1.3:1935/rtmp/test")#     elif action == 1:#         if self.player.get_state() == 1:#             self.player.pause()#     else:#         self.player.stop()import sys,win32gui
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5 import QtCoreclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(776, 519)self.frame = QFrame(Form)self.frame.setGeometry(QtCore.QRect(50, 30, 200, 200))self.frame.setStyleSheet("background-color: rgb(85, 255, 255);")self.frame.setFrameShape(QFrame.StyledPanel)self.frame.setFrameShadow(QFrame.Raised)self.frame.setObjectName("frame")self.frame_2 = QFrame(Form)self.frame_2.setGeometry(QtCore.QRect(60, 280, 221, 141))self.frame_2.setStyleSheet("background-color: rgb(85, 170, 255);")self.frame_2.setFrameShape(QFrame.StyledPanel)self.frame_2.setFrameShadow(QFrame.Raised)self.frame_2.setObjectName("frame_2")self.frame_3 = QFrame(Form)self.frame_3.setGeometry(QtCore.QRect(410, 310, 241, 151))self.frame_3.setStyleSheet("background-color: rgb(255, 170, 255);")self.frame_3.setFrameShape(QFrame.StyledPanel)self.frame_3.setFrameShadow(QFrame.Raised)self.frame_3.setObjectName("frame_3")self.pushButton_area_show = QPushButton(Form)self.pushButton_area_show.setText("123")self.pushButton_area_show.clicked.connect(self.test)self.pushButton_area_show = QPushButton(Form)self.pushButton_area_show.setText("456")self.pushButton_area_show.setGeometry(QtCore.QRect(70, 270, 100, 100))self.pushButton_area_show.clicked.connect(self.test2)self.player = Player("--network-caching=0")#"--audio-visual=visual","--effect-list=scope", "--effect-fft-window=flattop"self.player.set_window(self.frame.winId())# self.player.play("rtmp://192.168.1.3:1935/rtmp/test")# self.player.play("rtmp://192.168.1.5:1935/live/test3")# self.player.play("rtsp://admin:castle12345@192.168.1.120:554/LiveMedia/ch1/Media1")self.player.play("rtsp://admin:hik12345@192.168.1.64:554/h264/ch01/sub/av_stream")# calc_hwnd = win32gui.FindWindow(None, u"rtmp://192.168.1.3:1935/rtmp/test")# print(calc_hwnd)# _h = self.frame.winId()# print(_h)# win32gui.SetParent(calc_hwnd, _h)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))def test(self):print(1)self.player.stop()def test2(self):print(2)self.player.play("rtmp://192.168.1.3:1935/rtmp/test")class App2(QWidget,Ui_Form):def __init__(self):super(App2,self).__init__()self.setupUi(self)if "__main__" == __name__:# app = App()# app.mainloop()app = QApplication(sys.argv)ex = App2()ex.show()sys.exit(app.exec_())

  代码说明:

# 设置VLC库路径,需在import vlc之前
os.environ['PYTHON_VLC_MODULE_PATH'] = "./VLC"这段代码是引入VLC,在项目当前目录下放入VLC

VLC下载地址:https://www.videolan.org/

可删除部分不必要文件减少项目体积

import vlc

安装python-vlc

#这个要先安装python-vlc
pip install python-vlc

Player是封装的播放器类直接引用

import tkinter as tk
......

这段代码是给使用tkinter开发

最后是

PyQt5

安装教程可参考:https://www.cnblogs.com/wohuiyijiu/p/12454130.html

重要的三行代码(其余都是绘制控件,不做说明):

self.player = Player("--network-caching=0")#"--audio-visual=visual","--effect-list=scope", "--effect-fft-window=flattop"
self.player.set_window(self.frame.winId())
# self.player.play("rtmp://192.168.1.3:1935/rtmp/test")
# self.player.play("rtmp://192.168.1.5:1935/live/test3")
# self.player.play("rtsp://admin:castle12345@192.168.1.120:554/LiveMedia/ch1/Media1")
self.player.play("rtsp://admin:hik12345@192.168.1.64:554/h264/ch01/sub/av_stream")

初始化播放器->设置句柄(设置在哪个frame播放,这里也不一定是frame,只要控件支持获取句柄应该都能播放)->传入播放地址播放

代码没有整理(界面和操作分离),有很多注释部分也有参考价值,告辞!

pyqt+vlc 播放rtsp/rtmp地址并嵌入任意frame中相关推荐

  1. 8K播放网络全终端播放器H5播放器网页直播/点播播放器EasyPlayer和vlc播放RTSP流地址不兼容问题排查解决

    背景介绍 EasyPlayer实现了对遵循标准流媒体码流协议进行实时播放以及码流录制,在流的播放速度以及画质的解码显示上均做了大量深度的优化.支持Windows(支持多窗口.包含ActiveX,npA ...

  2. 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia

    不同于市面上其他需要各种转发到流媒体服务的中间件来说,EasyMedia不需要依赖任何nginx-rtmp,srs,zlmediakit等等第三方流媒体服务,只需要你有rtsp或者rtmp等等协议的视 ...

  3. android vlc 画面不动,vlc播放rtsp over tcp画面突然卡住问题

    继完成rtmp服务器开发后,最近也写完了rtsp服务器,可以将国标ps流以及其他格式协议码流转rtsp协议输出.中间开发过程用了许多播放器测试,最常用的就是vlc.使用vlc测试过程,遇到了许多问题. ...

  4. WPF 使用VLC播放rtsp网络视频流

    最近公司需要对接大华视频的webapi,获取的实时视频是rtsp流的,最后经过不断尝试和查询博客最终还是发现使用VLC进行播放比较好 一.nuget引用VLC资源包 打开项目的nuget进行对于VLC ...

  5. PHP如何调取vlc播放rtsp,H5+VLC播放RTSP视频流

    最新项目涉及到摄像头,这篇文章记录一下在VUE中播放RTSP视频流. 这篇文章主要介绍使用VLC插件播放RTSP视频流,目前支持的浏览器有 360浏览器.2345浏览器,可用于一些对播放器要求不高的项 ...

  6. Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流

    如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器. 集成Navtive播放器可行性分析: 安卓: Unity3d可 ...

  7. JavaCV音视频开发宝典:使用JavaCV和springBoot实现http-flv直播服务,无需流媒体服务,浏览器网页flv.js转封装方式播放rtsp,rtmp和桌面投屏实时画面

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 ​ 前言 自从2021年初开始,各个浏览器开始禁用flash插件,以前直播中经常使用的 ...

  8. vlc播放海康威视摄像头rtsp rtmp视频教程

    前言 目前做的项目,需要局域网下海康摄像头web端网页上实时播放视频数据.本次项目使用的是海康威视的摄像头进行实时监控. 目的:使用vlc播放rtsp及rtmp视频流. 软件版本:vlc3.0.11版 ...

  9. Android Vlc播放器加载rtsp及http地址视频

    该文章借鉴于:记性差的程序猿发布的<Android使用VLC播放视频和直播流> CSDN地址:Android使用VLC播放视频和直播流_记性差的程序猿的博客-CSDN博客_android ...

最新文章

  1. 多线程threading
  2. 胡锐锋:组队学习分享(队长)
  3. 修改maven中的jdk版本
  4. WinForm 数据库无限填充树目录 treeView
  5. 我为什么雇佣家庭主妇做软件测试
  6. sdutoj 2624 Contest Print Server
  7. python打印99乘法表_Python 实例:九九乘法表
  8. 10 个十分难得的 javascript 开发经验
  9. JS - Promise
  10. 魔兽世界MPQ加载顺序
  11. db4o_8.0对象数据库官方文档翻译_学习笔记四
  12. 技嘉主板更新版BIOS
  13. 计算机网络信息安全等级保护(等保)
  14. 直播美颜SDK从技术层面如何自行实现
  15. 8in1模拟器v2模拟飞行_重新想象飞行模拟器:过去和现在
  16. RadioButton 和 RadioButtonList 比较
  17. python合并pdf_实用 | 手把手教你用Python分割与合并PDF
  18. java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)
  19. BZOJ 1116: [POI2008]CLO
  20. HC-SR501红外热释电传感器

热门文章

  1. 硬盘修复软件使用体会
  2. 使用字节流读取文本文件时,乱码问题的产生与解决
  3. CNCF 项目毕业标准
  4. 租房市场分析:2022年长租房成交量持续增长
  5. 虚拟Dom的基本理解
  6. 制作简单进销存管理系统(C#)
  7. 远程方法调用(RMI)与远程过程调用(RPC)
  8. Win10 找不到无线信号和蓝牙设备 已解决
  9. Oracle学习笔记--- ORA-00911: invalid character 解决办法
  10. 阿里云蒋林泉:弹性计算全景图解读 | 云栖大会