Vlc部分功能

本文详细解析VLC播放器的解码线程和渲染线程的工作流程,包括利用ffmpeg解码、 PTS时间戳修正、解码与渲染线程间的同步,以及缓冲策略。通过解码线程获取显示时间、输入时钟转换和PTS延迟调整等关键步骤,展示了VLC如何处理TS流并确保流畅播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Vlc部分功能流程图

block_FifoGet

获取编码的block

DecoderProcess

Decoder thread

 

DecoderProcessVideo

packetizer_Packetize将接受到的block进行packet组装为一个完整的NAL

DecoderDecodeVideo

使用ffmpeg解码

DecodeVideo

判断当前packet是否过期需要丢弃,无需解码

填充AVPacket,解码avcodec_decode_video2

Compute the PTSStream pts转换为system pts,并加上缓冲延时时间。判断当前帧是否已经滞后,并记统计滞后数目。解码下一帧时根据滞后标记,决定解码还是直接丢弃。更新p_pic->date =i_pts

DecoderPlayVideo stream ptssystem pts的转换,加上缓冲时间延迟。display thread会用于判断显示

Display thread

ThreadDisplayPicture

ThreadDisplayPreparePicture

ThreadDisplayRenderPicture

picture_fifo_Pop获取解码过的picture

根据decoded->date与当前系统时间相减,若超过20ms直接丢弃,若不到则显示并打印提示滞后时间。

decodedpicture赋值vout->p->displayed.decoded       = picture_Hold(decoded);

current为空则直接赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值