一种多媒体资源的统一路由加载方法及系统与流程

摘要: 本发明涉及计算机,尤其涉及一种多媒体资源的统一路由加载方法及系统。背景技术:1、随着移动互联网内容形态的日益丰富,android应用需要展示的媒体资源类型日趋多...
一种多媒体资源的统一路由加载方法及系统与流程

本发明涉及计算机,尤其涉及一种多媒体资源的统一路由加载方法及系统。

背景技术:

1、随着移动互联网内容形态的日益丰富,android应用需要展示的媒体资源类型日趋多元化,已从传统的静态图片扩展到动态图、矢量动画、特效动画以及透明视频等多种新型媒体格式。不同类型的多媒体资源依赖专属的渲染引擎与加载接口实现解释展示。目前行业内主流的多媒体加载方案多为分格式独立适配架构,但其存在以下缺陷:

2、(一)、调用分散,耦合度高。不同媒体格式由不同渲染引擎支持,业务代码需要分别引入并手动调用各自api,当需要切换某个资源的格式时,必须同步修改调用方代码,维护成本高;

3、(二)、格式模块强耦合,无法按需集成。现有方案通常在核心代码中静态引入所有格式模块,导致即使部分格式未被使用,其编译产物也会被打包进应用,造成安装包体积膨胀,影响应用安装与运行性能。

4、因此,亟需一种能够统一处理多种媒体格式,同时能够实现格式模块按需加载的技术方案。

技术实现思路

1、本发明所要解决的技术问题是:本发明提供一种多媒体资源的统一路由加载方法及系统,能够统一处理多种媒体格式、同时能够实现格式模块按需加载,提高多媒体资源的加载与渲染效率。

2、为了解决上述技术问题,本发明采用的技术方案为:

3、第一方面,本发明提供一种多媒体资源的统一路由加载方法,包括:

4、统一展示组件接收调用方传入的资源加载请求,所述资源加载请求携带多媒体资源的统一资源标识符与加载配置对象的适配规则,对所述统一资源标识符进行解析,得到多媒体资源的格式类型,所述统一展示组件内部预先构建有用于承载渲染内容的子视图;

5、根据所述格式类型执行加载策略,并在执行加载策略前清空所述子视图中存在的历史资源内容,当所述格式类型属于第一类格式时,调用glide对应接口执行加载,生成对应的drawable载体对象,当所述格式类型属于第二类格式时,通过反射机制动态创建与所述格式类型对应的加载工具类执行加载,生成对应的drawable载体对象;

6、获取所述drawable载体对象的当前资源内容、当前资源固定宽度与当前资源固定高度,基于所述适配规则对所述当前资源固定宽度与所述当前资源固定高度进行动态计算,得到布局参数,并将所述布局参数同步更新至所述子视图,得到更新后的子视图,将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示。

7、本发明的有益效果:通过统一展示组件实现多媒体资源的统一接入,调用方仅需传入携带多媒体资源的统一资源标识符以及加载配置对象的适配规则的资源加载请求,即可完整多媒体资源的统一加载展示,无需关心具体格式类型所对应的渲染引擎,无需进行业务代码的修改,降低业务耦合度,降低维护成本。根据格式类型执行差异化加载策略,对于属于第二类格式的格式类型,通过反射机制动态创建与格式类型对应的加载工具类执行加载,而非在核心代码中静态引入所有格式类型,使得在编译打包时,未被使用的格式类型不会被打包,避免所生成的drawable载体对象体积膨胀,实现格式模块按需加载。在执行加载策略前都会自动清空子视图存在的历史资源内容,确保每次加载均以干净的视图状态开始,防止上一次加载的内容短暂残留导致的视觉闪烁和内容混淆,提高加载与渲染效率,在进行渲染时,能够根据加载配置对象的适配规则实现动态渲染,灵活适配多样化的渲染需求,优化调用方的用户体验。

8、可选地,所述第一类格式包括静态图格式和动态图格式,所述第二类格式包括矢量动画格式、特效动画格式和透明视频格式。

9、可选地,所述通过反射机制动态创建与所述格式类型对应的加载工具类执行加载,生成对应的drawable载体对象包括:

10、根据所述格式类型和预设命名规则生成目标类名,通过反射机制中的类查询方法加载与所述目标类名对应的加载工具类,若加载成功,则调用无参构造函数实例化所述加载工具类,得到实例对象,通过所述实例对象执行加载,生成对应的drawable载体对象,并将所述实例对象存入全局缓存;

11、若加载失败,则将所述目标类名的加载工具类设置为空值,并向所述调用方触发加载失败回调,实现安全降级。

12、根据上述描述可知,通过预设命名规则生成目标类名,并通过反射机制实现与目标类名对应的加载工具类在运行时动态实例化,实现核心代码与各格式适配编译期解耦,避免所生成的drawable载体对象体积膨胀。同时采用全局缓存机制便于后续复用实例对象,避免频繁通过反射机制创建实例对象造成的性能损耗。在加载失败时,自动将目标类名的加载工具类设置为空值,触发加载失败回调,不崩溃,不抛异常,实现无感安全降级,提高稳定性。

