本文转自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. JAVA基本常识及环境搭建

    JAVA基本常识及环境搭建 常用dos命令行 dir 列出当前目录下的文件以及文件夹 md 创建目录 cd 进入指定目录 cd.. 退回到上一级目录 cd/ 退回到根目录 del 删除文件 删除单个文 ...

  2. Excel水平线画不直,图形对象对不齐,怎么办

    看够了千篇一律的数字报表,不妨添加些图形对象来调剂下,今天小编excel小课堂(ID:excel-xiaoketang 长按复制)给各位分享10个插入图形对象时简单实用的小技巧. 01课题 今天小编e ...

  3. cogs 341:[NOI2005] 聪聪与可可

    ★★   输入文件:cchkk.in   输出文件:cchkk.out   简单对比 时间限制:1 s   内存限制:256 MB [问题描述] 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小 ...

  4. MysQL使用一高级应用(上)

    简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 关系 创建成绩表sc ...

  5. vue知识汇总

    关于slot solt插槽,用来进行预定义,比如app里面的heard,各种情况下未必一致,把每种情况都加上solt,对应的情况下覆盖solt就可以了

  6. Mysql批量更新速度慢的解决方案

    批量更新的时候不能用子查询 where shop_orderform_id in( select shop_orderform_id from `shop_orderform` where user_ ...

  7. 你可能不知道的mouseover/mouseout mouseenter/mouseleave

    mouseover与mouseenter 1. 触发时机 mouseover在被监听的节点与子节点上都会触发 mouseenter只在被监听的节点上触发 本质上是因为mouseenter不能冒泡 2. ...

  8. PHP5.6版本安装redis扩展

    一.php安装redis扩展   1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本       2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2 ...

  9. CSP(Content Security Policy) 入门教程

    参考: http://www.ruanyifeng.com/blog/2016/09/csp.html https://developer.mozilla.org/en-US/docs/Web/HTT ...

  10. unity调用Android百度地图

    由于个人是Android小白,在这个配置上面被折磨了很久,因此写下这篇文章 工具:eclipse + unity5.6.1 首先去百度地图开发者平台下载你需要的资源,我只需要显示地图和定位,这个时候你 ...