2021. 10. 11. 12:56ㆍMultimedia
- 목차
18. Clocking
sound와 video가 특정 시간에 특정 순서로 재생 되어야 함
제공되는 synchronization mechanism임
18.1. Clocks
gst_clock_get_time을 통한 GstClock 객체로부터의 리턴 값이 Time
time sources
종류
n system time
n soundcards
n CPU performance counters
n etc.
종류별 GstClock 구현들이 존재
값
n 0부터 시작하는 경우, start date로부터 시작하는 경우 reboot 이후의 counting 등 다양함
absolute vs. difference
absolute
n 절대 시간 측정 값
differences
n 두 clock time의 difference
s elapse time 측정 등에 사용
18.2. Clock running-time
absolute time
n gst_clock_get_time()
n running-time
s base-time (이전 snapshot absolut-time)으로부터의 차이
s running time = absolute time - base ime
GstPipeline은
n PLAYING state로 진입하면 GstClock과 base-time 을 유지
n 각 element는
s 선택된 GstClock handle에 대한 base-time을 따르는 각 element에 제공
s running-time은 PLAYTING state에서 소비된 총 시간을 반영
s pipeline이 PAUSED 될 시, running-time은 유지됨
pieline 내 모든 객체들은 같은 clock과 base-time을 가짐
모두 running-time을 pipeline clock에 따라 계산할 수 있음
18.3. Buffer running-time
buffer running time 계산
buffer timestamp와 buffer에 앞선 SEGMENT event가 필요
단계
n SEGMENT event를 GstSegment로 바꾸고 gst_segment_to_running_time 호출하여 계산
동기화
n 특정 running-time의 buffer는 clock이 같은 running-time에 도달 했을 시 재생 되어야 함
n 보통 sink element가 처리
s pipeline clock의 동기화 전에 sink는 pipeline 내 설정된 latency를 고려하여 buffer running-time에 추가
18.4. Obligations of each element
18.4.1. Non-live source elements
non-live는 반드시 timestamp를 buffer에 위치 시켜야 함
time stamp와 SEGMENT event를 선택해야 함
n buffer의 running-time은 0부터 시작하는 것으로 함
filesrc같은 몇몇 source들이 buffer에 timestamp를 생성할 수 있음
최초 buffer에는 running-time 0의 timestamp를 생성해야 함
이후 source는 SEGMENT event를 push하고 timestamped buffer를 push
18.4.2. Live source elements
live source는 각 buffer에 timestamp를 넣어야 함
buffer의 running-time 기준으로 timestamp와 SEGMENT event를 선택해야 함
buffer의 최초 byte가 얻어졌을 시 buffer의 running time은 pipeline clock의 running-time과 완벽히 일치해야 함
18.4.3. parser/decoder/encoder elements
incoming timestamp를 사용하고 output buffer로서 이를 전송
missing input buffer의 timestamp에 대한 interpolate 및 reconstruct가 하용되긴 함
18.4.4. demuxer elements
demuxer
n media file 내 저장된 timestamp를 outgoing buffer에 설정함
s buffer 상에 incoming timestamp도 고려하여 outgoing buffer의 timetamp 계산에 사용
n 동일 running-time에 outgoing buffer가 재생되길 원함
18.4.5. muxer element
incoming buffer running-time을 가지고 여러 stream을 함께 mux
incoming running-time을 outgoing buffer에 copy해야함
18.4.6. sink elements
element가 특정 시간 (real time playing)에 sample을 내뱉기를 원한다면,
element는 clock을 요구할 것임
즉, set_clock을 구현함
sink는 running-time을 가진 sample이 pipeline clock이 running-time + latency일 때 정확히 재생 될 수 있도록 해야함
clock API인 gst_clock_id_wait()을 사용하여 timing을 맞추기도 함
다른 방법을 사용해야 하기도 함
'Multimedia' 카테고리의 다른 글
ExoPlayer 동작 분석 (prepare) (0) | 2021.11.14 |
---|---|
GStreamer pwg: ch. 19 QoS (0) | 2021.10.11 |
GStreamer pwg: ch. 17 (0) | 2021.10.11 |
GStreamer pwg: ch. 16 (0) | 2021.10.11 |
GStreamer pwg: ch. 15 (0) | 2021.10.11 |