转:http://blog.csdn.net/nomousewch/article/category/823687

转:http://www.cnblogs.com/skyseraph/archive/2012/03/23/2415018.html

最近研究了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) 可以远距离(带宽允许的话)

注:MediaRecorder有很强的硬件依赖性,因此不同的手机表现是不一样的,有的手机数据传输的时候会出现阻塞现象,实时性就降低了

综上来看,方案2(MediaRecorder)和方案5(JPEG)还是可以考虑的,由于本人的项目只需要近距离无线传输,并且硬件水平也不怎么高,故选择了方案5

以上方案是本人最近比较具体而深入地研究实时视频编码和传输方案后总结出来的,希望需要研究视频传输的朋友们可以借以参考!

【流媒體】Android 实时视频采集/编码/传输/解码/播放—方案调研(初)

SkySeraph Mar 23rd 2012

Email:[email protected] QQ:452728574

实时视频流采集

方案一:  通过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 修补


更多相关文章

  1. android N 获取手机内存信息方案
  2. Android多渠道打包方案的实践与优化
  3. Android(安卓)屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最
  4. 安卓编译出错:jre\bin\java.exe'' finished with non-zero exit
  5. 对Android运行出现“Session 'app': Error Launching activity”
  6. Binder驱动之Buffer Size
  7. 在 Android(安卓)的 IM 应用中使用 asmack 库实现用户头像的传输
  8. android rk及allwinner方案bug解决方法集
  9. 解决Android(安卓)应用方法数不能超过65K的问题

随机推荐

  1. Android(安卓)Material Design 控件之Tab
  2. android 上下文菜单详解
  3. TableLayout 中 stretchColumns的用法
  4. ANDROID STUDIO, GRADLE AND NDK INTEGRA
  5. android 拨打电话
  6. Android 开源项目集合
  7. android中生成和使用jar 分享
  8. Android学习笔记(2)——搭建Android开发
  9. android DragLayer源码
  10. android关于socket编程,以聊天为例http:/