2023/11/13
기본적으로 테스트에 사용된 rtsp 영상은 공공데이터포털에 올라와있는 cctv 자료를 검색하여 사용하였습니다
충청남도 천안시 교통정보 rtsp://210.99.70.120:1935/live/cctv006.stream
이 글/코드는 아직 완성되지 않아 계속 보완해나갈 예정입니다..
플라스크: 파이썬 언어로 작성된 웹 프레임워크
Flask(python)에서 opencv-python
모듈을 사용하여 RTSP영상을 간단하게 재생할 수 있습니다.
소켓을 사용하지 않고 그냥 플라스크만 사용한 방식과 소켓을 사용하여 데이터를 전송하는 방식으로 구현을 해보았습니다. 아무래도 소켓을 통한 전송이 좀 더 매끄럽습니다.
server
from flask import Flask
import cv2
app = Flask(__name__)
url = 'rtsp://210.99.70.120:1935/live/cctv006.stream'
def gen_frames():
while True:
camera = cv2.VideoCapture(url) # url은 rtsp:// url을 사용하시면 됩니다.
success, frame = camera.read() # read the camera frame
if not success:
break
else:
ret, buffer = cv2.imencode('.jpg', frame)
cv2.waitKey(1)
frame = buffer.tobytes()
yield (b'--frame\\r\\n'
b'Content-Type: image/jpeg\\r\\n\\r\\n' + frame + b'\\r\\n')
@app.route('/video_feed')
def video_feed():
return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=False)