【发布时间】:2022-10-14 05:08:44
【问题描述】:
我想以尽可能低的延迟(<1s)将从连接到我的 Raspberry Pi Zero 的摄像头捕获的实时视频流传输到某个浏览器。我的最终目标是将 Pi Zero 和相机连接到无人机并通过 LTE 流式传输视频。
但是,我有点迷失在这里存在的不同解决方案(MJPEG、RTMP、RTSP、WebRTC)的丛林中。
到目前为止,我在this guide 之后尝试了一个简单的 mjpeg 流媒体:
import cv2
import pyshine as ps # pip3 install pyshine==0.0.9
HTML="""
<html>
<head>
<title>PyShine Live Streaming</title>
</head>
<body>
<center><h1> PyShine Live Streaming using OpenCV </h1></center>
<center><img src="stream.mjpg" width='320' height='240' autoplay playsinline></center>
</body>
</html>
"""
def main():
StreamProps = ps.StreamProps
StreamProps.set_Page(StreamProps,HTML)
address = ('127.0.0.1',9000) # Enter your IP address
try:
StreamProps.set_Mode(StreamProps,'cv2')
capture = cv2.VideoCapture(0)
if capture.isOpened():
capture.set(cv2.CAP_PROP_BUFFERSIZE,2)
capture.set(cv2.CAP_PROP_FRAME_WIDTH,240)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT,320)
capture.set(cv2.CAP_PROP_FPS,8)
StreamProps.set_Capture(StreamProps,capture)
StreamProps.set_Quality(StreamProps,40)
server = ps.Streamer(address,StreamProps)
print('Server started at','http://'+address[0]+':'+str(address[1]))
server.serve_forever()
except KeyboardInterrupt:
capture.release()
server.socket.close()
if __name__=='__main__':
main()
虽然这个简单解决方案的延迟足够低,但对于我的用例来说,它还远远不够健壮。每当连接中断时,流就会停止,直到浏览器被刷新。由于互联网速度较慢,流在一段时间后往往会有很大的延迟(15 秒或更长)。
我应该为我的用例使用什么样的解决方案?
谢谢你的帮助!
【问题讨论】:
标签: video raspberry-pi video-streaming streaming