本文介绍实时记录与音视频文件记录接入流程。
如果您需要咨询更多产品技术问题,欢迎通过钉钉搜索群号44604776,加入通义听悟咨询群联系我们。
实时记录
使用须知
支持的输入格式:PCM(无压缩的PCM或WAV文件)、16 bit采样位数、单声道(mono)。
支持的音频采样率:16000 Hz、8000Hz。
支持的单次会议时长:24小时。
支持设置返回结果:是否返回中间识别结果。
支持设置多语言识别:中文、英文、粤语、中英自由说(长段中英混)。
支持设置开启翻译:翻译目标语言为中文、英文、中文&英文,支持会中开启或关闭。
支持设置同步音频转码:转码为比特率128kb/s的mp3格式音频,准实时写入的指定OSS。
支持设置会后纪要智能提取:是否开启有效音频片断检测,是否开启会中识别结果保存,智能提取关键词、关键句、小议题、待办事项。
交互流程
实时记录
步骤1:调用CreateMeetingTrans接口创建实时记录,对应交互流程1-2。
转写的管理粒度为会议,在完成会议创建后便可基于该会议体验会中实时语音推流转写。
步骤2:调用GetMeetingTrans接口查询实时记录状态,对应交互流程18-19。
步骤3:调用StopMeetingTrans接口结束实时记录,对应交互流程20-22。
结束记录后会进行智能纪要提取,并在完成时进行结果通知。
实时记录语音推流
在完成记录创建后,便可通过听悟提供的语音推流Java SDK/C++ SDK进行会中实时语音推流并接收识别结果。
步骤1:建立推流通道,对应交互流程3-5。
步骤2:推送识别语音,对应交互流程6、8、10、12。
线下会议时:单路语音,推流输入格式为PCM。
在线会议时:多路语音,创建会议时设置了参数AudioPackage为multi时,基于听悟约定的Protobuf格式封装多路音频,封装协议如下:
syntax = "proto3";
message MultiAudioFrame {
int32 frame_size = 1; // 数据包音频时长,单位毫秒
bytes mixed_data = 2; // 混音数据包,pcm格式
repeated ActiveAudioFrame active_frame = 3; // 活跃通道数据
int64 send_time = 4; // 数据包发送时间戳,单位毫秒
}
message ActiveAudioFrame {
bytes data = 2; // 发言人数据包,pcm格式
string speaker_id = 3; // 业务方发言人id标识
}
步骤3:接收识别结果,对应交互流程7、9、11、13。
客户端循环发送语音数据,持续接收识别结果:
句子开始事件(SentenceBegin)
句子开始事件表示服务端检测到了一句话的开始,听悟服务的智能断句功能会判断出一句话的开始与结束,示例如下。
{
"header": {
"namespace": "SpeechTranscriber",
"name": "SentenceBegin",
"status": 20000000,
"message_id": "a426f3d4618447519c9d85d1a0d1****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"index": 0,
"time": 0,
"speaker_id": "用户1"
}
}
对象参数说明:
参数 | 类型 | 说明 |
header | Object | 返回结果头信息。 |
namespace | String | 消息所属的命名空间,固定为:SpeechTranscriber。 |
name | String | 消息名称,SentenceBegin表示一个句子的开始。 |
task_id | String | 推流任务全局唯一ID,请记录该值,便于排查问题。 |
message_id | String | 本次消息的ID。 |
status | Integer | 状态码,表示请求是否成功,见服务状态码。 |
status_text | String | 状态消息。 |
payload | Object | 返回结果。 |
index | Integer | 句子编号,从0开始递增。 |
time | Integer | 当前已处理的音频时长,单位是毫秒。 |
speaker_id | String | 识别结果对应的说话人,单路识别和混音识别时不返回。 |
句中识别结果变化事件(TranscriptionResultChanged)
句中识别结果变化事件表示识别结果发生了变化,示例如下。
{
"header": {
"namespace": "SpeechTranscriber",
"name": "TranscriptionResultChanged",
"status": 20000000,
"message_id": "dc21193fada84380a3b6137875ab****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"index": 0,
"time": 1835,
"result": "北京的天",
"words": [
{
"text": "北京",
"startTime": 630,
"endTime": 930
},
{
"text": "的",
"startTime": 930,
"endTime": 1110
},
{
"text": "天",
"startTime": 1110,
"endTime": 1140
}
],
"speaker_id": "用户1"
}
}
对象参数说明:
参数 | 类型 | 说明 |
header | Object | 返回结果头信息。 |
namespace | String | 消息所属的命名空间,固定为:SpeechTranscriber。 |
name | String | 消息名称,TranscriptionResultChanged表示句中识别结果变化。 |
task_id | String | 推流任务全局唯一ID,请记录该值,便于排查问题。 |
message_id | String | 本次消息的ID。 |
status | Integer | 状态码,表示请求是否成功,见服务状态码。 |
status_text | String | 状态消息。 |
payload | Object | 返回结果。 |
index | Integer | 句子编号,从0开始递增。 |
time | Integer | 当前已处理的音频时长,单位是毫秒。 |
result | String | 当前句子的识别结果。 |
words | List<Object> | 当前句子的词信息。 |
text | String | 文本。 |
startTime | Integer | 词开始时间,单位为毫秒。 |
endTime | Integer | 词结束时间,单位为毫秒。 |
speaker_id | String | 识别结果对应的说话人,单路识别和混音识别时不返回。 |
句子结束事件(SentenceEnd)
句子结束事件表示服务端检测到了一句话的结束,并附带返回该句话的识别结果,示例如下。
{
"header": {
"namespace": "SpeechTranscriber",
"name": "SentenceEnd",
"status": 20000000,
"message_id": "c3a9ae4b231649d5ae05d4af36fd****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"index": 0,
"time": 1820,
"begin_time": 0,
"result": "北京的天气。",
"words": [
{
"text": "北京",
"startTime": 630,
"endTime": 930
},
{
"text": "的",
"startTime": 930,
"endTime": 1110
},
{
"text": "天气",
"startTime": 1110,
"endTime": 1380
}
],
"speaker_id": "用户1"
}
}
对象参数说明:
参数 | 类型 | 说明 |
header | Object | 返回结果头信息。 |
namespace | String | 消息所属的命名空间,固定为:SpeechTranscriber。 |
name | String | 消息名称,SentenceEnd表示句子结束。 |
task_id | String | 推流任务全局唯一ID,请记录该值,便于排查问题。 |
message_id | String | 本次消息的ID。 |
status | Integer | 状态码,表示请求是否成功,见服务状态码。 |
status_text | String | 状态消息。 |
payload | Object | 返回结果。 |
index | Integer | 句子编号,从0开始递增。 |
time | Integer | 当前已处理的音频时长,单位是毫秒。 |
result | String | 当前句子的识别结果。 |
words | List<Object> | 当前句子的词信息。 |
text | String | 文本。 |
startTime | Integer | 词开始时间,单位为毫秒。 |
endTime | Integer | 词结束时间,单位为毫秒。 |
speaker_id | String | 识别结果对应的说话人,单路识别和混音识别时不返回。 |
识别结果翻译事件(ResultTranslated)
识别结果翻译事件表示在开启翻译时服务端检测到识别结果并进行目标语言文本翻译,示例如下。
{
"header": {
"namespace": "SpeechTranscriber",
"name": "ResultTranslated",
"status": 20000000,
"message_id": "c3a9ae4b231649d5ae05d4af36fd****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
"source_message_id": "d4a9ae4b231649d5ae05d4af36fd****",
},
"payload": {
"speaker_id": "xxx",
"source_lang": "cn",
"target_lang": "en",
"translate_result": [
{
"text": "At that time.",
"index": 110,
"beginTime": 123000,
"endTime": 125000
},
{
"text": "xxx",
"index": 111,
"partial": true
}
]
}
}
对象参数说明:
参数 | 类型 | 说明 |
header | Object | 返回结果头信息。 |
namespace | String | 消息所属的命名空间,固定为:SpeechTranscriber。 |
name | String | 消息名称,ResultTranslated表示识别结果翻译。 |
task_id | String | 推流任务全局唯一ID,请记录该值,便于排查问题。 |
message_id | String | 本次消息的ID。 |
source_message_id | String | 本次翻译的源识别结果消息ID。 |
status | Integer | 状态码,表示请求是否成功,见服务状态码。 |
status_text | String | 状态消息。 |
payload | Object | 返回结果。 |
speaker_id | String | 识别结果对应的说话人标识,同推流pb传入;无此字段时表示单通道识别或混音流识别的翻译。 |
source_lang | String | 翻译的源语言。 |
target_lang | String | 翻译的目标语言。 |
translate_result | List<Object> | 识别结果翻译信息。 |
text | String | 翻译后的文本。 |
index | Integer | 翻译句子编号,从0开始递增。 |
partial | Boolean | 为true时对应非SentenceEnd的识别内容的翻译结果。 |
beginTime | Integer | 翻译句子的开始时间,单位为毫秒,在翻译SentenceEnd识别结果时会返回。 |
endTime | Integer | 翻译句子的结束时间,单位为毫秒,在翻译SentenceEnd识别结果时会返回。 |
记录中更新配置的Ack响应事件(UpdateConfigAck)
客户端发送UpdateConfig指令后听悟服务端会返回该指令的Ack消息,示例如下。
{
"header": {
"namespace": "SpeechTranscriber",
"name": "UpdateConfigAck",
"status": 20000000,
"message_id": "a426f3d4618447519c9d85d1a0d1****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Success."
},
"payload": {
"instruction_id": "9d139c48057ee287e0efe7e*****",
"error_code": "***",
"error_message": "***"
}
}
对象参数说明:
参数 | 类型 | 说明 |
header | Object | 返回结果头信息。 |
namespace | String | 消息所属的命名空间,固定为:SpeechTranscriber。 |
name | String | 消息名称,SentenceBegin表示一个句子的开始。 |
task_id | String | 推流任务全局唯一ID,请记录该值,便于排查问题。 |
message_id | String | 本次消息的ID。 |
status | Integer | 状态码,表示请求是否成功,见服务状态码。 |
status_text | String | 状态消息。 |
payload | Object | 返回结果。 |
instruction_id | String | 指令ID,会原样返回会中发送的UpdateConfig指令中的instruction_id。 |
error_code | String | 会中发送的UpdateConfig指令参数异常时该字段会返回错误码。 |
error_message | String | 会中发送的UpdateConfig指令参数异常时该字段会返回错误描述。 |
步骤4:暂停推流识别,对应交互流程14-15。
结束识别完成事件
参数 | 类型 | 说明 |
header | Object | 返回结果头信息。 |
namespace | String | 消息所属的命名空间,固定为:SpeechTranscriber。 |
name | String | 消息名称,TranscriptionCompleted表示此次推流识别完成,TaskFailed表示此次推流识别异常中断。 |
task_id | String | 推流任务全局唯一ID,请记录该值,便于排查问题。 |
message_id | String | 本次消息的ID。 |
status | Integer | 状态码,表示请求是否成功,见服务状态码。 |
status_text | String | 状态消息。 |
payload | Object | 返回结果。 |
步骤5:继续推流识别,对应交互流程16-17。
如在创建会议时设置MeetingResultEnabled为true,再次识别会基于已转码的音频推算出继续识别时的会议时间偏移。
如在创建会议时设置MeetingResultEnabled为false,需要在开始推送识别语音前,通过参数tw_time_offset设置继续识别的会议时间偏移(单位毫秒)。
结果通知
步骤1:接收记录后任务处理事件通知:对应交互流程23。
在创建会议设置MeetingResultEnabled为true时,通过在控制台配置的项目回调地址,接收任务状态变更事件,数据格式如下:
参数 | 类型 | 说明 |
Code | String | 状态码。 |
Message | String | 状态说明。 |
Data | Object | 结果对象。 |
MeetingId | String | 会议ID。 |
MeetingStatus | String | 会议状态。 NEW:新会议。 ONGOING:会议转写中。 PAUSED:会议转写暂停。 PRE_COMPLETE:会议转写结束后,进行会后智能提取。 COMPLETED:会议完成。 FAILED:会议转写结束后,会后智能提取失败。 INVALID:无效会议。 |
MeetingKey | String | 用户创建会议时设置的会议标识。 |
步骤2:查看记录后智能纪要结果。
在创建会议设置MeetingResultEnabled为true时,通过CreateMeetingTrans接口调用中设置的MeetingResultOssPath地址获取任务处理结果,JSON格式数据结构如下:
参数 | 类型 | 说明 |
MeetingId | String | 会议ID。 |
MeetingKey | String | 用户创建会议时设置的会议标识。 |
AudioDuration | Integer | 转写音频时长,单位毫秒。 |
KeywordLabResults | List<Object> | 智能提取的关键词详细信息。KeywordLabResults中的Object详细结构下文(1)有详细说明。 |
KeySentenceLabResults | List<Object> | 智能提取的关键句详细信息。KeySentenceLabResults中的Object详细结构下文(2)有详细说明。 |
TopicLabResults | List<Object> | 智能提取的小议题详细信息。TopicLabResults中的Object详细结构下文(3)有详细说明。 |
ActionLabResults | List<Object> | 智能提取的待办事项详细信息。ActionLabResults中的Object详细结构下文(4)有详细说明。 |
KeywordSimpleLabResults | List<Object> | 智能提取的关键词概览信息。是比较简洁的关键词列表。比KeywordLabResults中的内容更简洁。 KeywordSimpleLabResults中的Object详细结构下文(1)有详细说明。 |
AudioSegments | List<List<Integer>> | 有效音频片断范围,示例: [ [480,4410], // 480ms-4410ms区间为有效音频片断 [4930,9830], // 4930ms-9830ms区间为有效音频片断 ...... ] |
DocResult | Object | 音转文结果。 |
sc | List<Object> | segment content,片断数组。 |
tc | String | 片断文本,词级别。 |
id | Integer | 片断ID。 |
si | Integer | 片断句子ID序号。 |
bt | Integer | 片断起始相对音频的时间戳,单位毫秒。 |
et | Integer | 片断末尾相对音频的时间戳,单位毫秒。 |
ui | String | 用户ID。 |
(1)KeywordLabResults和KeywordSimpleLabResults中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 关键词内容。 |
(2)KeySentenceLabResults和TopicLabResults.titleKeySentences中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 关键句内容。 |
bt | Integer | 关键句开始相对音频的时间戳,单位毫秒。 |
et | Integer | 关键句结束相对音频的时间戳,单位毫秒。 |
si | List<Integer> | 关键句关联的句子ID序号。 |
(3)TopicLabResults中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 小议题内容。 |
bt | Integer | 小议题开始相对音频的时间戳,单位毫秒。 |
et | Integer | 小议题结束相对音频的时间戳,单位毫秒。 |
si | List<Integer> | 小议题关联的句子ID序号。第一个值是开始句子的ID,第二个值是结束句子的ID。 |
topicId | Integer | 小议题的序号 |
titleKeySentences | List<Object> | 小议题关联的关键句列表。titleKeySentences中的Object详细结构上文(2)有详细说明。 |
qaPairs | List<Object> | 一个议题中,qa问答对的列表。 qaPairs中的Object详细结构下文(5)有详细说明。 |
(4)ActionLabResults中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 待办事项内容。 |
bt | Integer | 待办事项开始相对音频的时间戳,单位毫秒。 |
et | Integer | 待办事项结束相对音频的时间戳,单位毫秒。 |
si | List<Integer> | 待办事项关联的句子ID序号。 |
(5)qaPairs中的Object数据结构如下:
参数 | 类型 | 说明 |
questionSentenceIds | List<Integer> | 表示qa问答中问题(question)的句子ID列表。 |
answerSentenceIds | List<Integer> | 表示qa问答中回答(answer)的句子ID列表。 |
音视频文件记录
使用须知
支持的音频格式:mp3、wav、m4a、wma、aac、ogg、amr、flac、mp4。
文件大小不超过4GB。
音频时长不超过4小时。
音频采样率8K/16K/24K/48K。
需要识别的录音文件必须存放在用户托管到听悟的OSS Bucket上。
支持的调用方式:轮询方式和回调方式。
支持设置多语言识别:中文、英文、粤语、中英自由说(长段中英混)。
交互流程
任务管理
步骤1:调用CreateFileTrans - 创建文件转写任务接口创建文件记录任务,对应交互流程3-4。
步骤2:调用GetFileTrans接口查询文件记录任务状态,对应交互流程5-6。
结果通知
步骤1:接收任务处理事件通知:对应交互流程10。
通过"控制台-创建项目-回调方式"配置的项目回调地址接收转写完成事件,数据格式如下:
参数 | 类型 | 说明 |
Code | String | 状态码。 |
Message | String | 状态说明。 |
Data | Object | 返回对象。 |
TransId | String | 任务ID。 |
TransStatus | String | 任务状态。 ONGOING:任务进行中。 COMPLETED:任务完成。 FAILED:任务失败 INVALID:无效任务。 |
TransKey | String | 用户创建任务时设置的任务标识。 |
步骤2:查看任务处理结果,对应交互流程11-12。
通过CreateFileTrans接口调用中设置的TransResultOssPath地址获取任务处理结果,JSON格式数据结构如下:
参数 | 类型 | 说明 |
TransId | String | 转写ID。 |
TransKey | String | 转写标识,同入参。 |
AudioSize | Integer | 文件大小,单位字节。 |
AudioDuration | Integer | 转写音频时长,单位毫秒。 |
DocResult | Object | 音转文结果。 |
pg | List<Object> | 段落数组。 |
pi | String | paragraph id, 段落ID。 |
ui | String | 用户ID。 |
sc | List<Object> | segment content,片断数组。 |
tc | String | 片断文本,词级别。 |
id | Integer | 片断ID。 |
si | Integer | 片断句子ID序号。 |
bt | Integer | 片断起始相对音频的时间戳,单位毫秒。 |
et | Integer | 片断末尾相对音频的时间戳,单位毫秒。 |
KeywordLabResults | List<Object> | 智能提取的关键词详细信息。KeywordLabResults中的Object详细结构下文(1)有详细说明。 |
KeySentenceLabResults | List<Object> | 智能提取的关键句详细信息。KeySentenceLabResults中的Object详细结构下文(2)有详细说明。 |
TopicLabResults | List<Object> | 智能提取的小议题详细信息。TopicLabResults中的Object详细结构下文(3)有详细说明。 |
ActionLabResults | List<Object> | 智能提取的待办事项详细信息。ActionLabResults中的Object详细结构下文(4)有详细说明。 |
KeywordSimpleLabResults | List<Object> | 智能提取的关键词概览信息。是比较简洁的关键词列表。比KeywordLabResults中的内容更简洁。 KeywordSimpleLabResults中的Object详细结构下文(1)有详细说明。 |
(1)KeywordLabResults和KeywordSimpleLabResults中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 关键词内容。 |
(2)KeySentenceLabResults和TopicLabResults.titleKeySentences中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 关键句内容。 |
bt | Integer | 关键句开始相对音频的时间戳,单位毫秒。 |
et | Integer | 关键句结束相对音频的时间戳,单位毫秒。 |
si | List<Integer> | 关键句关联的句子ID序号。 |
(3)TopicLabResults中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 小议题内容。 |
bt | Integer | 小议题开始相对音频的时间戳,单位毫秒。 |
et | Integer | 小议题结束相对音频的时间戳,单位毫秒。 |
si | List<Integer> | 小议题关联的句子ID序号。第一个值是开始句子的ID,第二个值是结束句子的ID。 |
topicId | Integer | 小议题的序号 |
titleKeySentences | List<Object> | 小议题关联的关键句列表。titleKeySentences中的Object详细结构上文(2)有详细说明。 |
qaPairs | List<Object> | 一个议题中,qa问答对的列表。 qaPairs中的Object详细结构下文(5)有详细说明。 |
(4)ActionLabResults中的Object数据结构如下:
参数 | 类型 | 说明 |
value | String | 待办事项内容。 |
bt | Integer | 待办事项开始相对音频的时间戳,单位毫秒。 |
et | Integer | 待办事项结束相对音频的时间戳,单位毫秒。 |
si | List<Integer> | 待办事项关联的句子ID序号。 |
(5)qaPairs中的Object数据结构如下:
参数 | 类型 | 说明 |
questionSentenceIds | List<Integer> | 表示qa问答中问题(question)的句子ID列表。 |
answerSentenceIds | List<Integer> | 表示qa问答中回答(answer)的句子ID列表。 |