Raspberry Pi 3 b + Потоковое видео в Python GUI - PullRequest
1 голос
/ 18 мая 2019

У меня есть ПК A и ПК B. ПК A - это Raspberry Pi 3 b +, транслирующий видео при открытом порту прослушивания netcat 8090, используя этот код:

  • / opt / vc / bin / raspivid -t0 -w 1024 -h 600 -hf -ih -fps 60 -o - |nc -k -l 8090

ПК B использует MPlayer для подключения к ПК A Порт 8090 и открывает видеопоток, вывод действительно потрясающий с низкой задержкой, команда:

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

Но дело в том:

  • Я хочу передатьони выводятся в Python GUI (возможно, с использованием Tkinter lib или любого другого, если вы, ребята, можете мне порекомендовать).
  • Я пытался запустить MPlayer внутри своего кода, и, конечно, я так глуп, потому что он откроет новыйОкна MPlayer воспроизводят видеопоток, но не подключаются к моему графическому интерфейсу: (

-> 1, есть ли какой-нибудь Python-библиотека или код, который может помочь мне перехватить потоковое видео и передать его в графический интерфейс?я могу добавить некоторую информацию в мой графический интерфейс при отображении видео в фоновом режиме.

-> 2, есть ли возможность использовать Mplayer для встраивания вывода в мой графический интерфейс? И затем я могу редактировать свой графический интерфейс по своему усмотрению ивидеопоток воспроизводится на фоне.

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Через день я нашел решение для этого.

Для всех, кто ищет решение, это будут ваши рецензии:

  1. ПКB (на стороне клиента, который является моим ноутбуком DebianOS): вы создаете эти 2 файла:

    • mkFIFO264.sh

      #!/bin/bash
      if [ -p fifo264 ]
      then
        rm fifo264
      fi
      mkfifo fifo264
      nc -l -v -p 3592 > 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('iGenius138 Drone',gray)
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      cap.release()
      cv2.destroyAllWindows()
      
  2. ПК A (Raspberry Pi 3 Stream Server): вы создаете файл .sh с этим кодом:

        #!/bin/bash
        raspivid -t 0 -w <video_width> -h <video_height> -hf -ih -fps 60 -o - | nc <PC-B_IP> 3592
    
0 голосов
/ 19 мая 2019

Через день я нашел решение для этого.

Для тех, кто ищет решение, это будут ваши рецензии:

  1. ПК B (на стороне клиента, который является моим ноутбуком DebianOS): вы создаете следующие 2 файла:

    • mkFIFO264.sh

      #!/bin/bash
      if [ -p fifo264 ]
      then
        rm fifo264
      fi
      mkfifo fifo264
      nc -l -v -p 3592 > 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('iGenius138 Drone',gray)
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      cap.release()
      cv2.destroyAllWindows()
      
  2. ПК A (Raspberry Pi 3 Stream Server): вы создаете файл .sh с этим кодом:

        #!/bin/bash
        raspivid -t 0 -w <video_width> -h <video_height> -hf -ih -fps 60 -o - | nc <PC-B_IP> 3592
    
...