你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
通话录制概述
通话记录提供一组用于开始、停止、暂停和恢复记录的 API,使你能够记录 Azure 通信服务中提供的多个通话场景。 无论是 PSTN、WebRTC 还是 SIP 通话,都可以从服务器端业务逻辑访问这些 API。 此外,告知服务器应用程序开始录制的用户操作可以触发录制。
根据你的业务需求,可以将通话记录用于不同的 Azure 通信服务通话实现。
例如,可以录制 1:1 或 1:N 音视频通话:
此外,还可以使用通话记录来记录由通话自动化管理的复杂 PSTN 或 VoIP 入站和出站通话工作流。
无论如何建立通话,使用通话记录都能够生成混合或非混合媒体文件,这些文件会在内置临时存储中存储 24 小时。 可以检索文件,并将其移动到你自己的 Azure Blob 存储(自带存储)或你选择的存储解决方案。 通话录制支持所有 Azure 通信服务数据区域。
支持业务需求的通话记录
通话记录支持多种媒体输出和内容类型,以解决业务需求和用例需求。 对于保存记录、会议笔记、指导和培训,甚至合规性和遵从性等场景,可以使用混合格式。 或者,可以使用非混合音频格式来解决质量保证用例或更复杂场景的需求,例如高级分析或基于 AI(人工智能)的复杂通话后流程。
视频
渠道类型 | 内容格式 | 解决方法 | 采样率 | 比特率 | 数据速率 | 输出 | 说明 |
---|---|---|---|---|---|---|---|
混合 | mp4 | 1920x1080,16 FPS(每秒帧数) | 16 kHz | 1 mbps | 7.5 MB/分钟* | 单个文件,单个通道 | 默认 3x3(最活跃发言者)平铺排列的混合视频,支持显示名称 |
音频
渠道类型 | 内容格式 | 采样率 | 比特率 | 数据速率 | 输出 | 说明 |
---|---|---|---|---|---|---|
混合 | mp3 | 16 kHz | 48 kbps | 0.36 MB/分钟* | 单个文件,单个通道 | 所有参与者的混合音频 |
混合 | wav | 16 kHz | 256 kbps | 1.92 MB/分钟 | 单个文件,单个通道 | 所有参与者的混合音频 |
unmixed | wav | 16 kHz | 256 kbps | 每通道 1.92 MB/分钟* | 单个文件,最多 5 个 wav 通道 | 非混合音频,每个通道一个参与者,最多 5 个通道 |
[*NOTE] Mp3 和 Mp4 格式使用有损压缩,导致比特率可变;因此,前面的表中的数据速率值反映了理论最大值。 WAV 格式是未压缩的并且比特率是固定的,因此数据速率计算是准确的。
使用我们的通话记录 API 来完全控制录制内容
可以使用通话记录 API 通过内部业务逻辑触发器(例如创建群组通话并记录对话的应用程序)来管理记录内容。 此外,告知服务器应用程序开始录制的用户操作可以触发录制。 通话记录 API 专门使用 serverCallId
来启动记录。 若要了解如何获取 serverCallId
,请查看通话记录快速入门。
当开始记录时,将返回 recordingId
,然后可将其用于后续操作(如暂停和继续)。
操作 | 操作对象 | 评论 |
---|---|---|
开始记录 | serverCallId |
返回 recordingId |
获取录制状态 | recordingId |
返回 RecordingStateResult |
暂停录制 | recordingId |
通过暂停和恢复通话录制,可以跳过录制通话或会议的某一部分,并继续录制到单个文件。 |
继续录制 | recordingId |
恢复暂停的录制操作。 内容与暂停前的内容包含在同一文件中。 |
停止录制 | recordingId |
停止录制,并启动最终媒体处理以便文件下载。 |
事件网格通知
通话记录使用 Azure 事件网格为你提供与媒体和元数据相关的通知。
注意
Azure 通信服务为录像提供短期媒体存储。 记录在 24 小时内可供下载。 24 小时后,记录不再可用。
通常在记录过程完成(例如会议结束,记录停止)后几分钟可检索记录,此时会发布事件网格通知 Microsoft.Communication.RecordingFileStatusUpdated
。 录制事件通知包括 contentLocation
和 metadataLocation
,用于检索录制的媒体和录制元数据文件。
通知架构引用
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}/recordingId/{recordingId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for retrieving from storage
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
"metadataLocation": <string>, // url of the metadata for this chunk
"contentLocation": <string>, // url of the mp4, mp3, or wav for this chunk
"deleteLocation": <string> // url of the mp4, mp3, or wav to delete this chunk
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft", etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
元数据架构参考
{
"resourceId": <string>, // stable resource id of the Azure Communication Services resource recording
"callId": <string>, // id of the call
"chunkDocumentId": <string>, // object identifier for the chunk this metadata corresponds to
"chunkIndex": <number>, // index of this chunk with respect to all chunks in the recording
"chunkStartTime": <string>, // ISO 8601 datetime for the start time of the chunk this metadata corresponds to
"chunkDuration": <number>, // [Chunk duration has a maximum of 4 hours] duration of the chunk this metadata corresponds to in milliseconds
"pauseResumeIntervals": [
"startTime": <string>, // ISO 8601 datetime for the time at which the recording was paused
"duration": <number> // duration of the pause in the recording in milliseconds
],
"recordingInfo": {
"contentType": <string>, // content type of recording, e.g. audio/audioVideo
"channelType": <string>, // channel type of recording, e.g. mixed/unmixed
"format": <string>, // format of the recording, e.g. mp4/mp3/wav
"audioConfiguration": {
"sampleRate": <number>, // sample rate for audio recording
"bitRate": <number>, // bitrate for audio recording
"channels": <number> // number of audio channels in output recording
},
"videoConfiguration": {
"longerSideLength": <number>, // longerSideLength for video recording
"shorterSideLength": <number>, // shorterSideLength for video recording
"frameRate": <number>, // frameRate for video recording
"bitRate": <number> // bitrate for video recording
}
},
"participants": [
{
"participantId": <string>, // participant identifier of a participant captured in the recording
"channel": <number> // channel the participant was assigned to if the recording is unmixed
}
]
}
法规和隐私问题
许多国家/地区都有适用于通话记录的法律和法规。 PSTN、语音通话和视频通话通常要求用户同意记录其通话。 您有责任依法使用通话录音功能。 您必须以遵循适用于各参与者的法律的方式,获得录制的通信内容所涉及的各方的同意。
针对个人数据维护的法规要求能够导出用户数据。 为了满足这些要求,记录元数据文件在 participants
数组中包含每个通话参与者的 participantId
。 可以将 participants
数组中的 Azure 通信服务用户身份与内部用户身份进行交叉引用,以标识通话参与者。
后续步骤
下面是一些你可能感兴趣的文章: