本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/73310641

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

播放器的录像是在消费者线程里进行的,其流程图如下:

Created with Raphaël 2.1.0视频线程视频线程MuxerMuxer音频线程音频线程写入视频数据写入音频数据渲染视频渲染音频

停止

Player停止的顺序恰好与播放的顺序相反。首先,先停止生产者线程,然后再终止音视频消费者线程,值得注意的是由于音视频渲染相关的处理都放在了消费者线程当中,因此消费者线程结束时会同时反初始化相关资源。最后再清空缓冲队列。如果正在录像,还要停止muxer,以确保录像文件正常结束,能够播放。

相关资源

获取更多信息

邮件:support@easydarwin.org

WEB:www.easydarwin.org

QQ群:587254841

Copyright © EasyDarwin.org 2012-2017

EasyPlayer RTSP安卓Android播放器架构简析的更多相关文章

  1. EasyPlayer RTSP 安卓Android播放器显示模式设置方法

    一般对于一个播放器,应该支持如下几种显示模式: 等比例,最大化区域显示,不裁剪 等比例,最大区域显示,裁剪 拉伸显示,铺满全屏 要实现这几种显示模式,其实只要对播放控件的布局进行些许调整即可.那Eas ...

  2. RTSP Windows专用播放器EasyPlayer : 稳定、兼容、高效、超低延时

    EasyPlayer RTSP Windows专用播放器 EasyPlayer RTSP Windows 播放器是由EasyDarwin团队开发和维护的一个完善的RTSP流媒体播放器项目,视频编码支持 ...

  3. github上十二款最著名的Android播放器开源项目

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  4. GitHub上最著名的Android播放器开源项目大全

    GitHub上最著名的Android播放器开源项目大全                                                                          ...

  5. EasyPlayer安卓Android流媒体播放器实现直播过程中客户端快照功能

    本文转自:http://blog.csdn.net/jyt0551/article/details/56942795 对于一个裸的RTSP URL,存放在播放列表上略显单调与枯燥.大家可以看到Easy ...

  6. 【翻译】安卓新播放器EXOplayer介绍

    http://developer.android.com/guide/topics/media/exoplayer.html   前言: Playing videos and music is a p ...

  7. 安卓MP3播放器开发实例(1)之音乐列表界面

    学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...

  8. Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等

    下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...

  9. 几款优秀的点播、RTSP/RTMP直播播放器介绍

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

随机推荐

  1. 编解码技术:I帧与IDR帧的区别总结

    编解码技术:I帧与IDR帧的区别总结 DR(Instantaneous Decoding Refresh)--即时解码刷新. I帧与IDR帧的相同点在于: 1.I和IDR帧都是使用帧内预测的: 2.都 ...

  2. cmd中如何查看环境变量

    查看所有环境变量 set 查看某一个环境变量 C:\WINDOWS\system32>set no_proxyNO_PROXY=localhost,127.0.0.1,172.31.212.14 ...

  3. JSon数据类型&使用基础

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 在Extjs 的 TabPanel在 title标题栏上加按扭button

    如何在tabPanel的 标题栏的右侧添加操作按扭,效果如图,我总结了两种实现的方案: 第一种方案: 使用tabPanel的tabPbar: Ext.define("CisApp.view. ...

  5. 问下大家,chorme里用开发者工具看headers,点network标签然后刷新网页并没有headers选项,怎么破?

    问下大家,chorme里用开发者工具看headers,点network标签然后刷新网页并没有headers选项,怎么破? 请教个问题 jmeter在Linux服务器压测,抛出很多错误率 但日志中没看到 ...

  6. 今天 学习用到的一些知识(properties 读取,js 删除元素)

    1.properties文件位置的关系:当properties文件放在src目录下时,编译会自动把src里的文件放到bin文件平级,因此可用this.getClass.getClassLoader.g ...

  7. thinkphp 模板中得到controller name,得到当前文件路径

    <li><a href="/Admin/account" <eq name="Think.CONTROLLER_NAME" value= ...

  8. angular之自定义 directive

    1,指令的创建至少需要一个带有@Directive装饰器修饰的控制器类.@Directive装饰器指定了一个选择器名称,用于指出与此指令相关联的属性的名字. 2,创建一个highlight.direc ...

  9. [mybatis]Mapper XML 文件——statementType

    statementType:STATEMENT,PREPARED 或 CALLABLE(存储过程) 的一个.这会让 MyBatis 分别使用 Statement,PreparedStatement 或 ...

  10. Mercurial的使用心得

    本文发表地址:http://www.xiabingbao.com/mercurial/2015/01/22/mercurial-understanding/ 本人接触版本控制的历史 在很久很久以前,我 ...