news 2026/7/9 13:17:29

傲瑞视频会议是如何实现AI会议纪要的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
傲瑞视频会议是如何实现AI会议纪要的?

对于视频会议软件而言,会议纪要功能现在几乎成了标配,为会议结束后回顾会议内容提供了极大的方便,省去了大量的人力。接下来我们以 傲瑞会议(OrayMeeting)为例,来介绍会议纪要功能的具体实现。

傲瑞会议纪要功能基于会议实时音视频数据流,实时采集会议语音音频。借助AI能力完成语音实时转写、语义规整与核心信息提炼,自动生成标准化的会议纪要。 并且客户端可实现全文内容与重点摘要分层渲染展示,全面满足会议全流程智能化纪要生成及归档管理的业务需求。 傲瑞视频会议的纪要功能的效果如下图所示:

一、功能说明

(1)主持人创建会议时,可勾选控制是否开启会议纪要。

(2)如果创建时没有开启纪要,也可以在会议进行过程中通过设置菜单手动开启。

(3)纪要功能开启后,服务端实时采集参会人发言音频,通过ASR语音转写与智能纪要接口自动整理成文,并实时推送至所有参会人员。

(4)参会者可实时查看动态更新的纪要内容,会议纪要完成后还能一键复制导出完整纪要内容,方便留存查阅。

二、实现原理

要实现会议纪要功能,有两个地方需要用到AI功能。

(1)实时语音转文字(ASR)。

(2)会议摘要生成。

傲瑞会议支持两种方式接入AI功能:

(1)利用大厂发布的AI服务(如讯飞在公网提供的服务接口)。

(2)私有部署本地大模型(如FunASR、QWen)。

接入的两种AI能力,通过统一的接口规范起来,在部署的时候可以自由选择配置。

三、服务端实现

(1)AI 能力对接

服务端实时拉取会议音频码流,同步转发至 AI 语音转写模型,实现语音到文本的实时转换;经由 AI 大模型完成语句规整、冗余语气词过滤、内容梳理归纳及会议重点萃取。

首先是语音识别接口IASRWebApi,其定义如下:

/// <summary> /// 语音识别WebApi调用接口 /// </summary> public interface IASRWebApi { /// <summary> /// 每返回一段有效识别文本时触发 /// </summary> event Action<VoiceDictationModel> AudioConvertSucceeded; /// <summary> /// 初始化ASR识别会话 /// </summary> /// <param name="index">会话索引</param> /// <param name="speakerID">说话人</param> /// <param name="startTime">本次语音片段采集起始时间</param> void Init(int index, string speakerID, DateTime startTime); /// <summary> /// 单次完整说话结束调用,告知ASR引擎做断句、完整识别输出 /// </summary> /// <param name="endTime">语音采集结束时间</param> /// <param name="isEnd">是否为整轮会话完全结束;true=关闭连接销毁会话,false=仅单句停顿结束</param> void AudioEndNotify(DateTime endTime, bool isEnd = false); /// <summary> /// 异步入队一段PCM音频分片数据,推送到ASR WebApi进行流式识别 /// </summary> /// <param name="pcmData">PCM音频</param> /// <param name="_status">音频的发送状态;0:第一帧;1:继续帧;2:最后一帧 等</param> Task EnqueueAudioChunk(byte[] pcmData, int _status = -1); }

会议纪要接口IMeetingSumWebApi,其定义如下:

/// <summary> /// 会议纪要生成WebApi调用接口 /// </summary> internal interface IMeetingSumWebApi { /// <summary> /// 发起会议纪要/摘要生成请求 /// </summary> /// <param name="speechModels">语音识别结果集合</param> /// <param name="isCompleteContent">true生成完整正式纪要,false为实时片段摘要</param> /// <returns> /// 第一个bool:true=接口调用正常,第二个string=生成的会议摘要/完整纪要文案;失败时返回错误描述 /// </returns> Task<(bool, string)> Ask(List<VoiceDictationModel> speechModels, bool isCompleteContent = false); }

