快速实现语音通话 编辑文档

在进行本部分前,请确认已阅读《环境配置》相关章节。
本章针对Java开发者集成QttAudio SDK,适用于Android应用开发。
一共包含6个关键操作:

  1. 初始化
  2. 监听频道事件
  3. 进入频道
  4. 离开频道
  5. 释放资源

1. 初始化

请开发者使用自己的AppKey进行初始化


//ChannelObserver设置,频道事件的监听
ChannelObserverImpl channelObserver = new ChannelObserverImpl();
ChannelEngine channelEngine = ChannelEngine.GetChannelInstance(getApplicationContext(),
"your appkey",channelObserver);
if (channelEngine == null) {
Log.d("qtt_debug", "QttChannel初始化失败,原因是"+ChannelFactory.GetError());
return;
}
Log.d("qtt_debug", "QttChannel初始化成功");

2. 监听频道事件

实现ChannelObserver接口:

private class ChannelObserverImpl implements ChannelObserver {
@Override
public void onJoinSuccess(String roomName, long uid, ChannelRole role, boolean muted) {
Log.d("qtt_rtc", "加入频道成功 roomId:" + roomName + " uid:" + uid + " role:" + role + " ");
//TODO 实现处理自己加入频道成功逻辑
}

@Override
public void onReJoinSuccess(String roomName, long uid, ChannelRole role, boolean muted) {
Log.d("qtt_rtc", "重新加入频道成功 roomId:" + roomName + " uid:" + uid + " role:" + role + " ");
//TODO 实现处理自己重新加入频道成功逻辑
}

@Override
public void onOtherJoin(long uid, ChannelRole role, boolean muted) {
Log.d("qtt_rtc", "uid " + uid + " 加入频道 role:" + role);
//TODO 实现处理他人加入频道成功逻辑
}

@Override
public void onJoinFail(final int code, final String message) {
Log.d("qtt_rtc", "加入频道失败 " + message);
//TODO 实现处理自己加入频道失败逻辑
}

@Override
public void onConnectionBreak() {
Log.d("qtt_rtc", "网络打断");
//TODO 实现处理网络被打断逻辑
}

@Override
public void onConnectionLost() {
Log.d("qtt_rtc", "网络失去连接");
//TODO 实现处理网络失去连接逻辑
}

@Override
public void onError(int err, String message) {
Log.d("qtt_rtc", "错误消息 " + message);
//TODO 实现处理SDK内部错误的逻辑
}

@Override
public void onWarning(int warn, String message) {
Log.d("qtt_rtc", "警告消息 " + message);
//TODO 实现处理SDK内部警告的逻辑
}

@Override
public void onLeave() {
Log.d("qtt_rtc", "离开频道");
//TODO 实现处理自己离开频道的逻辑
}

@Override
public void onOtherLeave(long uid, ChannelRole role) {
Log.d("qtt_rtc", "远端用户离开频道 " + uid);
//TODO 实现处理远端用户离开频道的逻辑
}

@Override
public void onTalkingVolumeIndication(VolumeInfo[] volumeInfos, int size) {
Log.d("qtt_rtc", "用户说话");
//TODO 实现处理用户说话提示的逻辑
}

@Override
public void onMuteStatusChanged(long uid, boolean muted) {
if (uid == 0) {
Log.d("qtt_rtc", "自己静麦状态变化: " + muted);
//TODO 实现处理自己静麦状态变化的逻辑
} else {
Log.d("qtt_rtc", "远端用户 " + uid + " 静麦状态变化: " + muted);
//TODO 实现处理远端用户静麦状态变化的逻辑
}
}

@Override
public void onRoleStatusChanged(long uid, ChannelRole role) {
if (uid == 0) {
Log.d("qtt_rtc", "自己角色状态变化: " + role);
//TODO 实现处理自己角色状态变化的逻辑
} else {
Log.d("qtt_rtc", "远端用户 " + uid + " 角色状态变化: " + role);
//TODO 实现处理远端用户角色状态变化的逻辑
}
}
@Override
public void onNetworkStats(long uid, int txQuality, int rxQuality, RtcStat stat) {
if (uid == 0) {
Log.d("qtt_rtc", "自己网络情况:上行质量 " + txQuality + " 下行质量 " + rxQuality + " 上行丢包 " + stat.mUpLossRate + " 下行丢包 " + stat.mDownLossRate + " 端到端时延 " + stat.mRttAverage + " 抖动 " + stat.mJitter);
//TODO 实现处理自己网络情况的逻辑
} else {
Log.d("qtt_rtc", "uid: " + uid + " 用户网络情况:上行质量 " + txQuality + " 下行质量 " + rxQuality + " 上行丢包 " + stat.mUpLossRate + " 下行丢包 " + stat.mDownLossRate + " 端到端时延 " + stat.mRttAverage + " 抖动 " + stat.mJitter);
//TODO 实现处理其它用户网络情况的逻辑
}
}
@Override
public void onAudioRouteChanged(int route) {
Log.d("qtt_rtc", "音频路由变化");
//TODO 实现处理音频路由变化的逻辑
}

@Override
public void onSoundStateChanged(int state) {
Log.d("qtt_log", "播放音乐状态变化 " + state);
//TODO 实现处理播放音乐状态变化的逻辑
}

@Override
public void onEffectFinished(int effectId) {
Log.d("qtt_log", "音效播放完成 " + effectId);
//TODO 实现处理音效播放完成的逻辑
}
}

3. 进入频道

//以连麦角色进入频道
channelEngine.changeRole(ChannelRole.TALKER);
//设置频道名称。Appkey相同,并且频道名称相同的用户会进入同一个频道,可以互相通话。
//uid设置(32位无符号整形),用以区分用户,请保证同一个频道的用户uid唯一。
//如果填0,则由服务器分配,在onJoinSuccess里告知实际uid值
long uid = 0;
String channelId = "test1";
channelEngine.join( "",channelId,uid);

4. 离开频道

//对应channelEngine.join()进入频道
channelEngine.leave();

5. 释放资源

//ChannelEngine.GetChannelInstance();
channelEngine.delete();
channelEngine = null;
野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题