Mediacodec学习(EXOPlayer分析)

Mediacodec学习第二篇 -- EXOPlayer

分析的主要内容

#  网络视频流解析
根据数据解析成对应的封装类型

还记得这个MediaSource吗?
buildMediaSource则根据网络数据来解析成对应数据封装
比如:HLS,DASH等


封装格式

扩展型

如果要支持RTSP播放,首先需要扩展一个基于RTSP的DataSource来完成RTSP的交互
通过http方式和本地播放方式在EXOPlayer上成功播放了MPEG4 H264 TS的视频,也就是说符合IPTV编码规范,为兼容IPTV RTSP扩展需要处理的是信令交互过程。


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
播放时序分析

按照以上分析也完成了RTSP代码实现,写代码就是个重复劳动,服务器是用VLC扩展出来的RTSP服务器,可以参考我的另一篇文章<<IPTV规范RTSP服务器实现(基于VLC)>>,目前阶段播放中有轻微卡顿和花屏问题,原因是在接收UDP包时小概率丢几个包,正在优化。代码吗之后会在我的github中同步。

第二阶段还有优化工作需要处理,还没来得及细致的分析音视频同步,后续再分析更新。感谢关注。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容