EasyPlayer Android 结构浅析
来源:互联网 发布:2017年网络热词 编辑:程序博客网 时间:2024/05/16 15:51
EasyPlayer 是一款小而美的RTSP安卓播放器。具有起搏快、延迟底、兼容性好的特点,而且支持抓拍、录像等实用功能。
好了,我就在此简单介绍一下播放器的代码结构吧!
播放
简单来说,EasyPlayer就是一个典型的生产者、消费者模式案例,如下图所示:
首先,创建音视频消费者线程。线程刚开始,会等待音视频数据帧,根据音视频相关信息,初始化Decoder和Render。EasyPlayer的视频用MediaCodec进行解码与渲染;音频用AudioDecoder解码和AudioTrack来渲染。
其次,创建生产者线程。即图中的媒体数据回调线程。生产者为EasyRTSPClient(github)。EasyRTSPClient是一个RTSP的Demuxer库,在EasyPlayer工程里以Native形式存在。该库将RTSP协议里的音视频数据流解析成音视频帧,并缓存到媒体帧队列里。
需要注意的是,缓存队列在保存音视频数据帧的同时,会对其按时间戳排序,用来实现音视频同步。
当消费者线程从媒体帧队列取到媒体帧后,会发起渲染,这样一个简单的播放器就实现了。
录像
关于EasyPlayer的录像作者之前也有过介绍,参考文章:
EasyPlayer实现播放时同步录像的功能:
http://blog.csdn.net/jyt0551/article/details/60152344
Android MediaMuxer录像(支持G711音频):
http://blog.csdn.net/jyt0551/article/details/72787095
播放器的录像是在消费者线程里进行的,其流程图如下:
停止
Player停止的顺序恰好与播放的顺序相反。首先,先停止生产者线程,然后再终止音视频消费者线程,值得注意的是由于音视频渲染相关的处理都放在了消费者线程当中,因此消费者线程结束时会同时反初始化相关资源。最后再清空缓冲队列。如果正在录像,还要停止muxer,以确保录像文件正常结束,能够播放。
相关资源
- EasyPlayer项目地址:
Github https://github.com/EasyDarwin/EasyPlayer_Android - App下载地址:http://fir.im/EasyPlayer
- EasyPlayer Android 结构浅析
- EasyPlayer Android RTSP流媒体播放器结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- Android Studio目录结构浅析
- EasyPlayer RTSP安卓Android播放器架构简析
- android集成EasyPlayer播放器播放实时流媒体视屏
- EasyPlayer Android RTSP播放器延迟再优化策略
- 使用charles抓取windows系统下android APP的请求
- spring 配置统一管理,代码可以直接运行。包含所有类和配置文件。
- wsdl
- Excel VBA高效办公应用-第八章-商品销售决策与分析-Part2 (商品分期付款决策)
- Android Studio使用百度地图出现 java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.mapapi.Mj.
- EasyPlayer Android 结构浅析
- 2017 GCTF Web WriteUp
- 三数之和
- java语言基础(67)——集合框架之数据结构
- 短地址(ShortUrl)实例
- JS学习笔记(二)
- C++跨文件共享全局变量
- 操作系统
- pyenv & pyenv-virtualenv