VLC

  1. 基本概念:
    I帧、p帧、b帧、DTS、PTS、
    抖动jitter、
    音视频同步:stream clock、system clock、pcr(参考时钟)
    时钟同步:drift

  2. 播放流程:
    input->Demux->audio FIFO->Decoder->DirectSound
    ————–Video FIFO->Decoder->Pic FIFO->DirectShow

access访问:接受获取->内存缓冲
demux解吗:input_decoderdecode->vlc_fifo_QueueUnlocked
es_out.c:创建音视频两个解码器
decode解码:vlc_fifo_DequeueUnlocked->DecoderDecode->
avcodec/video.c->DecodeVideo->vout_putPicture->picture_fifo_push
vlc_fifo_QueueUnlocked->DecoderDecode->avcodec/audio.c->DecodeAudio->aout_decplay
output输出:aout直接播放decoderplayaudio;
vout送入缓存
丢帧策略:以音频为基准,来一帧播放一帧;延时超过500ms,如果缓存有多余的帧,就丢掉一些;视频:比音频快慢20ms就丢(不能丢关键帧..)

  1. 常见问题:
    a. 直播延时:
    启动延时: 进程初始化,如cpu探测、加载组件等;控制协议,如rtsp协议交互时间;关键帧的位置;

    预读取的流太多,等待时间太长,可以通过修改p_sys->ic->probesize、max_analyze_duration来减少
    

    播放延时:网络延时;网络抖动;乱序;丢包;缓存;音视频同步(累积延时);

    音频播放延时的处理函数为aout_decsynchronize
    

    b. 马赛克:由于gop中的p帧丢失,导致部分连续新鲜丢失;h264解码的时候会根据前面的参考帧来补齐,从而造成马赛克现象。
    c. 卡顿:如果I帧丢失,就没法显示一个GOP内的所有帧,而I帧周期较长,所以会导致下一个I帧到来之前画面静止不动。
    丢帧策略-> threaddisplaypreparepicture里,即使“too late to be displayed”,也是隔一帧才丢一帧,不连续丢。
    d. 裁减:减少flash占用、加快vlc初始化、减少内存占用

  2. 历史故障:
    a. 某地长城宽带用户无法播放xx摄像头的直播流,问题原因:
    b. 用户app在局域网内无法播放直播流,更换家庭网关则正常

  1. VLC启动流程
    libvlc_InternalInit(): log初始化、注册组件、
    avcodec_skip_frame:跳侦的作用?
    avcodec_skip_idct:
Contents
,