您的位置:首页 > 其它

安卓手机的视频传输方案的研究(初步)

2013-10-31 10:15 225 查看
导师分配任务需要实现安卓手机的实时语音和视频传输功能。之前并没有相关的开发经验,于是翻看师兄的毕业设计,简单的把师兄留下的工程重复了下,他只做到了视频的传输,没有语音。而且视频是以序列图片的模式用TCP协议发送到接收端,然后直接在不停地接收端将收到的图片绘制在容器中。这样做并不能解决问题。

于是只能慢慢翻看资料,安卓也是刚刚上手。好在之前有JAVA的基础,安卓上手起来也不是太难。但是发现天杀的google并没有留下相关的视频流的接口,能用的只有两个:1、Camera.PreviewCallback获取预览的每一帧图像;2、MediaRecorder可以直接录制3PG或者MP4文件。

再翻看网上资料发现有前人已经做了相关方面的研究,SkySeraph在他的博客中详细分析了安卓实时视频采集/编码/传输/解码/播放的相关技术很有参考价值。

方案

压缩率

压缩/传输方式

实时性

平均流量消耗

传输距离

用camera的回调函数发送原始的yuv420数据

0

无压缩,按帧传输

高(20~30 fps)

很高(6.5 Mbps)

近距离有线或无线

对一帧数据用GZIP库压缩后发送(很奇葩的做法)

较高(70%~80%)

帧内压缩,按帧传输

低(5 fps)

较高(300 Kbps)

可以远距离

对一帧数据用JPEG方式压缩后传输

一般(60%左右)

帧内压缩,按帧传输

高(25 fps)

高(170 Kbps)

可以远距离(带宽允许的话)

用MediaRecorder对yuv420进行H264硬编码后发送

高(95%)

帧间压缩,视频流传输

高(20 fps)

低(30~70 Kbps)

可以远距离

调用本地H264编码库(JNI)对一帧YUV420数据编码后发送(软编码)

高(97%)

帧间压缩,按帧传输

低(2 fps)

低(20 Kbps)

可以远距离

上表是另一网友总结的安卓平台下的几种实时视频解决方案,前面三种为发送序列图片的方式,并不能很好的完成要求,后面两种能够较好的解决问题。第四种方式,有一个开源的项目Sipdroid可以参考

针对第五种实现方式也有相应的开源项目DroidIPCam代码托管在google服务器上

第五种方式需要自己构建JNI动态编码库,还需要自己对音频与视频同步编码,相比而言第四种方法能直接调用安卓设备本身的资源硬编码,能同时将音视频一起录制然后发送,相比简单很多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: