Raspberry Pi 3 b+ 视频流传输到 Python GUI

问题描述 投票:0回答:1

我有 PC A 和 PC B。PC A 是 Raspberry Pi 3 b+,使用以下代码在打开 netcat 监听端口 8090 的同时流式传输视频:

  • /opt/vc/bin/raspivid -t 0 -w 1024 -h 600 -hf -ih -fps 60 -o - |数控-k-l 8090

PC B 使用 MPlayer 连接到 PC A 端口 8090 并打开视频流,输出非常好且低延迟,命令:

  • mplayer -fps 200 -demuxer h264es ffmpeg://tcp://192.168.1.3:8090

但问题是:

  • 我想将这些输出通过管道传输到Python GUI(也许使用Tkinter lib,或者如果你们可以推荐我的话)。
  • 我尝试在我的代码中执行 MPlayer,但我很愚蠢,因为它会打开一个新的 MPlayer 窗口来播放视频流,但不会附加到我的 GUI :(

-> 1,是否有任何 Python 库或代码可以帮助我捕获流视频并将其传输到 GUI 中?所以我可以在我的 GUI 上添加一些信息,同时在背景上显示视频。

-> 2,是否可以使用 Mplayer 作为 GUI 中的嵌入输出?然后我可以根据需要编辑 GUI,并且视频流会在后台播放。

python-3.x video-streaming raspberry-pi3
1个回答
0
投票

一天后,我找到了解决方案。

对于任何寻找解决方案的人,这将是您的文章:

  1. PC B(客户端,这是我的 DebianOS 笔记本电脑):您创建这 2 个文件:
  • mkFIFO264.sh

          #!/bin/bash
          if [ -p fifo264 ]
          then
            rm fifo264
          fi
          mkfifo fifo264
          nc -l -v -p <port> > fifo264
    
  • getStreamData.py

          import numpy as np
          import cv2
          cap = cv2.VideoCapture('fifo264')
          while(cap.isOpened()):
              ret, frame = cap.read()
              gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
              cv2.imshow('< DroneName >',gray)
              if cv2.waitKey(1) & 0xFF == ord('q'):
                  break
          cap.release()
          cv2.destroyAllWindows()
    
  1. PC A(Raspberry Pi 3 流服务器):您使用以下代码创建一个 .sh 文件:

         #!/bin/bash
         raspivid -t 0 -w <video_width> -h <video_height> -hf -ih -fps 60 -o - | nc <PC-B_IP> <port>
    
© www.soinside.com 2019 - 2024. All rights reserved.