该问题的原因是因为 Composite Recording API 函数返回了一个空的 sid 值,导致录音失败。解决方法是在调用 start 函数前,确保已经成功加入了频道并获取到了有效的 sid 值。具体的示例代码如下:
// 实现 Agora Composite Recording API 的流程示例 AgoraRecordingConfig config; config.channelId = "your_channel_id"; // 替换为实际的频道 ID config.decodeAudio = true; config.decodeVideo = true; config.decodeMode = AgoraReplayDecodeMode::FAST;
// 加入频道 agora::rtc::IRtcEngine* rtcEngine = createAgoraRtcEngine(); rtcEngine->joinChannel(nullptr, config.channelId.c_str(), nullptr, 0);
// 获取 sid 值 agora::rtc::RtcStats stats; rtcEngine->getCallStats(stats); std::string sid = std::to_string(stats.uid);
// 启动录音 agora::recording::IRecordingEngine* recordingEngine = agora::recording::IRecordingEngine::createAgoraRecordingEngine(APP_ID); recordingEngine->setLogFileSize(FILE_SIZE_KB); recordingEngine->setLogLevel(agora::recording::LOG_LEVEL_INFO); recordingEngine->setMixingLayout(config.mixConfig); recordingEngine->setMaxRecordingTime(config.maxRecordingTime);
auto sidStatus = recordingEngine->startService(config.appliteDir.c_str()); if (sidStatus == agora::recording::RECORDING_WARNING::RECORDING_WARNING_COMPOSITE_SUID_EMPTY) { sidStatus = recordingEngine->setUid(sid.c_str(), agora::rtc::uid_t(stats.uid)); }
auto startStatus = recordingEngine->startCompositeRecording(config.mixMode.c_str(), config.mixConfig.c_str(), sid.c_str()); if (startStatus != agora::recording::RECORDING_ERR::RECORDING_ERR_OK) { // 处理失败逻辑 }
// 等待录音完成 recordingEngine->stopService();