13、可选地,所述通过所述实例对象执行加载,生成对应的drawable载体对象包括:

14、判断所述统一资源标识符的路径类型是否为本地资源路径,若是,则所述实例对象调用同步加载策略按照所述格式类型执行专属资源加载,生成对应的drawable载体对象,若否,则所述实例对象调用异步加载策略按照所述格式类型执行专属资源加载,生成对应的drawable载体对象;

15、判断所述drawable载体对象是否加载成功,若否,则通过自定义解码器将所述格式类型转换为第一类格式,调用异步加载策略回退调用glide对应接口执行加载,生成对应的drawable载体对象。

16、根据上述描述可知,根据统一资源标识符的路径类型采用差异化加载策略,对于本地资源路径采用同步加载策略,保证即时性,对于非本地资源路径,采用异步加载策略,避免阻塞主程序,防止页面卡顿,差异化加载策略兼顾了本地渲染速度与非本地加载流畅度。同时设置了加载失败后的兜底机制,调用异步加载策略回退调用glide对应接口执行加载,提高容错率,提升多媒体资源加载的成功率与场景兼容性。

17、可选地,所述适配规则包括子视图适配规则和资源内容适配规则,所述基于所述适配规则对所述当前资源固定宽度与所述当前资源固定高度进行动态计算,得到布局参数,并将所述布局参数同步更新至所述子视图,得到更新后的子视图,将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示包括:

18、当所述适配规则为子视图适配规则时,基于所述子视图适配规则对所述当前资源固定宽度与所述当前资源固定高度进行动态计算,当所述子视图适配规则为固定宽度自适应高度模式时,获取所述子视图的视图宽度,将所述视图宽度、所述当前资源固定宽度与所述当前资源固定高度输入自适应高度公式进行动态计算,得到与所述子视图对应的适配高度,将所述适配高度与所述视图宽度作为子视图的布局参数,并将所述布局参数同步更新所述子视图,得到更新后的子视图,将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示;

19、当所述子视图适配规则为固定高度自适应宽度模式时,获取所述子视图的视图高度,将所述视图高度、所述当前资源固定宽度与所述当前资源固定高度输入自适应宽度公式进行动态计算,得到与所述子视图对应的适配宽度,将所述适配宽度与所述视图高度作为所述子视图的布局参数,并将所述布局参数同步更新至所述子视图,得到更新后的子视图,将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示;

20、当子视图适配规则为资源原始尺寸模式时,获取当前设备的屏幕密度换算系数,将所述当前资源固定宽度与所述当前资源固定高度分别与所述屏幕密度换算系数相乘,得到最终宽度与最终高度,将所述最终宽度与最终高度作为布局参数,并将所述布局参数同步更新至所述子视图,得到更新后的子视图,将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示;

21、当所述适配规则为资源内容适配规则时,直接将所述子视图的视图高度与视图宽度作为布局参数,将原始的子视图作为更新后的子视图,根据所述资源内容适配规则将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示。

22、根据上述描述可知,将适配规则分为子视图适配规则与资源内容适配规则,其中子视图适配规则直接作用于子视图的布局参数,通过固定宽度自适应高度模式、固定高度自适应宽度模式以及资源原始尺寸模式,能够根据当前资源固定宽度、当前资源固定高度、子视图的视图高度、子视图的视图宽度动态计算出合理的布局参数并更新子视图,业务方无需编写屏幕适配代码,无需手动计算,即可实现当前资源内容与子视图之间的尺寸匹配,降低开发复杂度,同时实现适配多样化场景。且当采用资源原始尺寸模式时,结合当前设备的屏幕换算系数进行计算,确保当前资源内容在不同密度屏幕闪均以预期的物理尺寸呈现,避免因为密度换算不当导致的模糊和失真。

23、可选地,所述根据所述资源内容适配规则将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示包括:

24、当所述资源内容适配规则为矩阵变换模式时,获取所述调用方所提供的变换矩阵,基于所述变换矩阵将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示,所述变换矩阵包括x轴缩放分量、y轴缩放分量、x轴平移分量、y轴平移分量、x轴错切分量、y轴错切分量、x轴旋转分量、y轴旋转分量以及透视分量;

25、当所述资源内容适配规则为居中裁剪模式时,将更新后的子视图的布局参数与所述当前资源固定宽度和所述当前资源固定高度输入裁剪比例公式进行计算,得到最终裁剪比例,将所述当前资源固定宽度与所述当前资源固定高度按照所述最终裁剪比例进行裁剪,得到裁剪后的当前资源宽度与裁剪后的当前资源高度,将所述当前资源内容按照裁剪后的当前资源宽度与裁剪后的当前资源高度进行更新,得到更新后的当前资源内容,若裁剪后的当前资源宽度大于更新后的子视图的视图宽度,则基于所述视图宽度与裁剪后的当前资源宽度计算水平裁剪起始偏移量,若裁剪后的当前资源高度大于更新后的子视图的视图高度,则基于所述视图高度与裁剪后的当前资源高度计算垂直裁剪起始偏移量,基于所述水平裁剪起始偏移量与所述垂直裁剪起始偏移量将更新后的当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示;

