Mediacodec学习第二篇 -- EXOPlayer
分析的主要内容
# 网络视频流解析
根据数据解析成对应的封装类型
还记得这个MediaSource吗?
buildMediaSource则根据网络数据来解析成对应数据封装
比如:HLS,DASH等
封装格式
扩展型
Paste_Image.png
那需要先分析ExoPlayer是如何把通过网络缓冲的数据写入render中的。
在ExtractorMediaPeriod的load处理中dataSource.open完成了数据请求交互
ExtractorMediaPeriod::load TsExtractor::read DefaultExtractorInput::read DefaultExtractorInput::readFromDataSource
在ExtractorMediaPeriod的dataSource open后然后通过read方法完成buffer数据的读取。以HTTP请求为例来说明:
在open中实现inputStream实例:
DefaultHttpDataSource::open
在read中通过inputStream实例采集视频数据:
DefaultHttpDataSource::read DefaultHttpDataSource::readInternal
这样把网络的视频流不断的注入给render来绘制实现硬解播放
接下来贴几张类图和序列图,都是我在实现RTSP的过程中分析画的,虽然不全也可能不对,但多少可以帮助理解分析,后期再补全。
DataSource家族 MediaSource家族 Player树 TrackSelection 播放时序分析第二阶段还有优化工作需要处理,还没来得及细致的分析音视频同步,后续再分析更新。感谢关注。