Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Finance
- repo
- golang
- Python
- mariadb
- go.mod
- 가상화 중첩화
- go
- dockercontainer
- 파이썬
- psutil
- QT_QPA_PLATFORM_PLUGIN_PATH
- FastAPI
- python3.9
- 자원측정
- 스트리밍
- APT
- Hyper-V
- Windows
- apt-get
- asyncio
- docker
- 영상스트리밍
- 주식
- 레파지토리
- Replication
- pip
- 자식프로세스
- BATCH
- Thread
Archives
- Today
- Total
검색하기귀찮아서만든블로그
[python] fast api 영상 relay server 본문
[개요] 동영상을 방송으로 송출하기 위한 릴레이 서버
- 라이브러리 : fastapi
- client : 스트리밍 데이터를 POST 로 송신. header 에 MJPEG 이미지 구분을 위한 boundary를 제공 해야하며, MJPEG 영상 데이터를 프레임 단위로 스트림 송신해야 한다.
- MJPEG 이미지 데이터 포맷 : --<boundary>\r\nContent-Type: image/jpeg\r\n\r\n<jpgBin>\r\n
- 아래 코드는 테스트용 1:1 릴레이 서버 코드입니다. client 에서 수신한 영상을 브라우저로 접속한 사용자에게 전달합니다.
- 클라이언트는 별도 개발필요
from fastapi import FastAPI
from starlette.requests import Request
from starlette.responses import StreamingResponse
app = FastAPI()
ForwardData = bytes() # client 로 부터 수신한 MJPEG 데이터
boundary = str() # 이미지 구분용 바운더리
recving = False # 데이터 수신 상태
# client 에서 보낸 영상을 비동기로 전달하는 함수.
def getCameraStream():
global ForwardData, recving
while recving:
yield (ForwardData)
# client > api 서버로 스트리밍 전송.
@app.post("/cctv")
async def cctv(request: Request):
global ForwardData, boundary, recving
# client 에서 수신한 바운더리 값을 글로벌 변수로 저장한다.
boundary = request.headers.get('boundary')
# MJPEG 영상을 수신한다.
recving = True
async for chunk in request.stream():
ForwardData = chunk
recving = False
# 영상 수신 종료.
ForwardData=None
return {"result": "success"}
# 웹 view 용
@app.get("/cctv")
def cctvWeb():
#client 에서 수신한 boundary 정보와 MJPEG 영상을 스트리밍으로 송신한다.
global boundary
return StreamingResponse(getCameraStream(), media_type='multipart/x-mixed-replace; boundary={}'.format(boundary))
'개발' 카테고리의 다른 글
[Python] 프로세스 시스템 자원 측정 (0) | 2022.04.16 |
---|---|
[python] multiprocessing 사용법 (0) | 2022.04.02 |
[python] fastAPI 카메라 MJEPG 스트리밍 (0) | 2021.10.09 |
[python] fastAPI 입문 (0) | 2021.10.08 |
[python] PyQt5 UI 프로그램 개발 환경 구성하기 (0) | 2021.06.08 |