统计与日志功能提供了通话统计信息获取和日志管理功能。该功能允许应用层获取通话质量统计、上报事件、记录和管理日志文件,为问题诊断和性能优化提供数据支持。
在通话过程中获取统计信息:
// 获取简单统计信息 - 获取通话基本统计信息
const XYStatistics& stats = NemoSdkAdaptor::getInstance()->getStatistics();
// 获取详细统计信息 - 获取通话详细统计信息
const XYDetailStatistics& detailStats = NemoSdkAdaptor::getInstance()->getDetailStatistics();
// 上报事件 - 上报事件类型、名称和值
NemoSdkAdaptor::getInstance()->eventReport("event_type", "event_name", "event_value");
管理SDK日志:
// 记录日志 - 记录指定级别的日志信息
NemoSdkAdaptor::getInstance()->log("log_level", "log_message");
// 上传日志 - 上传日志文件到服务器
NemoSdkAdaptor::getInstance()->logUpload();
// 取消日志上传 - 取消正在进行的日志上传
NemoSdkAdaptor::getInstance()->cancelLogUpload();
API: getStatistics
接口定义:
virtual const XYStatistics& getStatistics() = 0;
参数: 无
返回值:
返回XYStatistics类型的统计信息, 简单统计信息
示例:
// 获取通话简单统计信息
const XYStatistics& stats = NemoSdkAdaptor::getInstance()->getStatistics();
qDebug() << "通话统计信息:" << stats.toString();
API: getDetailStatistics
接口定义:
virtual const XYDetailStatistics& getDetailStatistics() = 0;
参数: 无
返回值:
返回XYDetailStatistics类型的统计信息, 详细统计信息
示例:
// 获取通话详细统计信息
const XYDetailStatistics& detailStats = NemoSdkAdaptor::getInstance()->getDetailStatistics();
qDebug() << "详细统计信息:" << detailStats.toString();
API: eventReport
接口定义:
virtual void eventReport(const char* category, const char* eventName, const char* eventValue) = 0;
参数:
category
: const char* - 事件类型eventName
: const char* - 事件名称eventValue
: const char* - 事件带的一些值(json字符串)返回值: 无
示例:
// 上报用户事件
NemoSdkAdaptor::getInstance()->eventReport("user_action", "button_click", "{\"button\":\"login\"}");
// 上报错误事件
NemoSdkAdaptor::getInstance()->eventReport("error", "network_timeout", "{\"timeout\":5000}");
API: log
接口定义:
virtual void log(const char* log) = 0;
参数:
log
: const char* - 日志信息返回值: 无
示例:
// 记录调试日志
NemoSdkAdaptor::getInstance()->log("SDK initialization started");
// 记录信息日志
NemoSdkAdaptor::getInstance()->log("User logged in successfully");
API: logUpload
示例:
NemoSdkAdaptor::getInstance()->logUpload();
API: cancelLogUpload
示例:
NemoSdkAdaptor::getInstance()->cancelLogUpload();
API: getDumpFlagValue
参数:
logType
: 日志类型示例:
// 获取音频日志标识
std::string audioFlag = NemoSdkAdaptor::getInstance()->getDumpFlagValue("audio");
API: setMediaDumpMask
参数:
maskValue
: 掩码值示例:
NemoSdkAdaptor::getInstance()->setMediaDumpMask("audio_mask");
API: saveDump
参数:
dumpPath
: Dump文件保存路径示例:
NemoSdkAdaptor::getInstance()->saveDump("C:/logs/meeting_dump.log");
API: enableAudioDump
示例:
NemoSdkAdaptor::getInstance()->enableAudioDump();
API: enableAECMode
参数:
enabled
: 是否启用回声消除示例:
NemoSdkAdaptor::getInstance()->enableAECMode(true);
class StatisticsLogManager {
private:
bool _isAudioDumpEnabled = false;
bool _isAECEnabled = true;
bool _isLogUploading = false;
public:
// 统计信息管理
void getSimpleStatistics() {
NemoSdkAdaptor::getInstance()->getStatistics();
}
void getDetailedStatistics() {
NemoSdkAdaptor::getInstance()->getDetailStatistics();
}
void reportEvent(const std::string& eventType, const std::string& eventData) {
NemoSdkAdaptor::getInstance()->eventReport(eventType, eventData);
}
// 日志管理
void logMessage(const std::string& level, const std::string& message) {
NemoSdkAdaptor::getInstance()->log(level, message);
}
void uploadLogs() {
if (!_isLogUploading) {
NemoSdkAdaptor::getInstance()->logUpload();
_isLogUploading = true;
}
}
void cancelLogUpload() {
if (_isLogUploading) {
NemoSdkAdaptor::getInstance()->cancelLogUpload();
_isLogUploading = false;
}
}
// 音频Dump管理
void enableAudioDump() {
if (!_isAudioDumpEnabled) {
NemoSdkAdaptor::getInstance()->enableAudioDump();
_isAudioDumpEnabled = true;
}
}
void setAECMode(bool enabled) {
_isAECEnabled = enabled;
NemoSdkAdaptor::getInstance()->enableAECMode(enabled);
}
// 日志上传回调
void onLogUploadResult(const XYString& code, const XYString& result) {
QString errCode(code.str());
QString resultStr(result.str());
if (errCode == SDKError_NoError) {
qDebug() << "Log upload successful:" << resultStr;
_isLogUploading = false;
emit logUploadSuccess(resultStr);
} else {
qDebug() << "Log upload failed:" << errCode;
_isLogUploading = false;
emit logUploadFailed(errCode);
}
}
void onLogUploadProgressChanged(const XYString& progress) {
QString progressStr(progress.str());
qDebug() << "Log upload progress:" << progressStr;
emit logUploadProgressChanged(progressStr);
}
// 资源使用回调
void onResUsageReport(const XYString& usageInfo) {
QString usageStr(usageInfo.str());
qDebug() << "Resource usage report:" << usageStr;
emit resourceUsageReport(usageStr);
}
// Getter方法
bool isAudioDumpEnabled() const { return _isAudioDumpEnabled; }
bool isAECEnabled() const { return _isAECEnabled; }
bool isLogUploading() const { return _isLogUploading; }
};
日志级别 | 说明 | 使用场景 |
| 调试信息 | 开发调试阶段 |
| 一般信息 | 正常运行信息 |
| 警告信息 | 潜在问题提醒 |
| 错误信息 | 错误和异常 |
| 致命错误 | 严重错误 |
统计信息功能提供以下特性:
日志管理功能包括:
音频Dump功能支持:
方法 | 描述 | 链接 |
获取通话简单统计信息 | ||
获取通话详细统计信息 | ||
上报事件 | ||
通过SDK记录日志 | ||
日志上传 | ||
取消日志上传 | ||
根据日志类型获取会中日志标识 | ||
更新会中dump日志 | ||
保存会中详细日志Dump | ||
保存音频Dump | ||
ae audio dump 入会前设置,dump本次会叫总的音频数据 | ||
是否开启小鱼回声消除功能(默认启用) | ||
取消aedumper | ||
标记AEDumper | ||
ae audio dump 入会前设置,dump本次会叫总的音频数据(加密) |
回调 | 描述 | 链接 |
日志上传结果回调 | ||
日志上传进度变化回调 | ||
资源使用报告回调 |