python中flask框架讀取rtsp在web界面展示畫面
因專案需求,需要從海康攝像頭讀取rtsp實時視頻流并在web界面展示,達到直播的效果,查閱了很多資料,最初采用了其他的方法實作了此項功能,但是對網路要求過高,
詳情請閱讀:https://blog.csdn.net/weixin_45457983/article/details/109254606
接下來要說的是使用flask框架實作此功能,flask使用代碼:
from flask import Flask, render_template, Response
import cv2
class VideoCamera(object):
def __init__(self):
# 通過opencv獲取實時視頻流
self.video = cv2.VideoCapture("rtsp地址")
def __del__(self):
self.video.release()
def get_frame(self):
success, image = self.video.read()
# 因為opencv讀取的圖片并非jpeg格式,因此要用motion JPEG模式需要先將圖片轉碼成jpg格式圖片
ret, jpeg = cv2.imencode('.jpg', image)
return jpeg.tobytes()
app = Flask(__name__)
def index():
# jinja2模板,具體格式保存在index.html檔案中
return render_template('index.html')
def gen(camera):
while True:
frame = camera.get_frame()
# 使用generator函式輸出視頻流, 每次請求輸出的content型別是image/jpeg
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
@app.route('/video_feed') # 這個地址回傳視頻流回應
def video_feed():
return Response(gen(VideoCamera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
web前端界面代碼
<html>
<head>
<title></title>
</head>
<body>
<img src="http://localhost:5000/video_feed"/>
</body>
</html>
在此程序中,若前后端分離,有時存在跨域問題,關于flask解決跨域問題,讀著可以直接百度進行處理,
若是在服務器上操作,一定注意5000埠是否被占用,是否已經開放,
如果對我的文章感興趣,歡迎評論探討,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239142.html
標籤:其他
上一篇:JavaCV入門指南之快速上手篇:快速上手視頻拉流、推流、錄制檔案、錄屏、截圖和編解碼復用解復用等常用音視頻處理操作
