2019 네이버 DEVIEW

코덱이란? Codec (Coder + Decoder)

일반적으로 코덱이라고 하면 영상, 음향 등 미디어 정보를 압축하는 기술을 가리킨다.

코덱은 어떠한 데이터 스트림이나 신호에 대해, 인코딩이나 디코딩, 혹은 둘 다를 할 수 있는 하드웨어나 소프트웨어를 일컫는다.

그리고 이를 위한 알고리즘을 가리키는 용어로도 쓰인다.

 

손실코덱과 비손실 코덱

1 손실 코덱 

- 영상이나 음향 정보는 시공간적 연관성에 의해서 지각되기 때문에, 개별 데이터에 대하여 오차가 있더라도 문제가 없는 경우가 많다. 이에 따라 사람이 잘 느끼지 못하는 부분을 우선적으로 손실시켜 압축률을 크게 올리는 기술이 적용된다. 대부분의 유명한 비디오/오디오 코덱들이 손실 코덱을 사용한다.

2 비손실 코덱

- 압축된 데이터가 원본 스트림에 존재하는 모든 정보를 보유하고 있는 코덱을 비손실 코덱이라고 한다.

3 무압축

- 디지털 데이터가 다른 코덱 등을 거치지 않고 저장되고 변환되는 경우이다. RAW DATA라고 불린다.

 

인코딩과 디코딩 (Encoding & Decoding) (부호화 & 복호화)

압축 인코딩을 Coder

압축푸는 디코딩 Decoder 

 

Error 지원가능한 코덱이 없습니다.

컴퓨터에 압축된 비디오 파일은 있는데, 컴퓨터에 그 파일을 열 수 있는 디코더가 없을 때, 

해당하는 영상파일은 지원하는 코덱이 없다는 에러메세지가 뜬다.

 

Solution 1

- 컴퓨터에 있는 디코더에 맞게 파일을 변환

Solution 2

- 파일에 맞는 디코더를 찾아 다운로드

 

압축된 영상 파일을 다른 압축된 방식으로 변환하는 과정을 TransCoding 이라고 한다.

Transcoding = Encoding, 트랜스코딩 과정을 인코딩이라고 하기도 한다. 

트랜스코딩 해주는 프로그램을 인코더(Encoder)라고 부른다.

 

아래는 데이터압축 소프퉤어 정보이다. 

동영상 파일종류 (파일 확장자를 컨테이너라고 부른다.)

1 MP4 (MPEG-4) (Moving Picture Experts Group 4)

보통 H.264 나 H.265가 담겨있다.

가장 보편적인 비디오 컨테이너다.

1. ISO / IEA의 동영상 압축 표준 규격 파일 포맷

ISO(국제표준화기구), IEA(국제에너지기구)

2. 확장자는 .mp4

3. 호환성이 좋다. (H.264 코덱과 호환), 고품질

4. H265 코덱은 고화질, 고압축, 렌더링에 많은 시간이 걸린다.

* 렌더링이란 사람이 인지 가능한 영상으로 변환하는 과정이다.

 

2 MOV (MOVIE)

애플에서 만든 돈영상 형식, 맥에서 잘 작동하고 작동이 안되면 인코딩(코덱변환)이 필요하다. 고화질이다.

비압축부터 시작해서 HEVC까지 엄청나게 다양한 비디오 코덱을 담을 수 있다.

파일확장자만 보고 얘가 ProRes다 H.264다 판별할 수는 없지만, 대부분 ProRes라고 한다.

 

3 AVI (Audio Video Interleave)

MS사에서 만든 동영상 형식인데 비디오 오디오를 따로 압출,구식 파일 

현재는 파일이 대용량이라서 사용이 잘 안되고 있다.

 

4 WMV

MS사에서 만든 동영상으로 압축률이 좋다. 윈도우 환경에선 실행 잘되지만, 압축은 잘 되지만

호환성이 안 좋아서 잘 사용되고 있지 않다고 한다.

 

5 MKV (Matroska Video) (러시아 전통인형)

다른 컨테이너와 다르게 오디오,비디오 뿐만 아니라 자막파일까지 한 번에 담을 수 있다.

이것도 오픈소스이고 영화베포용으로 사용한다고 한다. 

 

코덱 종류 (코덱 = 비디오를 압축하는 방법)

일단 코덱의 종류가 다양한 이유는 원하는 품질이 다 다르고, 원하는 용량이 다르기 때문에

