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

WebRTC VoiceEngine使用简单Demo,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。