关闭

WebRTC VoiceEngine使用简单Demo

803人阅读 评论(0) 收藏 举报
分类:

http://blog.csdn.net/temotemo/article/details/7449525

        WebRTC VoiceEngine使用简单Demo       

分类:            WebRTC10688人阅读评论(8)收藏举报

WebRTC技术交流群:234795279


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 class="cpp" name="code">/****
  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> 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:331937次
    • 积分:4278
    • 等级:
    • 排名:第7356名
    • 原创:53篇
    • 转载:317篇
    • 译文:0篇
    • 评论:15条
    文章分类