EasyPusher Android如何在后台采集视频并上传?
来源:互联网 发布:淘宝大店铺排行榜 编辑:程序博客网 时间:2024/05/22 01:25
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里实现创建摄像头、启动预览等操作。
…
1 0
- EasyPusher Android如何在后台采集视频并上传?
- .net 如何在后台添加控件,并获取值。
- 如何在后台播放音乐
- 如何在后台运行Heritrix
- 微信小程序常见问题->上传文件后如何在后台(php)获取文件名解决方法
- 微信小程序常见问题->上传文件后如何在后台(php)获取文件名解决方法
- ecshop如何在后台管理左侧菜单添加新栏目并管理
- 如何在后台正确使用脚本
- flex如何在后台生成 xml
- C#如何在后台调用Javascript
- C#如何在后台调用Javascript
- Android 录制视频并上传
- 如何在后台代码获取控制EditItemTemplate的控件
- JSF如何在后台获得前台页面的标签对象
- 如何在后台代码中执行原生sql?
- 如何在后台运行模式生成Excel格式文件
- 如何在后台运行模式生成Excel格式文件(收藏)
- 关于mplayer如何在后台播放的问题
- 深入分析 Java 中的中文编码问题
- CDISC SDTM MS domain学习笔记
- ptrace运行原理及使用详解
- ionic之路由跳转
- numpy基本方法总结
- EasyPusher Android如何在后台采集视频并上传?
- 让UILabel的文字顶部对齐
- GitHub笔记学习
- wireshark抓包常见提示含义解析
- CodeForces 681B
- 全身心理解程序的转换过程
- ACM模板——SPFA算法
- SAP 职位创建
- preprocessing(归一化/标准化/正则化)