【VLC核心二】clock管理流程

  • 时间:
  • 浏览:0
  • 来源:彩神11选5_神彩11选5官方



1、live555::CmdExecuteControl(ES_OUT_SET_PCR,p_sys->i_pcr+1)

一、前言

a、判断当前流时戳与上一帧时戳差值不是 大于MAX_GAP,可能性大于MAX_GAP,说明收到的帧可能性跳变过大,则重置clock值ResetClock。(MAX_GAP宏的值为80s,都都可否调整宏代码,此值过大,应该调整为1s以内,若果 在回放拖动时有bug,后续文章详解);

二、涉及的类文件

a、每次es_out.c中SET_PCR中调用EsOutDecodersStopBuffering 可能性是缓冲具体情况, 判断不是 缓冲完?

a、拼帧完成后送SteamRead,SteamRead中的处理

三、clock核心点备注

clock管理是vlc播放音视频的重要帕累托图,从live555收流到decoder解码到render渲染,整个播放过程中均需依赖clock机制。

clock中i_cr_average=配置文件中读取默认40ms * i_pts_delay / DEFAULT_PTS_DELAY;

DEFAULT_PTS_DELAY = 3*CLOCK_FREQ/10


d、可能性晚了,在es_out.c中,调用clock::input_clock_GetJitter统计抖动,并调用clock:: input_clock_Reset和input_clock_SetJitter重置clock,重新调节计算漂移的参数。原本就都都可否重新缓存待解码的数据。

c、计算当前帧不是 来晚了

5、clock在live555收流拼帧帕累托图相关工作

3、当准备收流或回放拖动时,会触发设置PCR动作,对应ES_OUT_SET_PCR,继而调用clock::input_clock_Update(i_pcr, mdate()),更新clock机制,其核心处理如下

src\input\clock.c

b、每隔20ms调用AvgUpdate计算一次 stream clock 和system clock间的漂移;

2、clock中i_cr_average值的来源

注:p_sys->i_pcr+1作为input_clock_Update的i_ck_stream参数传入。p_sys->i_pcr在live555的StreamRead函数中赋值

src\input\decoder.c

src\input\es_out.c

四、核心流程时序图

b、input_DecoderWaitBuffering缓冲完通知decoder模块。解码模块队列中循环解码,可参考文章《【VLC核心一】播放流程梳理》

modules\access\live555.cpp

4、缓存数据的核心流程

src\input\input.c