다양한 브랜드, 다양한 용도, 다양한 목적의 코덱들이 탄생하게 되었다.

H.264 (MPEG-4/AVC)

원본 대비 비디오를 약 1/200 정도 압축시켜주는 효율이 굉장히 좋은 코덱이다. 

 

H.265 (High Efficiency Video Coding)

 

MPEG-2

 

ProRes

 

DNxHD

'Tech Blog > TCP-IP' 카테고리의 다른 글

비트레이트 (Bitrate)  (0) 2023.02.18
미디어 프로토콜 정리 글  (0) 2023.02.08
IPC란 ? (Inter-Process Communication)  (0) 2023.01.30
3way HandShaking, 4way HandShaking  (0) 2023.01.30
TCP IP의 I/O 모델 (Linux & Windows)  (0) 2023.01.29

문자열 인코딩 (Literal Encdoing)이란?

- 사람의 신호를 바이너리 코드로 바꿔주는 것을 문자열 인코딩(Encoding)이다.

반대로 디코딩(Decoding)이란 바이너리 코드를 사람의 신호로 바꿔주는 것이다.

ASCII 코드  (American Standard Code for Information Interchange)

최초의 문자열 인코디이다. 7bit로 구성되어 있으며, 영어를 위한 문자를 표현할 수있다. 128개 문자를 표현할 수 있다.

이후 다른 언어를 지원해야할 필요가 생겨 만들어진 인코딩이 ANSI 이다.

 

ANSI 코드 (American National Standard Institute)

ANSI는 8bit로 구성되어 있으며 ASCII의 확장판이며 아스키보다 1비트를 더 사용한다.

앞의 7비트는 아스키와 동일하고, 뒤에 1비트를 이용하여 다른 언어의 문자를 표현한다.

ANSI = ASCII(7bit) + CodePage(1bit)

 

MBCS (Multi Bytes Characters Set) 

MS(MicroSoft)에서 만든 인코딩 방식이라고 한다.

그냥 유니코드랑 같다고 보면 됨.

EUC-KR (Extended Unix Code-Korea)

8비트 문자인코딩 한글 완성형 인코딩이다. 

확장 유닉스 코드(Extended Unix Code, EUC)란 한국어, 중국어, 일본어 문자 전산화에 주로 사용되는 8비트 문자 인코딩 방식이다.

EUC의 구조는 ISO 2022 표준에 기반하고 있다.

Unicode ( UTF-8, UTF-16 등)

UTF-8(Universal Coded Character Set + Transformation FOrmat - 8-bit) = Unicode(3바이트) + ASCII(1바이트) 

유니코드를 위한 가변길이 문자 인코딩 방식 중 하나이다.

UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용한다. 

ASCII문자들은 1바이트만으로 표시된다. 4바이트로 표현되는 문자는 모두 기본 다국어평면(BMP) 바깥의 유니코드 문자이며,

거의 사용 되지 않는다.

영문이면 1바이트, 영문 이외의 것들(한글 등)한그은 3바이트 표기 

 

'널'이라는 한글은 유니코드로 B110 이다.

 

예를들면 한글 '널' 인 경우 UTF8: 235,132,144; 를 참조하여

각 숫자를 16진수로 바꾼다.

결론적으로 UTF 체계로 

EB 84 90 으로 매핑된다. 

 

따라서 첫 128 문자는 1바이트로 표시되고, 그 다음 1920 문자는 2바이트로 표시되며, 나머지 문자들 중 BMP 안에 들어 있는 것은 3바이트, 아닌 것은 4바이트로 표시된다.

 

UTF-8 인코딩 방식으로 100만개 이상의 문자를 인코딩할 수 있다고 한다.

Unicode allows for 17 planes, each of 65,536 possible characters (or 'code points'). This gives a total of 1,114,112 possible characters. At present, only about 10% of this space has been allocated.

 

Plane (Unicode) - Wikipedia

From Wikipedia, the free encyclopedia Continuous group of 65536 Unicode code points In the Unicode standard, a plane is a continuous group of 65,536 (216) code points. There are 17 planes, identified by the numbers 0 to 16, which corresponds with the possi

en.wikipedia.org

UTF-8(BOM)

맨 앞에 EF BB BF 가 붙어서 나오는데 UTF를 사용한다는 의미이다.

예를 들어 문자열 인코딩을 UTF-8(BOM)으로 했는데 UTF-8로 해석하면

