PyQt5 中嵌入rtsp视频流播放,使用vlc

需求: 在PyQt5中嵌入视频网络摄像头读取的帧

参考连接

解决方案一:使用opencv

使用opencv获取网络摄像头(局域网)的frame,然后利用定时器,每隔一定的时间更新画面。

下面为关键代码:

import cv2



self.timer_camera = QTimer()  # 初始化定时器
self.cap = cv2.VideoCapture()  # 初始化摄像头
self.timer_camera.timeout.connect(self.show_camera) #当计时器到了一定的时间调用show_camera函数


def show_camera(self):
    flag, self.image = self.cap.read()
    show = cv2.resize(self.image, (600, 350))
    show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
    showImage = QImage(show.data, show.shape[1], show.shape[0], QImage.Format_RGB888)
    self.cameraLabel.setPixmap(QPixmap.fromImage(showImage)) #在Label标签上显示图像

def openCamera(self):
    flag = self.cap.open("rtsp url")
    if flag == False:
        print("请检测相机与电脑是否连接正确")
    else:
        self.timer_camera.start(30)  #设置计时间隔并启动(1000ms == 1s)
def closeCamera(self):
    self.timer_camera.stop() #停止计时器
    self.cap.release()   #释放camera
    self.cameraLabel.clear()  #清空画面

此方案和获取本地摄像头一样,本地摄像头使用cap = cv2.VideoCapture(0) 类似,在测试过程中获取本地摄像头可以,但是获取rtsp流的网络摄像头不可以。然后使用vlc软件可以使用那个rtsp地址播放摄像头视频,不知道是哪里的问题(可能是摄像头本身的畏问题)。。。。。。。因此又考虑了第二种方案。

解决方案二:使用vlc

参考
安装vlc

python -m pip install python-vlc

if args:
    self.instance = vlc.Instance(*args)
    self.mediaplayer = self.instance.media_player_new()
else:
    self.mediaplayer = vlc.MediaPlayer()

if platform.system() == "Windows":
    self.mediaplayer.set_hwnd(self.cameraLabel.winId())  #在cameraLabel显示帧



def openCamera(self):
    url = "rtsp url"
    self.mediaplayer.set_mrl(url)
    self.mediaplayer.play()
def closeCamera(self):
    self.mediaplayer.stop()
    self.mediaplayer.release()
发布了93 篇原创文章 · 获赞 0 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Dream_xd/article/details/104220780
今日推荐