本文只对采用摄像头预览,结合TCP协议传输的简单方式来测试,测试目的:
- 找到此种方式的最大性能
- 找到瓶颈所在
- 测试各种可能的方法对性能的改进
测试环境:
网络:局域网wifi,连接速度为150Mbps
测试手机:佳域G3(一个山寨机,支持800×480分辨率采集),三星Galaxy S3(不支持800×480分辨率采集)
开发环境:win7,64bit
开发IDE:eclipse+JDK1.6
测试方法:采用摄像头预览的方法,在预览的回调函数里获取每帧的图像数据,通过TCP协议实时发送给客户端。
测试结果:在良好的wifi情况下,采集图片尺寸为800×480,速度可以在11fps,最高12fps。
其他测试方法:
(详细描述和代码可见CaptureStreamingServer\src\com\hw\video\server\VideoStreamingSenderService.java,94行至190行)
1 用zip压缩数据(每帧576k->460k),在良好的网络情况下,没有提升,反而会引起部分帧的传输故障。
2 先转成RGB,不压缩传输 --压缩效果好,但是耗时太长。
3 通过jni调用jpegHandler(第三方库)来压缩,压缩效率极高(576k->24k),但耗时长(90ms),另外在接收端没找到解压缩办法
4 使用NV21格式采集图像,然后压缩成jpeg,耗时长,最后只有6fps
5 通过jni调用imageEngine(第三方库)直接转换成RGB,耗时高(90ms),压缩效率也不高(576k->384k)
所以在此预览的方法下,如果网络状况好,直接传输或通过zip压缩即可达到良好效果,但基本也在11fps.
程序的简要描述:
1 CaptureStreamingServer
执行后界面如下,会显示当前帧的生成和发送情况,采集帧率,图片大小,服务的IP地址。点击菜单可以配置采集帧率和是否压缩图片(以减少网络传输数据)。
2 CaptureStreamingAndroid
执行后界面如下,上方会显示接收状况,下方会显示接收图片。点击菜单可以配置服务器的IP地址和端口(重启程序生效),如右图。
3 CaptureStreamingPC
执行com.hw.video.pc.VideoStreamingReceiver,服务器的IP地址和端口在com.hw.video.pc.util.Constants里进行配置(重启程序生效)。
注:
1 所有的配置均在各个项目的util.Constants内,可以设置分辨率等。
2 android开发测试版本为4.0.4.
本测试程序参考了 xinchejian和 smartCam。
测试程序描述如下:
有三个文件夹,均为eclipse开发区间,可以导入eclipse直接调试,具体见附件。
- 1 CaptureStreamingServer 视频捕捉服务(android端)
- 2 CaptureStreamingAndroid 接收客户端(android端)
- 3 CaptureStreamingPC 接收客户端(桌面程序),直接在IDE中执行com.hw.video.pc.VideoStreamingReceiver。