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 callback
mWindowManager = (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
获取更多信息
Copyright © EasyDarwin.org 2012-2016

EasyPusher手机直播推送是如何实现后台直播推送的的更多相关文章
- EasyPusher手机直播编码推送之图像旋转90度后画面重复的问题
本文转自EasyDarwin开源团队开发Holo的博客:http://blog.csdn.net/holo_easydarwin 最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏推送 ...
- EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器
在不断进行EasyDarwin开源流媒体服务器的功能和性能完善的同时,我们也配套实现了目前在安防和移动互联网行业比较火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 和 Ea ...
- EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体server,EasyPlayer手机播放器
在不断进行EasyDarwin开源流媒体server的功能和性能完好的同一时候,我们也配套实现了眼下在安防和移动互联网行业比較火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 ...
- C#调用EasyPusher推送到EasyDarwin流媒体服务器直播方案及示例代码整理
博客一:转自:http://blog.csdn.net/u011039529/article/details/70832857 大家好,本人刚毕业程序猿一枚.受人所托,第一次写博客,如有错误之处敬请谅 ...
- EasyPusher手机直播图像旋转90度后画面重复的问题
本文转自:http://blog.csdn.net/holo_easydarwin/article/details/51147379 最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏 ...
- 做推送,怎么能不了解推送的 4 种消息形式呢?( Android 篇)
极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知. 笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 Android 篇,iOS 篇入口 ...
- 做推送,怎么能不了解推送的 4 种消息形式呢?(iOS 篇)
极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知.笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 iOS 篇,Android 篇入口. ...
- Android融合推送MixPush SDK集成多家推送平台,共享系统级推送,杀死APP也能收到推送
消息推送是App运营的重要一环,为了优化消息推送成功率,降低电量和流量消耗,系统级的推送服务显得尤为重要.小米和魅族由此推出了自家的推送平台,在MIUI和Flyme上共享系统级推送服务,让APP在被杀 ...
- JAVA Web实时消息后台服务器推送技术---GoEasy
---恢复内容开始--- 越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
随机推荐
- 我要好offer之 搜索算法大总结
1. 二分搜索 详见笔者博文:二分搜索的那些事儿,非常全面 2. 矩阵二分搜索 (1) 矩阵每行递增,且下一行第一个元素大于上一个最后一个元素 (2) 矩阵每行递增,且每列也递增 3. DFS 深度优 ...
- Mysql之禁止使用索引
禁止使用索引:ignore index---------------------强制使用索引: force index mysql> explain select * from userinfo ...
- linux 中信号量
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程.常用于终止正在运行的程序.ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程.ctrl-d 不是发送信 ...
- sql server 2008导入和导出sql文件
导出表数据和表结构sql文件 在日常的开发过程中,经常需要导出某个数据库中,某些表数据:或者,需要对某个表的结构,数据进行修改的时候,就需要在数据库中导出表的sql结构,包括该表的建表语句和数据存储语 ...
- 关于Red5整合springMVC提示scope not found 的错误
https://www.cnblogs.com/qgc88:
- Codeforces 895E Eyes Closed(线段树)
题目链接 Eyes Closed 题意 两个人玩一个游戏,现在有两种操作: 1.两个人格子挑选一个区间,保证两个的区间不相交.在这两个区间里面各选出一个数,交换这两个数. 2.挑选一个区间,求这个 ...
- Ubuntu 16.04下使用Wine安装文件内容搜索工具Search and Replace
说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 下载: (链接 ...
- 细说Redis持久化机制
概述 Redis不仅能够作为缓存来使用,也能够作为内存数据库. Redis作为内存数据库使用时.必需要解决一个问题:数据的持久性.有些将Redis作为缓存使用的场景也需要将缓存的数据持久化到存储介质上 ...
- Qnap 中VM下的win7
因工作需要alone了Qnap 中VM下的win7,更改冲突项:1. 电脑名2. 必需卸载虚拟网卡,因为克隆系统的MAC地址相同. 添加网卡,指定IP Address.Subnet mask.G ...
- chardet的使用
http://blog.csdn.net/jy692405180/article/details/52496599