HLS (HTTP Live Streaming)
HLS : http 기반 스트리밍 프로토콜
하나의 긴 영상파일을 일정한 구간별로 작게 잘라 ts파일로 만들어 하나씩 전송
이때 ts파일들의 메타정보를 가지고 있는 m3u8을 함께 제공
클라이언트는 m3u8 파일을 참고하여 전송받은 ts파일을 순차적으로 재생시킴
→ 전체 영상을 모두 받지 않아도 바로 영상 재생이 가능
* 유사 프로토콜 : mpeg-dash
FFmpeg : 코덱과 트랜스코딩
코덱 : 압축 알고리즘. Encoder와 Decoder를 둘 다 가지고 있거나 하나만 가지고 있음
- Encoder : 압축하는거
- Decoder : 압축한 걸 다시 푸는거
트랜스코딩 : 인코딩 형식을 변화시키는 것. flv 파일을 mp4 파일로 바꾸는 등
FFmpeg은 이를 제공하는 유틸리티 프로그램임.
처음엔 라이브러리로 제공했다가 예제로 제공되는 코드만 써도 충분해서 유틸리티로 나왔다고 함
* h264, vp8 등 코덱
* 컨테이너 : 동영상 파일의 포맷(확장자) 정보.
RTMP (Real Time Messaging Protocol)
RTMP : 실시간으로 데이터 전송하는 프로토콜
플래시 기반인 flv 포맷으로 전송하게 됨
미디어 서버에는 NGNIX-RTMP 모듈을 설치함
rtmp로 전송된 영상은 flv 형태로 서버에 떨어짐
이 영상을 웹브라우저에서 스트리밍으로 서비스하기 위해서는 ts 파일로 바꿔야 한다
플로우
obs에서 미디어 서버로 영상을 전송 (rtmp 프로토콜 이용)
미디어 서버(nginx)에서는 ffmpeg을 이용해 flv 파일을 ts파일로 트랜스코딩
- 이때 영상 사이즈를 변경하고(480, 720 등) 썸네일도 생성함
- 실시간 송출과 별도로 영상 녹화도 지원
요청이 들어오면 m3u8과 ts 파일을 전송함 (hls 프로토콜 이용)
위 도표에서 중간에 wowza 자리에 nginx rtmp 모듈이 들어감
참고
hls 세미나 https://youtu.be/6t6Si0BWCOo
코덱 설명 https://youtu.be/AXUZXBYdRc0
+ 대리님 설명
'IT > 서버' 카테고리의 다른 글
[nginx error] invalid port in url "...." (0) | 2022.03.03 |
---|---|
port 8080 was already in use (윈도우에서) (0) | 2021.10.28 |
PostgreSQL 세션 신규 연결시 에러 (FATAL: sorry, too many clients already) (0) | 2021.06.14 |
nginx에서 flask 앱 돌리기 위한 설정 (0) | 2021.06.08 |
gunicorn 서비스로 등록하기 (0) | 2021.06.07 |