Overview
AVSampleBufferDisplayLayer
근데 네트워크로 받으니 처음부터 CMSampleBuffer 형태가 아니다. 그래서 가공을 해야한다.
H.264 스트림 심층 분석
두 패키징 방법의 차이
매개변수 집합
Elementary Stream Packaging은 스트림에 매개변수 집합이 포함된다.
MPEG-4 Packaging은 매개변수 집합을 별도의 구조체인 CMVideoFormatDescription에 담아놓는다.
Elemetary Stream을 MPEG-4로 바꾸려면 매개변수 집합을 CMVideoFormatDescription으로 바꿔야한다.
CMVideoFormatDescriptionCreateFromH264ParameterSets
NAL Unit 헤더
AVSampleBufferDisplayLayer와 시간
hostTime은 통제할 수 없기 때문에 통제하기 위해서는 controlTimebase 프로퍼티를 사용할 수 있다.
let layer = AVSampleBufferDisplayLayer()
layer.controlTimebase = try .init(sourceClock: .hostTimeClock)
try layer.controlTimebase?.setTime(.init(value: 5, timescale: 1))
try layer.controlTimebase?.setRate(1.0)
AVSampleBufferDisplayLayer에 CMSampleBuffer 제공하기
저지연 라이브 스트리밍이나 화상회의 같이 동일한 주기로 계속 프레임을 받는 경우
이 때는 그냥 오는 대로 넣어주면 된다.
layer.enque(sampleBuffer)