Android 实时视频采集/编码/传输/解码/播放—方案调研
2016-07-27 11:31
796 查看
【流媒體】Android 实时视频采集/编码/传输/解码/播放—方案调研(初)
【流媒體】Android 实时视频采集/编码/传输/解码/播放—方案调研(初)
SkySeraph Mar 23rd 2012Email:skyseraph00@163.com
更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com
实时视频流采集
方案一: 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据方案二: 通过Android的MediaRecorder,在SetoutputFile函数中绑定LocalSocket实现
方案三: 流媒体服务器方式,利用ffmpeg或GetStreamer等获取Camera视频
方案四: 待补充...
压缩编码
方案一: 不编码,直接通过Socket传输原始YUV420SP视频帧方案二: JPEG. 将原始YUV420SP视频帧压缩转换为JPEG格式,JPEG传输
方案三: H.264/AVC.将原始YUV420SP视频帧压缩成H.264再传输
常见的基于H264的开源Encoder有JM、X264、T264、Hdot264等
方案四: MPEG4.将原始YUV420SP视频帧压缩成MPEG4再传输
方案五: 待补充...
传输
方案一: Socket传输方案二: HTTP传输
方案三: RTP/RTSP传输
方案四: 流媒体服务器方式,如live555等
方案五: 待补充...
解码
与编码对应的的解码器视频播放
方案一: 通过Android VideoView方案二: 通过Android MediaPlay
方案三: 通过Canvas直接粘贴帧图
方案四: 待补充...
2012-3-31 修补
最近研究了android的实时视频网络传输问题,在视频处理方面花费了大量精力进行研究,总结出以下五套方案,并加以比较
以320×240大小的视频传输为例
方案 | 压缩率 | 压缩/传输方式 | 实时性 | 平均流量消耗 | 传输距离 |
用camera的回调函数发送原始的yuv420数据 | 0 | 无压缩,按帧传输 | 高(20~30 fps) | 很高(6.5 Mbps)太恐怖了O_O | 近距离有线或无线 |
用MediaRecorder对yuv420进行H264硬编码后发送 | 高(95%) | 帧间压缩,视频流传输 | 高(20 fps) | 低(30~70 Kbps) | 可以远距离 |
调用本地H264编码库(JNI)对一帧YUV420数据编码后发送 | 高(97%) | 帧间压缩,按帧传输 | 低(2 fps) | 低(20 Kbps) | 可以远距离 |
对一帧数据用GZIP库压缩后发送(很奇葩的做法) | 较高(70%~80%) | 帧内压缩,按帧传输 | 低(5 fps) | 较高(300 Kbps) | 可以远距离 |
对一帧数据用JPEG方式压缩后传输 | 一般(60%左右) | 帧内压缩,按帧传输 | 高(25 fps) | 高(170 Kbps) | 可以远距离(带宽允许的话) |
综上来看,方案2(MediaRecorder)和方案5(JPEG)还是可以考虑的,由于本人的项目只需要近距离无线传输,并且硬件水平也不怎么高,故选择了方案5
相关文章推荐
- 解决Android Webview 重定向无法 goback 的方法
- Android Studio中debug模式下使用release签名
- Android 更改一个更新
- Android设备的唯一标识
- 安卓开发之,教你使用反射+注解
- Android开源项目——设置图文居中的按钮 IconButton
- Android 属性拷贝,属性复制的工具类
- android项目管理activity的类
- Android Studio 使用Gradle多渠道打包
- android 环境配置
- android fragment 使用以及嵌套使用 底部菜单和顶部菜单
- Android 开始一个activity的同时保留导航
- android删除私密信息
- Android源码解析Activity#setContentView()方法
- 新手Android学习笔记 05——IllegalStateException非法异常之一
- 新手Android学习笔记 05——IllegalStateException非法异常之一
- android studio radioGroup radiobutton使用listactivity演示
- 动态修改actionBar返回键颜色
- Activity的启动模式
- 关于Android下各个布局方式里面LayoutParams的用法