Media技术杂烩

Mediacodec学习(EXOPlayer分析)

2017-03-27  本文已影响476人  Young_Allen

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中同步。

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

上一篇 下一篇

猜你喜欢

热点阅读