26、当所述资源内容适配规则为居中缩放模式时,将更新后的子视图的布局参数与所述当前资源固定宽度和所述当前资源固定高度输入缩放剪比例公式进行计算,得到最终缩放比例,将所述当前资源固定宽度与所述当前资源固定高度按照所述最终缩放比例进行缩放,得到缩放后的当前资源宽度与缩放后的当前资源高度,将缩放后的当前资源宽度与缩放后的当前资源高度作为等比缩放比例,将所述当前资源内容按照所述等比缩放比例进行等比缩放,得到等比缩放后的当前资源内容,若缩放后的当前资源宽度大于更新后的子视图的视图宽度,则基于所述视图宽度与裁剪后的当前资源宽度计算水平缩放起始偏移量,若缩放后的当前资源高度大于更新后的子视图的视图高度,则基于所述视图高度与裁剪后的当前资源高度计算垂直缩放起始偏移量,基于所述水平缩放起始偏移量与所述垂直缩放起始偏移量将等比缩放后的当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示;

27、当所述资源内容适配规则为填充拉伸模式时,将所述当前资源固定宽度拉伸至更新后的子视图的视图宽度,同时将所述当前资源固定高度拉伸至更新后的子视图的视图高度,使得所述当前资源内容以填满的方式渲染至更新后的子视图上,完成多媒体资源的统一加载展示。

28、根据上述描述可知,资源内容适配规则决定了当前资源内容如何在子视图上进行渲染,当采用矩阵变换模式时,能够将平移、缩放、错切等复杂变换直接应用到当前资源内容的渲染上,适用于复杂的应用场景,提高灵活性。当采用居中裁剪模式时,通过计算出最终裁剪比例对当前资源内容进行裁剪,且还会计算出水平裁剪起始偏移量与垂直裁剪起始偏移量,保证在对更新后的当前资源内容进行渲染时无拉伸变形,避免画面失真。当采用居中缩放模式时,通过计算出最终缩放比例对当前资源内容进行等比缩放,同时会计算出水平缩放起始偏移量与垂直缩放起始偏移量,使得等比缩放后的当前资源内容完全适应子视图内容,确保渲染后的当前资源内容能够被用户看见,保证多媒体资源展示的完整性。当采用填充拉伸模式时,将当前资源固定宽度与当前资源固定高度独立拉伸至更新后的子视图的视图宽度与视图高度,使得当前资源内容能够快速填满子视图,简化业务处理。

29、可选地,所述基于所述变换矩阵将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示包括:

30、判断所述格式类型是否为特效动画,若是,则将所述当前资源固定宽度、更新后的子视图的视图宽度输入补偿公式进行计算,得到补偿系数;

31、基于所述补偿系数对所述变换矩阵进行修正,得到修正后的变换矩阵,基于修正后的变换矩阵将所述当前资源内容渲染至更新后的子视图上,完成多媒体资源的统一加载展示。

32、根据上述描述可知,考虑到特效动画存在系统内置预缩放干扰问题,通过当前资源固定宽度与更新后的子视图的固定宽度动态计算补偿系数以此对变换矩阵进行修正,抵销系统内置预缩放带来的影响,提高多媒体资源的展示效果,且无需手动调整变换矩阵,降低开发复杂度。

33、可选地,所述将所述当前资源内容渲染至更新后的子视图上包括:

34、判断所述当前资源内容的加载过程是否存在异步回调,若存在,则获取异步回调时所携带的路径标识符,将所述路径标识符与所述统一资源标识符进行比对,若所述路径标识符与所述统一资源标识符一致,则将所述当前资源内容渲染至更新后的子视图上,若所述路径标识符与所述统一资源标识符不一致,则丢弃与所述统一资源标识符不一致的路径标识符所对应的回调结果,停止渲染,并清除所述资源加载请求。

35、根据上述描述可知,在将当前资源内容渲染至更新后的子视图之前,会先校验异步回调时所携带的路径标识符是否与统一资源标识符一致,仅在一致时,才允许渲染,不一致时,则停止渲染,并清空资源加载请求。在recyclerview高速视图复用、快速刷新、连续切换资源场景下,能够从逻辑层面彻底杜绝旧网络异步请求延迟回调导致的资源覆盖、画面错乱、内容闪烁、视图渲染错位等问题。

36、第二方面,本发明提供一种多媒体资源的统一路由加载系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面所述的一种多媒体资源的统一路由加载方法。

37、其中,第二方面所提供的一种多媒体资源的统一路由加载系统所对应的技术效果参照第一方面所提供的一种多媒体资源的统一路由加载方法。