跳到主要内容

双向对讲

更新时间:2026-04-03 11:20:37

语音通话

双向对讲只在直播时可用

// 导入头文件
import 'package:airtc_engine/src/audio_video_talk/rtcx_audio_video_talk.dart';
import 'package:airtc_engine/src/audio_video_talk/rtcx_audio_video_talk_controller.dart';
class RTCXFluAudioVideoTalkApi {
/// 初始化音视频通话对象
void initTalk(RTCXFluAudioVideoTalkReq req);

/// 开始通话
void startTalk();

/// 结束通话
void endTalk();

/// 设置音视频通话质量
void setAudioVideoTalk(RTCXFluAudioVideoTalkConfig config);

/// 设置麦克风是否静音 YES: 静音 NO:不静音
RTCXFluAudioVideoResult setMuteLocalAudio(bool mute);

/// 设置摄像头是否开启 YES: 关闭摄像头 NO:开启摄像头
RTCXFluAudioVideoResult setMuteLocalVideo(bool mute);

/// 切换前后摄像头 暂时未实现
/// 切换前后摄像头 front暂未启用,前后摄像头切换无需参数控制,completionCallback: 摄像头前后切换完成回调,在此回调之后再进行下一次的切换,防止crash
void setSwitchCamera();

/// 释放音视频通话对象 (SDK没有,但封装后,内部引用,需手动释放)
void release();
}

调用示例如下:

  1. 初始化设置
// 1. 创建实例
// 语音对讲
final RTCXFluAudioVideoTalkController _talkApi = RTCXFluAudioVideoTalkController();

// 2. 初始化设置
@override
void initState() {
super.initState();
// 初始化通话对象
_talkApi.initTalk(
RTCXFluAudioVideoTalkReq(
type: RTCXFluAudioVideoTalkType.RTCXFluAudioVideoTalkType_Audio,
iotId: widget.iotId,
productKey: widget.productKey,
deviceName: widget.deviceName,
deviceType: widget.deviceType,
),
);
// 添加监听
_talkApi.onTalkError.listen((error) {
print('通话错误: $error');
});
}



// 释放
@override
void dispose() {
_talkApi.release();
super.dispose();
}
  1. 开始通话 开始通话需要麦克风权限,请先获取权限授权,再调用startTalk。可以使用Permission来获取授权。
    final micStatus = await Permission.microphone.request();
if (micStatus.isGranted) {
// 开始通话
_talkApi.startTalk();
} else {
print(micStatus.toString());
print("需要麦克风权限才能进行通话");
}
  1. 结束通话
    // 结束通话
_talkApi.endTalk();
  1. 设置麦克风是否静音
  // 设置麦克风是否静音
Future<void> setMuteLocalAudio(bool mute) async {
try {
RTCXFluAudioVideoResult result = await _talkApi.setMuteLocalAudio(mute);
if(result.result) {
// 设置成功
print("设置成功");
} else {
print("设置失败");
}
} catch (e) {
print("setMuteLocalAudio e:" + e.toString());
}
}

备注:当onTalkError:回调error.code = -10023时,代表当前语音对讲通道被其他端占用,应结束对讲。

视频通话

调用示例如下:

  1. 初始化设置
// 1. 创建实例
// 视频对讲
final RTCXFluAudioVideoTalkController _talkApi = RTCXFluAudioVideoTalkController();

// 2. 初始化设置
@override
void initState() {
super.initState();
// 初始化通话对象
_talkApi.initTalk(
RTCXFluAudioVideoTalkReq(
type: RTCXFluAudioVideoTalkType.RTCXFluAudioVideoTalkType_Video,
iotId: widget.iotId,
productKey: widget.productKey,
deviceName: widget.deviceName,
deviceType: widget.deviceType,
),
);
// 添加监听
_talkApi.onTalkError.listen((error) {
print('通话错误: $error');
});
}



// 释放
@override
void dispose() {
_talkApi.release();
super.dispose();
}
  1. 开始通话 开始视频通话需要麦克风和相机权限,请先获取权限授权,再调用startTalk。可以使用Permission来获取授权。
    final micStatus = await Permission.microphone.request();
final cameraStatus = await Permission.camera.request();
if (micStatus.isGranted && cameraStatus.isGranted) {
// 开始通话
_talkApi.startTalk();
} else {
print(micStatus.toString());
print(cameraStatus.toString());
}
  1. 结束通话
    // 结束通话
_talkApi.endTalk();
  1. 设置视频通话质量
  // 设置音视频通话质量
void setAudioConfig() {
RTCXFluAudioVideoTalkConfig config = RTCXFluAudioVideoTalkConfig(
audioTalk: false,
videoTalk: true,
videoResolutionRatioWidth: 640,
videoResolutionRatioHeight: 360,
videoFps: 15,
videoMaxBitrate: 900000,
);
_talkApi.setAudioVideoTalk(config);
}
  1. 设置摄像头是否开启
  // 设置摄像头是否开启
Future<void> setMuteLocalVideo(bool mute) async {
try {
RTCXFluAudioVideoResult result = await _talkApi.setMuteLocalVideo(mute);
if(result.result) {
// 设置成功
print("设置成功");
} else {
print("设置失败");
}
} catch (e) {
print("setMuteLocalVideo e:" + e.toString());
}
}
  1. 切换前后摄像头
  // 切换前后摄像头
void setSwitchCamera() {
_talkApi.setSwitchCamera();
}

备注:当onTalkError:回调error.code = -10023时,代表当前视屏通话通道被其他端占用,应结束视频通话。