PAG动效框架源码笔记 (三)播放流程

By | 2023年5月19日

转载请注明出处:http://www.olinone.com/

PAG框架支持单PAGView同时渲染多个PAGFile,相较于渲染单一文件,框架首先需要解决多文件渲染同步问题

1、多文件渲染帧率同步

多文件有着不同的帧率(FPS) ,为了实现同一容器渲染不同帧率文件,传统的基于定时器模式(定时回调,间隔与帧率同步)的回调已无法满足该场景

2、多文件渲染进度同步

多文件渲染需要避免多图层渲染进度不一致问题;为了保证播放流畅度,通常会在子线程解码视频帧,当渲染多视频图层时,如何保证多解码线程下的帧同步?

3、多文件播放区间控制

PAG支持File自定义显示区间,每个File文件时长也不一致,如何控制不同文件的播放区间?

播放进度

 

 

 

 

 

PAG没有采用类似于CMTime帧数的方式记录播放进度,而是通过时长百分比记录各层级播放进度,从而实现不同帧率(FPS)文件的进度同步

采用时长百分比记录进度会导致flush绘制重复帧,为了解决性能问题,PAG引入了LayerCache角色,当重复绘制同一帧时可以直接使用缓存数据

PAG信号源PAGValueAnimator通过绝对时间差值计算播放进度,多个PAGView共用一个全局信号触发器

播放流程

1、信号触发

2、更新播放进度

3、触发渲染

4、图形解码(以视频帧为例)

5、渲染图形

总结

为了优化播放体验,PAG使用了多种性能优化策略,包括提前预解码、渲染帧复用、GPU优化等等

PAG应用框架层主要负责上层业务逻辑处理,包括文件视频解码、播放流程控制以及生成渲染引擎所需要的数据源等,接下来将结合OpenGL讲解TGFX渲染引擎部分

2 thoughts on “PAG动效框架源码笔记 (三)播放流程

  1. 匿名

    博主讲解的非常透彻,特别解码这块,之前看了好久,现在终于懂了

    Reply

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注