Multimedia/GStreamer

GStreamer pwg: ch. 18 clock

Roien 2021. 12. 22.
반응형

 

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 > GStreamer' 카테고리의 다른 글

GStreamer pwg: ch 13 part 2  (0) 2021.12.22
GStreamer pwg: ch. 14  (0) 2021.12.22
GStreamer pwg: ch. 15  (0) 2021.12.22
GStreamer pwg: ch. 16  (0) 2021.12.22
GStreamer pwg: ch. 17  (0) 2021.12.22

댓글