2023/11/13

기본적으로 테스트에 사용된 rtsp 영상은 공공데이터포털에 올라와있는 cctv 자료를 검색하여 사용하였습니다

충청남도 천안시 교통정보 rtsp://210.99.70.120:1935/live/cctv006.stream

이 글/코드는 아직 완성되지 않아 계속 보완해나갈 예정입니다..

HLS

HLS로 cctv 재생~

Flask

플라스크: 파이썬 언어로 작성된 웹 프레임워크

Flask(python)에서 opencv-python 모듈을 사용하여 RTSP영상을 간단하게 재생할 수 있습니다.

소켓을 사용하지 않고 그냥 플라스크만 사용한 방식과 소켓을 사용하여 데이터를 전송하는 방식으로 구현을 해보았습니다. 아무래도 소켓을 통한 전송이 좀 더 매끄럽습니다.

Not Using Socket

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)