龙空技术网

QttAudio与WebRTC在Android音频回音消除的使用对比

QttAudio 126

前言:

现在兄弟们对“speex回声消除初始化”大致比较注重,你们都需要分析一些“speex回声消除初始化”的相关知识。那么小编也在网上收集了一些对于“speex回声消除初始化””的相关知识,希望姐妹们能喜欢,各位老铁们快快来了解一下吧!

楼宇对讲设备中,绝大部分采用的是android系统来运行软件,在其上语音对讲功能的实现并不理想,android系统里的webrtc、opus、speex,能做到的音频降噪,啸叫消除的效果是十分有限的,想做到稳定优质的呼叫对讲,还需要专门的算法来实现回音消除,否则楼宇对讲里的杂音会非常影响用户体验。

qttaudio是专业音频通信技术解决方案,通过简单易用的API,让楼宇对讲的开发者把语音通话功能迅速集成到自己的软件系统中,免除了啸叫、杂音这些麻烦事。

一、QttAudio的使用用法

1.Java(Android)

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

try {

//初始化QttAudioEngine

QttAudioEngine.me().init(this, "your appkey");

//创建QttAudioStream

QttAudioStream stream = QttAudioEngine.me().createStream();

//设置mic的编码参数,pcm,单声道,48000hz采样率

QttAudioEngine.me().setMicCodecParams("pcm", 1, 48000, 0);

//设置mic采集回调函数

QttAudioEngine.me().setMicCaptureCb(new QttCaptureCallbak() {

@Override

public void onCapture(byte[] buf, int bufLength, Object userdata) {

QttAudioStream tmpStream = (QttAudioStream) userdata;

//将mic采集到的播放出来,实现音频回放功能

tmpStream.playBuffer(buf, 0, bufLength);

}

}, stream);

//启动stream,开始工作

stream.start();

} catch (QttException e) {

e.printStackTrace();

}

}

}

2. C (iOS、Windows、Linux)

static void onCapture(char *buf, size_t len, void *userdata) {

QttAudioStream *stream = (QttAudioStream *)userdata;

//将mic采集到的播放出来,实现音频回放功能

qtt_stream_write_payload(stream, buf, len);

}

int main() {

//创建QttAudioEngine

QttAudioEngine *engine = qtt_engine_init("your appkey");

if (engine == NULL) {

fprintf(stderr, "qtt_engine_init fail\n");

return -1;

}

//创建QttAudioStream

QttAudioStream *stream = qtt_engine_create_stream(engine);

if (stream == NULL) {

fprintf(stderr, "qtt_engine_create_stream fail\n");

return -1;

}

//设置mic的编码参数,pcm,单声道,48000hz采样率

qtt_engine_set_mic_codec_params(engine, "pcm", 1, 48000, 0);

//设置mic采集回调函数

qtt_engine_set_mic_capture_callback(engine, onCapture, stream);

//启动stream,开始工作

qtt_stream_start(stream);

char c = getchar();

qtt_stream_stop(stream);

qtt_stream_free(stream);

qtt_engine_free(engine);

return 0;

}

二、webrtc的用法

WebRTC共分成三个API,让web具备三个功能

1.MediaStream (又称getUserMedia):获取音频和视频

2.RTCPeerConnection:进行音频和视频通信

3.RTCDataChannel:进行任意数据的通信

navigator.getUserMedia方法目前主要用于,在浏览器中获取音频(通过麦克风)和视频(通过摄像头),将来可以用于获取任意数据流,比如光盘和传感器。

(1)获取摄像头

需要先在网页上放置一个video元素。图像就展示在这个元素中。

<video id="webcam"></video>

然后,用代码获取这个元素

<function onSuccess(stream){

var video = document.getElementById('webcam');

}

将这个元素的src属性绑定数据流,摄像头拍摄的图像就可以显示了。

function onSuccess(stream){

var video = document.getElementById('webcam');

if (window.URL){

video.src = window.URL.createobjectURL(stream);

} else {

video.src =stream;

}

video.autoplay =true;

}

if(navigator.getUserMedia){

navigator.getUserMedia({video:true},onSuccess);

} else{

document.getElementById('webcam').src ='somevideo.mp4';

}

(2)获取麦克风声音

通过浏览器捕获声音,需要借助Web Audio API。

window.AudioContext=window.AudioContext ||

window.webkitAudioContext;

var context = new AudioContext()

function onSuccess(stream){

var audioInput = =context.createMediaStreamSource(streram);

audioInput.connect(context.destination);

}

navigator.getUserMedia({audio:true},onSuccess);

2.RTCPeerConnection

RTCPeerConnection的作用是在浏览器之间建立数据的“点对点”(peer to peer)通信,也就是将浏览器获取的麦克风或摄像头数据,传播给另一个浏览器。这里面包含了很多复杂的工作,比如信号处理、多媒体编码/解码、点对点通信、数据安全、带宽管理等等。

不同客户端之间的音频/视频传递,是不用通过服务器的。但是,两个客户端之间建立联系,需要通过服务器。

WebRTC协议没有规定与服务器的通信方式,因此可以采用各种方式,比如WebSocket。通过服务器,两个客户端按照Session Description Protocol(SDP协议)交换双方的元数据。

3.RTCDataChannel

RTCDataChannel的作用是在点对点之间,传播任意数据。它的API与WebSockets的API相同。

webrtc作为google开源的音视频播放框架,使用起来显得非常复杂,学习成本高,

QttAudio,作为android平台专业的音视频回音消除方案,无须复杂的音频开发,就几个简单清晰的API,包含opus、speex,做到自动增益、语音降噪,减少啸叫、能帮助楼宇对讲消除通话杂音,实现高清的语音音质,对于做楼宇对讲的公司来说,控制了开发成本,节省了研发时间,更有利于产品的迅速上线、获利!

标签: #speex回声消除初始化