Raspberry Pi 3 b+ 视频流到 Python GUI
Raspberry Pi 3 b+ Video Streaming to Python GUI
我有 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 - | nc -k -l 8090
PC B用MPlayer连接PC A的8090端口,打开Video Stream,输出非常棒,延迟很低,命令:
- mplayer -fps 200 -demuxer h264es ffmpeg://tcp://192.168.1.3:8090
但问题是:
- 我想将这些输出通过管道传输到 Python GUI(可能使用 Tkinter 库,或者如果你们可以推荐我的话)。
- 我试图在我的代码中执行 MPlayer,我很愚蠢,因为它会打开一个新的 MPlayer windows 播放视频流,但没有附加到我的 GUI :(
-> 1,是否有任何 Python 库或代码可以帮助我捕获流式视频并将其通过管道传输到 GUI 中?所以我可以在我的 GUI 上添加一些信息,同时在后台显示视频。
-> 2,有没有办法在我的 GUI 中使用 Mplayer 作为嵌入输出?然后我可以根据需要编辑我的 GUI,视频流在后台播放。
一天后,我找到了解决方案。
对于寻找解决方案的任何人,这将是您的write-ups:
PC B(客户端,这是我的 DebianOS 笔记本电脑):您创建这两个文件:
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()
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> 3592
我有 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 - | nc -k -l 8090
PC B用MPlayer连接PC A的8090端口,打开Video Stream,输出非常棒,延迟很低,命令:
- mplayer -fps 200 -demuxer h264es ffmpeg://tcp://192.168.1.3:8090
但问题是:
- 我想将这些输出通过管道传输到 Python GUI(可能使用 Tkinter 库,或者如果你们可以推荐我的话)。
- 我试图在我的代码中执行 MPlayer,我很愚蠢,因为它会打开一个新的 MPlayer windows 播放视频流,但没有附加到我的 GUI :(
-> 1,是否有任何 Python 库或代码可以帮助我捕获流式视频并将其通过管道传输到 GUI 中?所以我可以在我的 GUI 上添加一些信息,同时在后台显示视频。
-> 2,有没有办法在我的 GUI 中使用 Mplayer 作为嵌入输出?然后我可以根据需要编辑我的 GUI,视频流在后台播放。
一天后,我找到了解决方案。
对于寻找解决方案的任何人,这将是您的write-ups:
PC B(客户端,这是我的 DebianOS 笔记本电脑):您创建这两个文件:
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()
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> 3592