WebRTC VoiceEngine使用简单Demo

Google收购的GIPS公司的音频处理技术是很牛的,现在开源了,这么好的技术应该拿来用的,这里就简单的介绍一下怎样使用VoiceEngine,欢迎大家拍砖指导。

WebRTC相关的VideoEngine和VoiceEngine的API详细说明文档:http://www.webrtc.org/system/app/pages/subPages?path=/reference/webrtc-internals

WebRTC的VideoEngine和VoiceEngine源码在:http://code.google.com/p/webrtc/source/browse/#svn%2Fbranches

iSAC(Internet Speech Audio Codec 互联网语音音频编解码器)相关编码的参数

取样频率16kHz、24kHz或32kHz,自适应速率为10kbit/s至52kbit/s,自适应包大小为30至60ms,由于算法复杂度和自适应可变速率,相比于G.722.2每帧延时3ms左右。

关于如何配置iSAC的参数,可以参看这里文章的介绍

当前的版本VideoEngine是:ViE3.1.0

VoiceEngine是:VoE4.1.0

    1. WebRTC音频引擎版本VoE4.1.0
    2. ***/
    3. //初始化VoiceEngine以及Sub_APIS
    4. VoiceEngine*         _voiceEngine;
    5. VoEBase*             _veBase;
    6. VoENetwork*          _veNetwork;
    7. VoECodec*            _veCodec;
    8. VoERTP_RTCP*         _veRTCP;
    9. _voiceEngine  = VoiceEngine::Create();
    10. _veBase     = VoEBase::GetInterface(_voiceEngine);
    11. _veNetwork  = VoENetwork::GetInterface(_voiceEngine);
    12. _veCodec    = VoECodec::GetInterface(_voiceEngine);
    13. _veRTCP     = VoERTP_RTCP::GetInterface(_voiceEngine);
    14. _vieBase->SetVoiceEngine(_voiceEngine);
    15. //编码器选择,编码的配置参数可以配置CodecInst:
    16. // Each codec supported can be described by this structure.
    17. /********
    18. struct CodecInst
    19. {
    20. int pltype;
    21. char plname[32];
    22. int plfreq;
    23. int pacsize;
    24. int channels;
    25. int rate;
    26. };********/
    27. CodecInst voiceCodec;
    28. // define iSAC codec parameters
    29. strcpy(voiceCodec.plname, "ISAC");
    30. voiceCodec.plfreq   = 16000;    // iSAC宽带模式
    31. voiceCodec.pltype   = 103;      // 默认动态负载类型
    32. voiceCodec.pacsize  = 480;      // 480kbps,即使用30ms的packet size
    33. voiceCodec.channels     = 1;        // 单声道
    34. voiceCodec.rate     = -1;       // 信道自适应模式,单位bps
    35. int numOfVeCodecs = _veCodec->NumOfCodecs();
    36. for(int i=0; i<numOfVeCodecs;++i)
    37. {
    38. if(_veCodec->GetCodec(i,voiceCodec)!=-1)
    39. {
    40. if(strncmp(voiceCodec.plname,"ISAC",4)==0)
    41. break;
    42. }
    43. }
    44. //网络传输应用
    45. _audioChannel = _veBase->CreateChannel();
    46. _veRTCP->SetRTCPStatus(_audioChannel, true);
    47. _veCodec->SetSendCodec(_audioChannel, voiceCodec);
    48. _veBase->StartPlayout(_audioChannel);
    49. //音频和视频绑定
    50. _vieBase->ConnectAudioChannel(_channelId,_audioChannel);
    51. //网络发送接收配置,远程端口:remotePort 目的IP:IP
    52. _veBase->SetSendDestination(_audioChannel, remotePort,IP);
    53. //本地接收
    54. int res=_veBase->SetLocalReceiver(_audioChannel,localPort);
    55. _veBase->StartSend(_audioChannel);
    56. _veBase->StartReceive(_audioChannel);
    57. _veBase->StopReceive(_audioChannel);
    58. _veBase->StopSend(_audioChannel);
    59. //结束,释放资源
    60. if (_voiceEngine)
    61. {
    62. _veBase->DeleteChannel(_audioChannel);
    63. _veBase->Release();
    64. _veNetwork->Release();
    65. _veCodec->Release();
    66. _veRTCP->Release();
    67. VoiceEngine::Delete(_voiceEngine);
    68. }
上一篇:html css javascript 加载的顺序


下一篇:微信移动客户端内部浏览器分享到朋友圈,QQ空间代码