我想将从我的Raspberry camera的摄像头上捕获的实时视频提要流到尽可能低延迟(<1s)的浏览器上。我的最终目标是将Camera &摄像机附加到无人机上,并通过LTE播放视频。
然而,我有点迷失在这里存在的不同解决方案的丛林中(MJPEG、RTMP、RTSP、WebRTC)。
到目前为止,我在本指南之后尝试了一个简单的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或更多)后一段时间。
用例应该使用什么样的解决方案?
谢谢你的帮忙!
发布于 2022-10-13 21:08:44
WebRTC是为您的用例设计的,也是您应该使用的。
整个堆栈面向低延迟,以牺牲质量、自动转换比特率、必要时丢弃帧等为代价。
https://stackoverflow.com/questions/74032426
复制相似问题