(2)调用ASR与会议纪要接口

服务端在拿到发言人的语音数据后,会首先调用IASRWebApi将其转换为文字。

private async void Connector_AudioMixed(string speakerID, byte[] pcm, bool isSilent) { try { if (!enable || !working) return; if (GlobalOptions.Enable_Local_Deploy) //使用本地部署ASR { lastRecognizer?.EnqueueAudioChunk(pcm); } else { _audioBuffer.Enqueue(item: pcm); } if (!string.IsNullOrEmpty(speakerID)) { currentSpeakerID = speakerID; } if (lastRecognizer == null && !string.IsNullOrEmpty(currentSpeakerID) && !isSilent) { index++; startTime = currentTime; lastRecognizer = CommonTool.GetASRWebApi(); lastRecognizer.Init(index, Tool.GetRealID4OMCS(currentSpeakerID), startTime); lastRecognizer.AudioConvertSucceeded += Recognizer_AudioConvertSucceeded; } SendAudioData(); } catch (Exception ex) { Program.Logger.Log(ex, "MeetingSpeech.Connector_AudioMixed", ErrorLevel.Standard); } }

当需要生成会议纪要时,调用 IMeetingSumWebApi 接口:

try { int count = voiceDictationModels.Count; int current = _lastIndex; var batch = new List<VoiceDictationModel>(); if (count != 0) { while (current < count) { var item = voiceDictationModels[current]; batch.Add(item); current++; } if (batch.Any()) { Interlocked.Exchange(ref _lastIndex, current); IMeetingSumWebApi sdk2 = CommonTool.GetSumWebApi(); var (ok2, msg2) = await sdk2.Ask(batch); if (ok2) { Console.WriteLine("TakeNextBatch1"); OnTextOptimized?.Invoke(this.meetingID, msg2, batch[batch.Count - 1].IsEnd); } else { Console.WriteLine("实时的会议纪要接口返回失败:" + msg2); } } } if (!working && (index == 0 || voiceDictationModels.Any() && voiceDictationModels[count - 1].Index == index)) { Console.WriteLine("TakeNextBatch2"); GetCompleteMeetingMinutes(); } } catch (Exception ex) { Program.Logger.Log(ex, "MeetingSpeech.TakeNextBatch", ErrorLevel.Standard); }

(3)记录存储

将语音实时转写文本、AI 完整会议纪要、会议重点摘要及相关元数据封装为统一数据对象,以 JSON 格式序列化后写入 TXT 文件进行本地持久化保存。统一文件命名与存储目录规范,便于后续纪要查阅、内容复用与历史记录检索,保障会议全量资料完整留存、可追溯可复用。

internal void Save() { try { string data = JsonConvert.SerializeObject(this); ESBasic.Helpers.FileHelper.GenerateFile(MeetingCacheFilePath, data); } catch (Exception ee) { Program.Logger.Log(ee, "MeetingMinutesCache.Save", ErrorLevel.Standard); } }

四、通信消息交互

傲瑞会议采用 ESFramework 完成客户端与服务端的实时通信,统一制定与会议纪要相关的业务消息协议。定义会议起始、AI 纪要分段下发、纪要生成完成等标准消息指令。依托标准协议标识规整消息交互逻辑,依托协议编号区分不同业务数据流,便于后续交互流程核查、问题定位与功能迭代,保障通信交互规范可追溯、易维护。

/// <summary> /// 开启会议纪要 /// </summary> public int OpenMeetingMinutes { get; set; } = 665; /// <summary> /// 关闭会议纪要 /// </summary> public int CloseMeetingMinutes { get; set; } = 666; /// <summary> /// 实时转写的纪要内容 | 服务端=>客户端 /// </summary> public int MeetingSpeechSegment { get; set; } = 667; /// <summary> /// 完整的会议纪要 | 服务端=>客户端 /// </summary> public int MeetingSummary { get; set; } = 668; /// <summary> /// 客户端请求历史会议纪要 /// </summary> public int RequestMeetingMinutes { get; set; } = 669;

五、客户端

(1)UI 控制

会议主界面预留会议纪要功能独立入口,支持手动启停纪要服务。同时提供纪要面板展开 / 收起、内容复制等常用操作入口,界面布局简洁易用,操作逻辑直观便捷。

(2)纪要内容渲染

基于 ESFramework 内置IChatRender消息渲染组件,可快速实现类似腾讯会议的纪要消息排版展示效果。客户端监听服务端实时推送的分段纪要数据,采用增量拼接、动态渲染机制,完成内容实时刷新。对完整纪要、AI 重点摘要、发言人信息、时间节点等重要信息进行清晰的展示。

以上就是 傲瑞视频会议 借助AI来实现会议纪要功能的基本原理和方案,有什么疑问或建议的,欢迎留言讨论交流,谢谢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 13:16:37

蓝牙5.4 LE Audio方案设计与优化实践

1. 项目背景与核心组件选型 在无线音频传输领域&#xff0c;Bluetooth 5.4标准的推出标志着LE Audio技术进入成熟应用阶段。这个项目选择了IDC777-1蓝牙模块与PIC18F55K42微控制器的组合方案&#xff0c;主要基于以下技术考量&#xff1a; IDC777-1是IOT747推出的全集成功耗优…

作者头像 李华
网站建设 2026/7/9 13:16:03

锂离子电池组电压平衡方案:MCP3202与PIC18F45K50应用

1. 项目背景与核心需求 在锂离子电池组应用中&#xff0c;串联电池之间的电压不平衡是一个常见且棘手的问题。当多个电池串联使用时&#xff0c;由于制造工艺差异、温度分布不均或老化程度不同&#xff0c;各单体电池的电压会出现偏差。这种不平衡如果得不到及时纠正&#xff0…

作者头像 李华
网站建设 2026/7/9 13:14:28

3分钟搞定!让你的Mac微信消息永远不被撤回

3分钟搞定&#xff01;让你的Mac微信消息永远不被撤回 【免费下载链接】WeChatIntercept 微信防撤回插件&#xff0c;一键安装&#xff0c;MAC可用&#xff0c;支持最新v4.1.10微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 还在为错过重要消息而烦…

作者头像 李华
网站建设 2026/7/9 13:14:20

数字电路上拉与下拉电阻设计及PIC18F4610应用

1. 信号上拉与下拉的基础概念解析在数字电路设计中&#xff0c;上拉&#xff08;Pull-up&#xff09;和下拉&#xff08;Pull-down&#xff09;是两种常见的信号处理技术。它们通过在信号线上添加电阻连接到电源&#xff08;VCC&#xff09;或地&#xff08;GND&#xff09;&am…

作者头像 李华
网站建设 2026/7/9 13:12:43

PIC32MX上拉下拉电阻配置与信号切换实践

1. 信号上拉与下拉的基础原理在数字电路设计中&#xff0c;上拉&#xff08;Pull-up&#xff09;和下拉&#xff08;Pull-down&#xff09;是两种常见的信号线处理方式。它们通过电阻将信号线连接到电源&#xff08;VCC&#xff09;或地&#xff08;GND&#xff09;&#xff0c…

作者头像 李华
网站建设 2026/7/9 13:09:43

STM32与PAM8904实现可编程报警系统设计

1. 项目背景与核心需求 在工业控制、智能家居和安防系统中&#xff0c;可靠的通知机制是保障系统安全运行的关键环节。传统蜂鸣器直接驱动方案存在音量不可调、音色单一等问题&#xff0c;而采用STM32F215ZG微控制器搭配PAM8904音频驱动芯片的方案&#xff0c;能够实现可编程的…

作者头像 李华