ExoPlayer结构分析

更新时间:2023-05-08 14:14:51 阅读: 评论:0

ExoPlayer结构分析
最近要做⾳乐播放器,经过⼀周的调研,最终决定使⽤google的ExoPlayer,对ExoPlayer的架构、流程做个分析,梳理⼀下调⽤逻辑。
先做个笔记,等项⽬做完了写⼀个多媒体播放的⼤型攻略。
媒体资源的获取
MediaSource类代表媒体资源,new出这个类的实例需要uri,DataSourceFactory和ExtractorsFactory。
uri是资源的路径;
DataSourceFactory的作⽤是创建对应的DataSource实例,从uri资源中读取⽂件流;
ExtractorsFactory的作⽤是创建Extractors实例,Extractor翻译过来就是“抽出器”,在这⾥就是把媒体⽂件从⼆进制的媒体流中抽出来。这个开源项⽬已经实现了mp3/mp4/flv等常见格式的抽出器,如果需要解析不⽀持的格式,还可以⾃⼰实现,或使⽤ffmpeg扩展。
MediaSource是⼀个接⼝,也没声明⼏个⽅法,其中最主要的⼀个就是createPeriod()⽅法,⽤来创建⼀个MediaPeriod对象,这个对象就是真正做资源处理的。
对媒体资源的使⽤
ExoPlayer类代表这“播放器”的概念,就是接收媒体资源,把媒体资源解析成声⾳和画⾯呈现出来。ExoPlayer是⼀个接⼝,它有很多实现,我们以SimpleExoPlayer为例⼦。new出⼀个SimpleExoPlayer实例需要RenderersFactory、TrackSelector和LoadControl三个参数。
RenderersFactory是⽤来⽣产Renderer数组的。Renderer翻译过来就是渲染器的意思,就是把⾳频、视频、⽂字源显⽰在画⾯上或输出成声⾳。⾳视频⽂件的录制都是⼆进制的,只是时间间隔⾮常短,所以输出时让⼈感觉是连续的,⽽Renderer的⼯作就是“快速、连续地输出这些⽂件”。为什么是数组呢,因为⼀个媒体⽂件可能有⾳频、视频等多个轨道,⼀个Render对应⼀个轨道;
TrackSelector翻译过来就是轨道选择器的意思,它在这⾥的作⽤就是轨道选择,它有个⽅法lectTracks(),返回TrackSelection数
组,TrackSelection就是对轨道进⾏解析的。⼀个媒体⽂件会包含多个轨道,⾳轨、视频轨、⽂字轨等,所以需要多个TrackSelection;
LoadControl主要是解析的⼀些进度控制、参数控制等,主要是记录⼀些position;
整个播放逻辑流程
上⾯分析了资源的获取和资源的使⽤,现在就分析下ExoPlayer是如何启动整个流程、控制整个流程的。
ExoPlayer通过prepare(MediaSource m,xxx,xxx)⽅法启动,⽅法⾥⾯调⽤ExoPlayerImpl的prepare⽅法,⾥⾯⼜调⽤ExoPlayerImplInternal的prepare⽅法,这个类就是真正的逻辑实现。
ExoPlayerImplInternal⾥⾯会通过Handler发送MSG_PREPARE消息,然后最终会调⽤prepareInternal⽅法。这个⽅法⾥⾯进⾏⼀些初始化操作后,就会发送MSG_DO_SOME_WORK消息,最终调⽤doSomeWork⽅法。
doSomeWork⽅法⾥⾸先会调⽤updatePeriods⽅法更新Period。播放由三个MediaPeriodHolder实例控制,MediaPeriodHolder是什么呢?它持有MediaPeriod、MediaSource、Render等所有实例,这⾥⾯就是真正完成所有逻辑的。这三个实例分别是loadingPeriodHolder、readingPeriodHolder和playingPeriodHolder。
updatePeriods⽅法会调⽤tPlayingPeriodHolder⽅法,设置将要播放的MediaPeriod。tPlayingPeriodHolder⽅法最后会调⽤enableRenderers⽅法,该⽅法会遍历render数组(创建ExoPlayer实例时传⼊的参数),调⽤render的start⽅法,这⾥⾯会执⾏⼀些状态的重置、通知。
然后再回到doSomeWork⽅法,接着往下⾛,会调⽤render的render⽅法,这个⽅法就是真正的解析、渲染了。

本文发布于:2023-05-08 14:14:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/556930.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:资源   媒体   实例   流程   轨道   逻辑
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图