카메라 ▶ Encoder(인코더) ▶ Media Server(+CDN Server) ▶ 동영상 플레이어 ▶ 시청자(Client)
압축되지 않는 동영상은 무지막지하게 용량이 크기 때문에 그대로 작업하면 편집, 보관, 전송, 배포를 하는데 시간 및 비용 측면에서 낭비가 크다. 따라서 큰 용량의 영상을 압축하는 과정이 필요한데, 이 과정에서 코덱을 활용하여 다양한 방식으로 영상 압축을 한다
Encoding(인코딩)이란?
컴퓨터를 이용하여 영상, 이미지 또는 소리 데이터를 생성할 때, 원래의 데이터양을 줄이기 위하여 데이터를 코드화하고 압축하는 것. 저장하는 방법에 따른 각각 코덱값이 설정되어 있고, 이러한 파일을 재생할 때에는 코드화된 내용을 원래의 정보로 변환하는 디코딩 작업을 한다.
대표적인 영상코덱에는 H.264 가 있으며, 음성코덱으로는 AAC가 있다
압축방식
📌 JPEG : Joint Photographic Experts Group
JPEG의 경우 손실 압축형식을 사용합니다. 디테일 일부를 희생시켜 크기를 줄이는 방식인데요. 메모리 공간을 절약할 수 있고, 온라인 게시나 이메일 전송 등에 효율적으로 사용됩니다.
다시 말해 JPEG는 파일의 크기를 엄청나게 줄일 수 있는 슬라이딩 스케일(Sliding Scale) 압축 방식을 사용하여 메모리 공간을 절약할 수 있다는 장점이 있지만, 단점으로는 과하게 압축을 할 경우 부자연스러우며 확대를 할 경우에는 픽셀처럼 보이는 현상이 나타난다는 점을 꼽을 수 있습니다.
📌PNG : Portable Network Graphics
PNG의 경우 무손실 압축을 사용합니다. 때문에 JPEG와는 다르게 이미지 디테일 손실이 없습니다. 결과적으로 JPEG형식보다 더 고품질 이미지를 생성하는 것입니다. 동시에, 고품질의 이미지를 생성한다는 것은 파일의 크기가 커진다는 것을 의미합니다. 따라서 무손실 압축 방식의 PNG로는 고품질의 이미지를 생성할 수 있지만 상대적으로 많은 메모리를 사용하게 됩니다.
최근에는 네트워크 및 스토리지 기술의 발전으로 압축 없이도 원하는 작업을 수행할 수 있기 때문에, JPEG보다는 PNG가 온라인에서 많이 사용하는 이미지의 형태로 자리잡고 있습니다.
넷플릭스에서 영화를 보는데 영화 전체를 다운로드 받고 난 뒤에 즉, 2GB 가량의 영상을 전부 다운 받은 후 영화가 재생된다면 느려서 속이 터질지도 모른다. 실제 넷플릭스는 그렇지 않다. 다운로드와 동시에 바로 재생이 되며, 추가 다운로드가 계속 진행되는 방식을 스트리밍이라고 하며, 이러한 스트리밍의 규칙을 스트리밍 프로토콜이라고 한다.
대표적인 스트리밍 프로토콜의 예시
Encoder : RTMP,RTSP,webRTC,SRT
Player : HLS,DASH,LL-HLS,webRTC,SRT
스트리밍의 효율적인 동작을 위해서는 파일을 작은 단위로 분할해야 한다.
이 과정은 HLS나 DASH로 거친다
안정적인 송출을 위해서는 충분한 인터넷 업로드, 대역폭이 확보되어야 한다. 따라서 Bitrate를 변환하는 작업도 필수적으로 필요하다.
비트레이트(Bitrate)?
특정한 시간 단위(이를테면 초 단위)마다 처리하는 비트의 수를 뜻합니다.
멀티비트레이트(Multi Bitrate)?
비디오 플레이어에서 보여지는 화질 선택 기능과 밀접하게 관련이 있습니다. 멀티비트레이트는 비트레이트가 다른 여러 개의 영상을 준비하여 필요에 따라 영상을 전환하는 방식이나 기술을 뜻합니다.
뿐만 아니라 해상도에 따라서 평균적으로 필요한 비트는 달라지게 되는데, Bitrate가 높을수록 동영상은 더 많은 비트를 가지게 되고, 화질은 좋아지지만 그만큼 용량은 커진다. 따라서 Bitrate별로 여러 개의 동영상 셋을 준비해서 제공한다
실시간으로 생성한 HLS 및DASH 영상 조각 파일을 사용자에게 전달하려면 전송 서버가 있어야한다. 일반적인 미디어 서버는 전송 서버의 역할까지 수행하지만, 동시 시청자가 많은 방송일 경우에는 대규모 트래픽을 안정적으로 처리하기 위해 CDN을 사용하는 것을 권장한다.