㈠ webrtc linphone 到底哪个
最新要做一个移动端视频通话软件,大致看了下现有的开源软件
一) sipdroid
1)架构
sip协议栈使用java实现,音频Codec使用skype的silk(Silk编解码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器)实现。NAT传输支持stun server.
2)优缺点:
NAT方面只支持STUN,无ICE框架,如需要完全实现P2P视频通话需要实现符合ICE标准的客户端,音频方面没看到AEC等技术,视频方面还不是太完善,目前只看到调用的是系统自带的MediaRecorder,并没有自己的第三方音视频编解码库。
3)实际测试:
基于sipdroid架构的话,我们要做的工作会比较多,(ICE支持,添加回音消除,NetEQ等gips音频技术,添加视频硬件编解码codec.),所以就不做测试了。
二) imsdroid
1)架构:
基于doubango(Doubango 是一个基于3GPP IMS/RCS 并能用于嵌入式和桌面系统的开源框架。该框架使用ANSCI-C编写,具有很好的可移植性。并且已经被设计成非常轻便且能有效的工作在低内存和低处理能力的嵌入式系统上。苹果系统上的idoubs功能就是基于此框架编写) .音视频编码格式大部分都支持(H264(video),VP8(video),iLBC(audio),PCMA,PCMU,G722,G729)。NAT支持ICE(stun+turn)
2)效果实测
测试环境:公司局域网内两台机器互通,服务器走外网sip2sip
音频质量可以,但是AEC打开了还是有点回音(应该可以修复)。视频马赛克比较严重,延迟1秒左右。
3)优缺点
imsdroid目前来说还是算比较全面的,包括音视频编解码,传输(RTSP,ICE),音频处理技术等都有涉猎。doubango使用了webrtc的AEC技术,但是其调用webrtc部分没有开源,是用的编译出来的webrtc的库。如果要改善音频的话不太方便,Demo的音频效果可以,视频效果还是不太理想。
三)csipsimple
1)sip协议栈用的是pjsip,音视频编解码用到的第三方库有ffmpeg(video),silk(audio),webrtc.默认使用了webrtc的回声算法。支持ICE协议。
2)优缺点:
csipsimple架构比较清晰,sip协议由C实现,java通过JNI调用,SIP协议这一块会比较高效。其VOIP各个功能也都具备,包括NAT传输,音视频编解码。并且该项目跟进新技术比较快,官方活跃程度也比较高。如果做二次开发可以推荐这个。
3)实测效果
测试环境:公司局域网内两台机器互通,服务器走外网sip2sip
音频质量可以,无明显回音,视频需要下插件,马赛克比imsdroid更严重。
四)Linphone
这个是老牌的sip,支持平台广泛 windows, mac,ios,android,linux,技术会比较成熟。但是据玩过的同事说linphone在Android上的bug有点多,由于其代码实在庞大,所以我暂时放弃考虑Linphone.不过如果谁有跨平台的需要,可以考虑Linphone或者imsdroid和下面的webrtc.。。。好像现在开源软件都跨平台了。。。
五) webrtc
imsdroid,csipsimple,linphone都想法设法调用webrtc的音频技术,本人也测试过Android端的webrtc内网视频通话,效果比较满意。但是要把webrtc做成一个移动端的IM软件的话还有一些路要走,不过webrtc基本技术都已经有了,包括p2p传输,音视频codec,音频处理技术。不过其因为目前仅支持VP8的视频编码格式(QQ也是)想做高清视频通话的要注意了。VP8在移动端的硬件编解码支持的平台没几个(RK可以支持VP8硬件编解码)。不过webrtc代码里看到可以使用外部codec,这个还是有希望调到H264的。
总结:sipdroid比较轻量级,着重基于java开发(音频codec除外),由于其音视频编码以及P2P传输这一块略显不足,不太好做定制化开发和优化。imsdroid,遗憾就是直接调用webrtc的库,而最近webrtc更新的比较频繁,开发比较活跃。如果要自己在imsdroid上更新webrtc担心兼容性问题,希望imsdroid可以直接把需要的webrtc相关源码包进去。csipsimple的话,都是围绕pjsip的,webrtc等都是以pjsip插件形式扩充的,类似gstreamer. webrtc如果有技术实力的开发公司个人还是觉得可以选择这个来做,一个是google的原因,一个是其视频通话相关关键技术都比较成熟的原因。个人觉得如果能做出来,效果会不错的。
㈡ Android WebRTC完整入门教程02: 本地回环
上一篇: Android WebRTC完整入门教程01: 使用相机
在上一篇中完成了WebRTC最基本的使用--相机的使用. 这一篇将介绍WebRTC中最核心的概念PeerConnection , 给同一手机中的前后摄像头建立虚拟的连接, 相互传输画面.
PeerConnection也就是Peer-to-Peer connection(P2P), 就是两个"人"的连接. 双方分别创建PeerConnection对象, 然后向对方发送自己的网络状况ICE和多媒体编码格式SDP(因为这时候连接还没建立, 所以发送内容是通过服务器完成的). 当双方网络和编码格式协商好后, 连接就建立好了, 这时从PeerConnection中能获取到对方的MediaStream数据流, 也就能播放对方的音视频了.
Interactive Connectivity Establishment, 交互式连接建立. 其实是一个整合STUN和TURN的框架, 给它提供STUN和TURN服务器地址, 它会自动选择优先级高的进行NAT穿透.
Session Description Protocol: 会话描述协议. 发送方的叫Offer, 接受方的叫Answer, 除了名字外没有区别. 就是一些文本描述本地的音视频编码和网络地址等.
㈢ 有谁最近编译成功过 webrtc for android 的代码
make 模块名称
需要查看Android.mk文件的LOCAL_PACKAGE_NAME变量。
2.mmm命令
用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。比如要编译Phone部分源码,需要在终端中执行以下命令:
$mmm packages/apps/phone
3.mm命令
用于在模块根目录编译这个模块。只能在第一次编译后使用。例如要编译Phone部分源码,需要在终端中执行以下命令:
$cd packages/apps/phone
$mm
注:mmm和mm命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文件。如果要编译模块的所有文件,需要-B选项,例如mm -B。
㈣ android webrtc 回音消除使用audiotrack 合适吗
android webrtc 回音消除使用audiotrack合适。推荐即构科技,产品可选:实时音视频、实时语音、互动直播、IM即时通讯。【点击免费试用,0成本启动】
WebRTC的代码结构布局清晰,在“webrtc\moles\audio_processing\aee”目录下可以找到几个用于回声处理GIPS的AEC源文件。然后主要查找每个AEC源文件所关联的WebRTC代码,就可找出回声处理模块所需要WebRTC相关的源代码文件和头文件,这样就可以将AEC从WebRTC中提取出来单独使用。为方便使用,将需要这些代码分成2个模块,通用音频处理模块webRTC_AUDIO和GIPS-AEC模块。WebRTC—AUDIO模块中包含AEC源文件运行所依赖的WebRTC音频处理相关源文件及头文件,而GIPS—AEC模块则是WebRTC中专门用于回声处理GIPS的AEC源文件。GIPS-AEC模块以WebRTC_AUDIO模块为基础,对回声进行处理。
想要了解更多关于这方面的相关信息,推荐咨询ZEGO即构科技。ZEGO即构科技是一家全球云通讯服务商,专注自研音视频引擎,服务覆盖全球,链接 5 亿终端用户。ZEGO即构科技覆盖212个国家/地区,全球用户体验毫秒级互动,日均通话时长达30亿分钟,跻身云通讯行业头部,全方位行业解决方案,满足百余个业务场景需要,服务客户4000家,70%泛娱乐/在线教育客户的选择。
㈤ 如何编译 webrtcdemo-jni
1). 准备环境
1. Ubuntu 14.04 LTS 系统
2. 准备一个稳定的速度还可以的VPN 或者 VPS ,这个很重要,大家都懂,大部分下载代码失败都是因为访问google服务失败导致的.(本人用的Digital Ocean, 之前试过几个VPN都以失败而告终,蛋都碎了,要么是不稳定,要么速度非常慢,最长一次用了15个小时都没有下载成功)
3. 安装下载$编译webrtc代码所需工具
a. jdk (本人用的 sun jdk1.6.0_45)
配置到环境变量中
b. git ( 版本 1.9.1 )
安装: sudo apt-get install git
c. gclient
1.安装:
2.配置到环境变量中 ,至于怎么配置,不知道的google一下
d. 安装如下工具 ( sudo apt-get install ..)
g++ (>= 4.2)
python (>= 2.4)
libnss3-dev >= 3.12
libasound2-dev
libpulse-dev
libjpeg62-dev
libxv-dev
libgtk2.0-dev
libexpat1-dev
For 32-bit builds on a 64-bit system:
lib32asound2-dev
ia32-libs
2). 下载代码
1.同步WebRTC代码
1.创建WebRTC目录
mkdir WebRTC
cd WebRTC
2.初始化gclient
3. 设计目标系统版本的配置
echo "target_os = ['Android', 'unix']" >> .gclient
4. sync代码
gclient sync --nohooks
( 煎熬的一步,我同步下来的代码有7.1G之大,里面包括NDK、SDK等其他tools 之前用VPN都败在这里,后来用VPS,只用了6分多钟,哎,说点什么呢......尼玛,国内程序员就是苦逼)
注意,若长时间出现 Still working on等信息,请不要中断或者关闭,它依然在运行,如果你这里中断了,那么之前下载的东西会全部删除,然后又得重新sync一遍
3). 编译代码
1.设置编译环境
1. cd trunk
2. source ./build/android/envsetup.sh
3.export GYP_DEFINES="$GYP_DEFINES OS=android"
2. 下载编译所依赖的包或工具,(这里又会下载一大堆东西 如 Ant.)
./build/install-build-deps.sh (trunk目录下)
3. gclient runhooks --force (下载编译所需的build文件等信息)
4. 编译 ( trunk目录下 )
编译Debug版: ninja -C out/Debug
编译Release版: ninja -C out/Release
基于以上步骤,如果网络能正常访问google服务的话,一般都不会出现其他的问题,如果真碰到了问题,不要怕,一般根据错误信息就可以知道相应的原因。不知道的google一下
编译成功之后 在 out/Debug 或者 out/Release目录下看到相应的demo安装包 如Debug目录下,其中就有 AppRTCDemo-debug.apk 和 WebRTCDemo-debug.apk
AppRTCDemo程序的代码就再 trunk/talk/examples/android/ 目录下
㈥ android 用WebRTC做回音消除
之前使用speex做回音消除,不知道是没有用对还是其他什么原因,导致回音消除的效果非常差。
好在在GitHub找到了一个使用WebRTC做回音消除的例子 Android-Audio-Processing-Using-WebRTC
。
经过一顿改吧改吧的,终于在自己的项目中使用成功。 回音消除的效果比之前好了不止百倍。
其中的 Apm和ApmViewModel照抄Demo的。
但是回音消除的部分使用Demo中的方法,导致声音出现问题。
播放声音之前执行:
录音之后执行:
至于Android中使用到的库文件,可以按照GitHub上的步骤编译。
㈦ webrtc 怎么编译so文件
XCode项目中添加静态库的方法:1、右击target,选择add -> new target 2、在弹出的 NewTarget 界面中选择Cocoa Touch -> Static Library ,为新 library 取个名字。将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add 。
㈧ 如何正确地在Android上计算WebRtc
安卓android 延迟delay webrtc latency aec
WebRtc AECM在Android(三星GT-I9100G),并得到了echo抵消“差不多”,但很难计算好值“msInSndCardBuf”的具有编程。 这里的事情,咱之前已经做了: 使用AudioRecord和AudioTrack来处理实时音频的东西,echo出现。 包装WebRtcAecm函数于JNI。 使用WebRtcAecm JNI接口来处理这种echo的东西。咱把它与240毫秒到“msInSndCardBuf”的恒定值工作,但如果延迟由任何原因(螺纹等)变化时的AECM差甚至恶劣的影响。所以,咱想能够计算出“msInSndCardBuf”编程恒定在240毫秒)。 咱觉得它在audio_procession.h算法:
delay = (t_render - t_analyze) + (t_process - t_capture)
where:
- t_analyze is the time a frame is passed to AnalyzeReverseStream() and
t_render is the time the first sample of the same frame is rendered by
the audio hardware.
- t_capture is the time the first sample of a frame is captured by the
audio hardware and t_pull is the time the same frame is passed to
ProcessStream().
㈨ webrtc支持h264
webrtc本身自带VP8,VP9的编解码器, google主推VP8,VP9,随着webrtc发展,webrtc也支持了h264的编解码器
对于webrtc编解码器的设置以及他们的先后顺序,首先sdp中设置支持的编解码格式,在InternalEncoderFactory此类中,有默认塞入pop的顺序,你可以在这里修改,或者直接在sdp中修改,以达到目的;
那如何支持h264呢,默认webrtc是不支持的,rtc_use_h264是决定是否支持h264的参数,rtc_use_h264 = proprietary_codes && !is_android && !is_ios,通过修改这个属性,android端将is_android去掉,proprietary_codes默认是false,可以在编译gn gen out/h264Debug --args="proprietary_codecs=true"参数中设置为true,此时,openh264就被集成进去
rtc_initialize_ffmpeg 定义在 webrtc/webrtc.gni 中定义:rtc_initialize_ffmpeg = !build_with_chrome,build_with_chrome默认为
false,即无需修改,此时要修改FFMPEG_H264_DECODER为1 ,在third_party/ffmpeg/config/chromium/android config.h中
设置完成之后还需要修改third_party/ffmpeg/ffmpeg_generated.gni 中的编译属性,是由if()条件判断的,你需要阅读清楚,哪些是is_android的,默认webrtc没有将h264的对应文件打开,你需要将条件设置进去
㈩ 有谁最近编译成功过 webrtc for android 的代码
1). 准备环境 1. Ubuntu 14.04 LTS 系统 2. 准备一个稳定的速度还可以的VPN 或者 VPS ,这个很重要,大家都懂,大部分下载代码失败都是因为访问google服务失败导致的.(本人用的Digital Ocean, 之前试过几个VPN都以失败而告终,蛋都碎了,要么是不稳定,要么速度非常慢,最长一次用了15个小时都没有下载成功) 3. 安装下载$编译webrtc代码所需工具 a. jdk (本人用的 sun jdk1.6.0_45) 配置到环境变量中 b. git ( 版本 1.9.1 ) 安装: sudo apt-get install git c. gclient 1.安装: 2.配置到环境变量中 ,至于怎么配置,不知道的google一下 d. 安装如下工具 ( sudo apt-get install ..) g++ (>= 4.2) python (>= 2.4) libnss3-dev >= 3.12 libasound2-dev libpulse-dev libjpeg62-dev libxv-dev libgtk2.0-dev libexpat1-dev For 32-bit builds on a 64-bit system: lib32asound2-dev ia32-libs 2). 下载代码 1.同步WebRTC代码 1.创建WebRTC目录 mkdir WebRTC cd WebRTC 2.初始化gclient 3. 设计目标系统版本的配置 echo "target_os = ['Android', 'unix']" >> .gclient 4. sync代码 gclient sync --nohooks ( 煎熬的一步,我同步下来的代码有7.1G之大,里面包括NDK、SDK等其他tools 之前用VPN都败在这里,后来用VPS,只用了6分多钟,哎,说点什么呢......尼玛,国内程序员就是苦逼) 注意,若长时间出现 Still working on等信息,请不要中断或者关闭,它依然在运行,如果你这里中断了,那么之前下载的东西会全部删除,然后又得重新sync一遍 3). 编译代码 1.设置编译环境 1. cd trunk 2. source ./build/android/envsetup.sh 3.export GYP_DEFINES="$GYP_DEFINES OS=android" 2. 下载编译所依赖的包或工具,(这里又会下载一大堆东西 如 Ant.) ./build/install-build-deps.sh (trunk目录下) 3. gclient runhooks --force (下载编译所需的build文件等信息) 4. 编译 ( trunk目录下 ) 编译Debug版: ninja -C out/Debug 编译Release版: ninja -C out/Release 基于以上步骤,如果网络能正常访问google服务的话,一般都不会出现其他的问题,如果真碰到了问题,不要怕,一般根据错误信息就可以知道相应的原因。不知道的google一下 编译成功之后 在 out/Debug 或者 out/Release目录下看到相应的demo安装包 如Debug目录下,其中就有 AppRTCDemo-debug.apk 和 WebRTCDemo-debug.apk AppRTCDemo程序的代码就再 trunk/talk/examples/android/ 目录下