EasyPlayer RTSP安卓Android播放器架构简析
本文转自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
播放器的录像是在消费者线程里进行的,其流程图如下:
停止
Player停止的顺序恰好与播放的顺序相反。首先,先停止生产者线程,然后再终止音视频消费者线程,值得注意的是由于音视频渲染相关的处理都放在了消费者线程当中,因此消费者线程结束时会同时反初始化相关资源。最后再清空缓冲队列。如果正在录像,还要停止muxer,以确保录像文件正常结束,能够播放。
相关资源
- EasyPlayer项目地址:
Github https://github.com/EasyDarwin/EasyPlayer_Android - App下载地址:http://fir.im/EasyPlayer
获取更多信息
QQ群:587254841
Copyright © EasyDarwin.org 2012-2017
EasyPlayer RTSP安卓Android播放器架构简析的更多相关文章
- EasyPlayer RTSP 安卓Android播放器显示模式设置方法
一般对于一个播放器,应该支持如下几种显示模式: 等比例,最大化区域显示,不裁剪 等比例,最大区域显示,裁剪 拉伸显示,铺满全屏 要实现这几种显示模式,其实只要对播放控件的布局进行些许调整即可.那Eas ...
- RTSP Windows专用播放器EasyPlayer : 稳定、兼容、高效、超低延时
EasyPlayer RTSP Windows专用播放器 EasyPlayer RTSP Windows 播放器是由EasyDarwin团队开发和维护的一个完善的RTSP流媒体播放器项目,视频编码支持 ...
- github上十二款最著名的Android播放器开源项目
1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...
- GitHub上最著名的Android播放器开源项目大全
GitHub上最著名的Android播放器开源项目大全 ...
- EasyPlayer安卓Android流媒体播放器实现直播过程中客户端快照功能
本文转自:http://blog.csdn.net/jyt0551/article/details/56942795 对于一个裸的RTSP URL,存放在播放列表上略显单调与枯燥.大家可以看到Easy ...
- 【翻译】安卓新播放器EXOplayer介绍
http://developer.android.com/guide/topics/media/exoplayer.html 前言: Playing videos and music is a p ...
- 安卓MP3播放器开发实例(1)之音乐列表界面
学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...
- Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等
下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...
- 几款优秀的点播、RTSP/RTMP直播播放器介绍
1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...
随机推荐
- 关于makefile的那些事儿
最近越来越感觉到,在linux下面身为一个程序员,不会makefile就不是一个合格的程序员,所以今天我们介绍下常用的makefile编写. 了解知识: 编译:把高级语言书写的代码转换为机器可识别的机 ...
- [HAOI2015]T2
[题目描述] 有一棵点数为N的树,以点1为根,且树点有边权.然后有M个操作,分为三种: 操作1:把某个节点x的点权增加a. 操作2:把某个节点x为根的子树中所有点的点权都增加a. 操作3:询问某个节点 ...
- ASP.NET Web API Claims Authorization with ASP.NET Identity 2.1 Part 5 (by TAISEER)
https://www.cnblogs.com/KimmyLee/p/6430474.html https://www.cnblogs.com/rocketRobin/p/9077523.html h ...
- 爬虫框架Scrapy之详解
Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...
- jQuery使用ajaxSubmit()提交表单(在不希望页面跳转的情况下)
原文:http://www.jb51.net/article/48728.htm ajaxSubmit(obj)方法是jQuery的一个插件jquery.form.js里面的方法,所以使用此方法需要先 ...
- HighCharts 在IE8下饼图不显示的问题
HighCharts饼图用来做数据统计时,在IE8下发现某些图形不能正确显示出来. 在IE8下面会报 'this.renderer.gradients' 为空或不是对象 这样的错误.. 解决方法: ...
- C# 一些常用的字符串扩展方法
以下可能是常用的.net扩展方法,记录下 EString.cs文件 /// <summary> /// 扩展字符串类 /// </summary> public static ...
- Educational Codeforces Round 13 A、B、C、D
A. Johny Likes Numbers time limit per test 0.5 seconds memory limit per test 256 megabytes input sta ...
- du,df 磁盘管理
du会把指定目录下所有文件.目录.目录下的文件都统计.是建立在文件系统能看到的的确确是有这样一些文件的基础上的.也就是说我们能在文件系统里面看到的文件才会被du统计. df命令可以获取硬盘被占用了多少 ...
- RotateCard(自定义旋转view)
使用方法Demo package com.example.displaydemo; import java.util.ArrayList; import com.example.displaydemo ...