| 코덱 | 압축 효율 (데이터 크기) | 지연 시간 (Latency) | 구현 난이도 | 배터리 소모 |
|---|---|---|---|---|
| MJPEG | 나쁨 | 아주 짧음 | 아주 쉬움 | 보통 |
| H.264 | 좋음 | 짧음 (인코딩 필요) | 어려움 | 좋음 (HW 가속) |
| H.265 (HEVC) | 아주 좋음 | 약간 긺 | 어려움 | 나쁨 (발열 가능성) |
MJPEG: UIImage를 JPEG 데이터로 바꿔서 계속 전송하는 방식.
데이터 압축률이 나쁘기 때문에 1080p 화질 사진 한 장이 300KB정도라 하면 30fps로만 전송해도 초당 9MB가 된다.
H.264(AVC): 앞뒤 프레임의 변화만 계산해서 보내는 방식.
MJPEG에 비해 데이터 양이 1/10 이하로 줄어들 수 있다.
H.265(HEVC)
H.264에 비해 압축률이 2배 더 좋지만 연산량이 많다. 4K 영상을 보낼 때 유리하다.
하드웨어 인코더 및 디코더에 직접 접근할 수 있도록 해주는 저수준 프레임워크. 비디오 압축 및 해제, 이미지 형식 간 변환 서비스를 제공한다.
YUV(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange): 빛의 3원색 대신 영상 압축에 사용되는 방식. 인간의 눈이 밝기에 민감하고, 상대적으로 색상에 둔감한 것을 이용해 색상 정보를 반으로 줄여 용량을 아낀다. Y가 밝기, UV가 색상을 의미한다.
카메라 기본 출력은 YUV(Bi-Planar)이다.
AVCC (AVC Configuration): VideoToolbox의 기본 값.
[길이(4byte)] + [데이터(NAL Unit)]
Annex B: 네트워크 스트리밍 표준.
[시작코드(0x000000001)] + [데이터(NAL Unit)]
데이터가 일부 깨지거나 유실되어도 시작 코드를 기준으로 복구할 수 있다.
AVCC에는 SPS/PPS를 스트림 데이터에 보관하지 않고 CMSampleBuffer의 CMVideoFormatDescription 공간에 따로 저장한다.
한편 Annex B 포맷에서는 스트림 데이터의 가장 앞에 SPS/PPS를 같이 묶어서 보낸다.