EasyPusher手机直播推送是如何实现后台直播推送的
本文由EasyDarwin开源团队成员John提供;http://blog.csdn.net/jyt0551/article/details/52276062
EasyPusher Android是使用摄像头采集视频数据,并通过MediaCodec进行H264编码,之后打包成RTSP格式并上传的。
大家知道Android 的Camera是通过回调来获取YUV数据的,要想获取到回调数据,需要给Camera一个有效的Surface对象。通常我们用SurfaceView或者TextureView来提供这个surface。那如果app跑到后台时,这个Surface就会被destory掉,这时候摄像头就不再回调数据了。那整个推送过程就会停止。
那EasyPusher如何实现在“后台”继续推送呢?实际上我们借助了悬浮窗口来创建这样一个Surface供Camera使用。其实这里并非真正的后台,因为是有一个可见的view的。为了看起来更像是“后台”,那我们可以把这个view 的尺寸设置为1*1(经测试,surfaceview设置为0*0时,其surface不会被create出来),这样用户实际上是看不到的,这样就达到了“后台”的效果。
首先我们创建一个Service,在onCreate里,我们创建一个SurfaceView,并使用WindowsManager将它添加到Windows里。这里需要注意的是,因为我们要创建悬浮框,需要设置layoutParam参数为
TYPE_SYSTEM_OVERLAY,以保证其不依附于Activity.
关键代码如下:
// Create new SurfaceView, set its size to 1x1, move it to the top left// corner and set this service as a callbackmWindowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);mOutComeVideoView = new SurfaceView(this);WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(1, 1, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT);layoutParams.gravity = Gravity.LEFT | Gravity.TOP;mWindowManager.addView(mOutComeVideoView, layoutParams);mOutComeVideoView.getHolder().addCallback(this);
// 在Callback里实现创建摄像头、启动预览等操作。
EasyPusher Github:https://github.com/EasyDarwin/EasyPusher
获取更多信息
邮件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2016
EasyPusher手机直播推送是如何实现后台直播推送的相关推荐
- EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器...
在不断进行EasyDarwin开源流媒体服务器的功能和性能完善的同时,我们也配套实现了目前在安防和移动互联网行业比较火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 和 Ea ...
- EasyPusher手机直播编码推送之图像旋转90度后画面重复的问题
本文转自EasyDarwin开源团队开发Holo的博客:http://blog.csdn.net/holo_easydarwin 最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏推送 ...
- EasyPusher手机直播图像旋转90度后画面重复的问题
本文转自:http://blog.csdn.net/holo_easydarwin/article/details/51147379 最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏 ...
- php推送手机,PHP_解析php做推送服务端实现ios消息推送,准备工作1.获取手机注册应用 - phpStudy...
解析php做推送服务端实现ios消息推送 准备工作1.获取手机注册应用的deviceToken(iphone手机注册应用时返回唯一值deviceToken) 2.获取ck.pem文件(做手机端的给) ...
- Android,ios,安卓app推送消息通知,java后台向手机推送app的通知教程
文章目录 一.业务介绍 1.1 产品简介 1.2 名词解释 1.3 消息推送流程 二.应用创建 三.客户端 SDK 集成 3.1 Android 3.2 iOS 四.服务端推送 4.1 服务端消息下发 ...
- 视频直播源码中关于服务端直播开播推送实现
在视频直播源码中直播app开播时需向客户推送开播消息通知用户,实现方式如下: 1.申请相应的推送服务三方,如下使用极光推送,获取相应的配置资料,并做好相应的配置 2.推送代码如下: /* 极光推送 * ...
- iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解...
什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息.微信信息等等,这就是常见的消息推送. 例如: 消息推送的类型: 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出 ...
- 58端口使用技巧跟推送_Kindle使用技巧:定时推送
今天,我要教大家使用泡面盖(kindle)的技巧. 首先,你的Kindle还好吗? 上次给大家推送了<RSS:让你的KINDLE不再吃灰>后,相信大家一定重新拿出了抽屉里的Kindle.不 ...
- Andriod之使用极光推送自定义消息打造个性的消息推送效果
没必要重复造轮子,吸收别人的精华,站在巨人的肩膀上,才能走得更远,如果技术不能带来利润,狗屁都不如,好了,介绍下极光推送吧,我们项目里面用的是个推,先把这个极光推送的转载好,再来写个推的推送,原理差不 ...
最新文章
- OSChina 周五乱弹 —— 我觉得相亲是耻辱
- 深入理解JavaScript的变量作用域
- nginx已添加systemctl,但不能开机自启动问题
- Java数三退一问题代码_数三退一问题算法(Java)
- docker删除本地已下载的镜像
- linux redhat 命令大全,redhat Linux命令大全
- 三星电视开机显示服务器异常,三星液晶电视常见故障及维修方法
- python画画代码大全_python 相关主题_Debug5
- Vue 项目 Element-ui CDN引入后体积不变或变大的问题
- APP过等保三级需要注意个人信息保护
- 计算机论文注释范例,论文注释的标准格式范例(范例详解论文正确书写规范)...
- AspNetPager 分页
- 解读制造业数字化转型的六大因素
- Hive sql 常用命令2
- 【javaScript 的 proxy】
- 应用程序正常初始化0xc0000135失败的解决办法
- mysql默认编码改为gkb编码_MYSQL数据库默认latin1字符集转换为GBK或UTF8
- mysql 怎么表示正无穷_C语言中正无穷大怎么表示
- 老婆的日记(看了你想结婚的)
- 触摸屏驱动的reset的实验