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. }

WebRTC VoiceEngine使用简单Demo的更多相关文章

  1. WebRTC介绍及简单应用

    WebRTC介绍及简单应用 WebRTC,即Web Real-Time Communication,web实时通信技术.简单地说就是在web浏览器里面引入实时通信,包括音视频通话等. WebRTC实时 ...

  2. WebRTC VoiceEngine综合应用示例(二)——音频通话的基本流程(转)

    下面将以实现一个音频通话功能为示例详细介绍VoiceEngine的使用,在文末将附上相应源码的下载地址.这里参考的是voiceengine\voe_cmd_test. 第一步是创建VoiceEngin ...

  3. WebRTC VoiceEngine综合应用示例(一)——基本结构分析(转)

    把自己这两天学习VoiceEngine的成果分享出来,供大家参考,有什么问题也欢迎大家指出,一起学习一起进步. 本文将对VoiceEngine的基本结构做一个分析,分析的方法是自底向上的:看一个音频编 ...

  4. 设计模式之单例模式的简单demo

    /* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...

  5. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

  6. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  7. Managed DirectX中的DirectShow应用(简单Demo及源码)

    阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...

  8. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  9. Solr配置与简单Demo[转]

    Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...

随机推荐

  1. Winform带dataGridview的Combox控件

    调用控件: public partial class Form1 : Form { public Form1() { InitializeComponent(); //---------------- ...

  2. 一个int类型引发的bug

    一.引言 今天我在项目开发中,遭遇了一个莫名其妙的问题,概括加抽象后形成如下问题:在使用MyBatis的XML语句实现Dao层接口 List<Person> selectBySome(@P ...

  3. Linux:crontab的安装以及使用方法

    安装crontab: [root@wulaoer ~]# yum install vixie-cron [root@wulaoer ~]# yum install crontabs 说明:vixie- ...

  4. Sencha Touch学习(一)

    一.Ext的内部类结构示意图 基类Ext.Base 该类是所有通过Ext.define定义出来的类的基类. 是所有Ext类的基石. 来自为知笔记(Wiz)

  5. 利用rem实现webapp布局

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了. 但是我对rem综合评价是用来做web app它绝对是最合适的人选之一 ...

  6. Sping--AOP--XML

    IoC: annotation AOP: XML XML比annotation用的多. beans.xml: <?xml version="1.0" encoding=&qu ...

  7. Delphi XE7 Update1修正列表

    Delphi XE7 Update1修正列表 官方下载地址:http://altd.embarcadero.com/download/radstudio/xe7/delphicbuilder_xe7_ ...

  8. [iOS Animation]-CALayer 缓冲

    缓冲 生活和艺术一样,最美的永远是曲线. -- 爱德华布尔沃 - 利顿 在第九章“图层时间”中,我们讨论了动画时间和CAMediaTiming协议.现在我们来看一下另一个和时间相关的机制--所谓的缓冲 ...

  9. hibernate---一级缓存, 二级缓存, 查询缓存

    缓存: 内存开辟一块空间,把本来存在硬盘的东西放在内存里, 以后从内存读取. 一级缓存: session级别的缓存, session.load 二级缓存: 总的缓存.

  10. ue4访问php接口

    继上一篇介绍ue4打开web url窗口,这篇就来介绍下怎么访问php接口. 要做的两步: 1.c++自己写个接受请求的方法 f Post lhc-URL Request就是自定义的c++方法, /* ...