Android 实时视频采集/编码/传输/解码/播放—方案调研

实时视频流采集

方案一:  通过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) 可以远距离(带宽允许的话)

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值