IT/서버

영상 스트리밍 : rtmp와 ffmpeg 그리고 hls

thesse 2021. 9. 16. 02:54
300x250
반응형

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 프로토콜 이용)

 

https://www.keycdn.com/support/publishing-an-http-live-stream

위 도표에서 중간에 wowza 자리에 nginx rtmp 모듈이 들어감

 

 

 

참고

hls 세미나 https://youtu.be/6t6Si0BWCOo

코덱 설명 https://youtu.be/AXUZXBYdRc0

+ 대리님 설명

300x250
반응형