앞에 3바이트는 깨져서 나올 것이다. 

 

UTF-16 (리틀엔디안이야? 빅엔디안이야?가 추가 된다.)

마찬가지로 가변너비 인코딩 형식이다.

빅엔디안 방식으로

'널'이라는 한글을 UTF-16으로 인코딩하면 

FF B1 10

리틀엔디안 방식으로

'널'이라는 한글을 UTF-16으로 인코딩하면

FF 10 B1 으로 읽는다. 

 

URL 인코딩 

URL 파라미터에 문자열을 넣어서 서버에 전송할 수 있다.

ex ) google.com/search?q=검색어(Channel 알코)

google.com/search?q=Channel%20%EC%96%84%EC%BD%94 이렇게 나오는데,

약속된 방식으로 UTF-8로 치환한다. 

퍼센트 인코딩이라고도 한다. 

 

결론 유니코드는 국제표준 문자표이고 UTF-8은 인코딩 방식이다. 

 

도움을 받은 링크

https://home.unicode.org/

 

Home

 

home.unicode.org

https://codingboycc.tistory.com/manage/newpost/112?type=post&returnURL=https%3A%2F%2Fcodingboycc.tistory.com%2Fmanage%2Fposts%2F

 

https://codingboycc.tistory.com/manage/newpost/112?returnURL=https%3A%2F%2Fcodingboycc.tistory.com%2Fmanage%2Fposts%2F&type=post

 

codingboycc.tistory.com

https://jjeong.tistory.com/696

 

유니코드(UTF-8) 한글 코드표, 한글코드 범위 {AC00-D7AF}

유니코드(UTF-8) 한글 코드표, 한글코드 범위 {AC00-D7AF} U+AC00 to U+AD00 0 1 2 3 4 5 6 7 8 9 A B C D E F UTF8: 234, 176, 128; UNICODE: AC0 가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 UTF8: 234, 176, 144; UNICODE: AC1 감

jjeong.tistory.com

 

RSTP 이전 - 다운로드 후 비디오 재생만 가능했다. 흔히 우리가 예전에 사용하던 토렌트 방식을 생각하면 될 것이다. 

 

RTSP(Rapid Time Streaming Protocol) - 중간에 타임라인만 찍기만 하면 영상이 나오지 않을까? 하고 나온게 RSTP이다. 아직도 CCTV 이런 곳에서는 이 프로토콜을 사용한다. 오래된 프로토콜이라서 요즘엔 잘 사용하지 않음.

 

RTMP(Real Time Messaging Protocol) 미디어매크로에서 만든 프로토콜. 2009년에 만들어진 프로토콜. 현재도 가장 많이 사용되는 프로토콜이다. (유튜브, 어도비 플래시, 아프리카티비,페이스북 등이 사용) 

최신 비디오 코덱 지원 X, 보안문제 있음, 암호전송 X

 

SRT(Secure Reliable Transport Protocol) - 암호화 된 전송 가능, 범용성, 호환성이 떨어진다.

하이비전이라는 단일회사에서 SRT 개발 중. 현재 방송사에서 SNG (위성전송)을 대체할 용도로도 생각한다고 함. 2012년 첫 출시, 2017년 완전 공개 프로토콜로 출시.

 

HLS (Http Live Streaming) 애플에서 개발한 HTTP 기반 스트리밍 프로토콜로 QuickTime, OSX, iOS, Safari 등에서 사용하며 줄여서 HLS라고 부른다. 표준화를 목표로 개발한 기술로 RFC8216으로 등록되어 있다. 

 

아래는 프로토콜 별 TCP 기반인지 UDP 기반인지 알아볼 수 있는 표이다.

출처 : https://www.muvi.com/blogs/udp-vs-tcp-which-one-is-better-for-streaming.html

 

아래는 회사별 사용하고 있는 프로토콜을 정리한 사진이다.

 

아프리카티비 : RTMP + HLS

네이버티비, V LIVE : HLS, DASH

트위치 : HLS (이전에는 RTMP)

유튜브 : MPEG-DASH (RTMP인 걸로 아는데 확실히는 모르겠다.)

넷플릭스 : MPEG-DASH

토라테레비 : HLS

Abema TV : HLS + DASH

 

출처 : https://www.youtube.com/watch?v=6t6Si0BWCOo&ab_channel=%EC%9B%B9%ED%88%B0FE

+ Recent posts