GStreamer pwg: ch. 18 clock

2021. 10. 11. 12:56Multimedia

    목차
반응형

 

18.     Clocking

 

soundvideo가 특정 시간에 특정 순서로 재생 되어야 함

제공되는 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 timedifference

            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로 진입하면 GstClockbase-time 을 유지

    n  element

        s   선택된 GstClock handle에 대한 base-time을 따르는 각 element에 제공

        s   running-timePLAYTING state에서 소비된 총 시간을 반영

        s   pipelinePAUSED 될 시, running-time은 유지됨

 

pieline 내 모든 객체들은 같은 clockbase-time을 가짐

모두 running-timepipeline clock에 따라 계산할 수 있음

 

 

18.3.     Buffer running-time

buffer running time 계산

    Ÿ   buffer timestampbuffer에 앞선 SEGMENT event가 필요

    Ÿ   단계

        n  SEGMENT eventGstSegment로 바꾸고 gst_segment_to_running_time 호출하여 계산

    Ÿ   동기화

        n  특정 running-timebufferclock이 같은 running-time에 도달 했을 시 재생 되어야 함

        n  보통 sink element가 처리

            s   pipeline clock의 동기화 전에 sinkpipeline 내 설정된 latency를 고려하여 buffer running-time에 추가

 

 

18.4.     Obligations of each element

 

18.4.1.        Non-live source elements

 

Ÿ   non-live는 반드시 timestampbuffer에 위치 시켜야 함

Ÿ   time stampSEGMENT event를 선택해야 함

    n  bufferrunning-time0부터 시작하는 것으로 함

 

filesrc같은 몇몇 source들이 buffertimestamp를 생성할 수 있음

최초 buffer에는 running-time 0timestamp를 생성해야 함

이후 sourceSEGMENT event push하고 timestamped buffer push

 

 

18.4.2.        Live source elements

live source는 각 buffertimestamp를 넣어야 함

bufferrunning-time 기준으로 timestampSEGMENT event를 선택해야 함

buffer의 최초 byte가 얻어졌을 시 bufferrunning timepipeline clockrunning-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 내 저장된 timestampoutgoing buffer에 설정함

        s   buffer 상에 incoming timestamp도 고려하여 outgoing buffertimetamp 계산에 사용

    n  동일 running-timeoutgoing buffer가 재생되길 원함

 

18.4.5.        muxer element

 

Ÿ   incoming buffer running-time을 가지고 여러 stream을 함께 mux

Ÿ   incoming running-time outgoing buffercopy해야함

 

 

18.4.6.        sink elements

 

element가 특정 시간 (real time playing)sample을 내뱉기를 원한다면,

elementclock을 요구할 것임

, set_clock을 구현함

 

sink는 running-time을 가진 sample이 pipeline clock이 running-time + latency일 때 정확히 재생 될 수 있도록 해야함

clock APIgst_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