qq视频聊天和语音聊天功能是我们日常生活中经常使用到的功能。如果我们要实现手机与智能摄像头, 可视门铃, 可视猫眼等智能家居的视频对讲功能,如果以前没有接触过这些方面,难度和复杂度都不小。
需要在以下方面有知识沉淀和深入研究:
1、首先要解决p2p视频传输的问题:视频对讲流量大,通过服务器中转的话,既浪费服务器昂贵的宽带资源,视频延时长也严重影响用户体验。通过p2p打洞,手机直接连接智能设备,可减少视频延时又节省服务器宽带资源。
2、视频推流、拉流、编解码;音频编解码。
3、手机APP实时视频显示。
4、手机声音采集、声音澡音处理,回声处理。
网络上能够找到的库非常少,webrtc算是比较全面的解决方案,但是它却非常复杂,编译后的库也很大,不适合在嵌入式智能家居设备上使用。下面将详细描述如何解决以上各方面的难点。
首先看看实现后的效果图:
p2p视频传输这块,我们使用深圳市好游科技有限公司开发的p2p sdk,接口非常简单,穿透能力强,双对称型 NAT也能打洞成功。编译后的库也非常小,linux不到500kb,windows下不到200kb.
音视频推流、拉流、编解码;我们使用好游科技实现的多媒体库liveMedia,视频方面用H264、音频方面用的是aac。在设备端和手机端都接入此库。手机app上查看设备时,首先拉取了设备上的视频流,音频流虽然开了,但是默认是静音的,没有传输音频数据。用户可以在APP上单独开启声音,此后音频数据才会开始传输。当用户点通话按扭时,开启手机上的rtsp库,并开始录音。此后设备端开始从手机上拉取视频流和音频流。
手机视频显示方面,我们用unity3D+NGUI开发,创建了一个纹理UITexture来显示。通过GLES把每帧的视频绘制到纹理上。也可以对此纹理做各种后期处理。
4、采集方面ios使用的是 Aduio Unit,安卓方面使用的是AudioRecord
5、音频噪声处理和回声处理上,ios方面使用的是 api自带的效果就已经比较好了。设备端使用的是webrtc里面的声音处理模块。
后面再详细介绍每个模块的主要代码,有疑问的朋友可联系QQ: 390090739 由于代码较复杂,代码量也巨大,只能挑重点讲解每个部份的内容。