调用 CreateSpeechTask 接口,创建声影同传任务。创建同传任务后,在转推时间段(StartTime 至 EndTime 期间)内,当您开始推流时,同传任务会自动拉取该直播流进行同传处理,并将经过同传处理的新直播流推送到指定的转推地址,从而实现在转推地址上直播同传处理后的内容。例如,您可以使用 OBS 开播,通过同传任务处理后,在抖音上直播同传处理后的内容。更多有关声影同传的内容,详见声影同传。
根据使用场景,选择合适的功能。
使用场景 | 推荐功能 | 参数配置 | 说明 |
|---|---|---|---|
为直播提供基础字幕,方便静音或嘈杂环境下观看。 | 原文 ASR 字幕 |
| 通过语音识别,在视频画面叠加原文字幕。 说明 目前实时流式出字方式仅支持中文和英文字幕,整句出字方式则支持更多语言。 |
进行跨语言文字交流,触达全球观众。 | 字幕翻译 |
| 通过语音识别,在视频画面叠加翻译字幕,但保留原声音频。 |
提供配音式翻译体验,如同观看译制片。 | 同传声音 |
| 提供同传声音,并替换原声。实时同传模式下,您可以选择让同传声音与原声叠加,或直接替换原声。 |
追求沉浸式真人翻译体验,提升专业性。 | 同传声音 + 数字人口型 |
| 在同传声音的基础上,通过 AI 技术驱动说话人口型与翻译音频同步,效果以假乱真。 |
注意
仅在使用视频直播的推拉流地址时,必须完成该准备。
AppName 和 StreamName,通过 GeneratePushURL - 生成推流地址和 GeneratePlayURL - 生成拉流地址生成一对地址,即用作源流地址的拉流地址和推送原始直播流的推流地址。AppName 和 StreamName,通过 GeneratePushURL - 生成推流地址和 GeneratePlayURL - 生成拉流地址生成一对地址,即用作转推地址的推流地址和拉取新直播流的拉流地址。说明
推送原始直播流的推流地址和拉取新直播流的拉流地址对协议没有明确限制,可根据实际情况选择合适的协议。
下表仅列出该接口特有的请求参数和部分公共参数。更多信息请见公共参数。
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| Action | String | 是 | CreateSpeechTask | 接口名称。当前 API 的名称为 CreateSpeechTask。 |
| Version | String | 是 | 2023-01-01 | 接口版本。当前 API 的版本为 2023-01-01。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
Name | String | 是 |
| 任务名称。该名称在所有运行中的任务中必须唯一。长度为 1-20 个字符。可包含以下字符:
|
| Rule | Object of Rule | 是 | - | 任务规则。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
Pipe | String | 是 |
| 任务类型。取值如下:
说明 取值为 |
Delay | Integer | 否 |
| 播出延迟时长,以保证同传声音和字幕的翻译处理完成。取值范围为
说明 如果字幕出现的时间要早于原声或画面,可适当降低播出延迟时长,让字幕与原声或画面对齐,反之亦然。 |
| Source | Object of Source | 是 | - | 源流配置。 |
StartTime | String | 否 |
| 任务开始时间。遵循 RFC3339 格式的东八区(UTC+8)时间,精度为秒。 |
EndTime | String | 否 |
| 任务结束时间,必须晚于任务开始时间( 说明 当任务结束、源流断开或拉流失败时,转推自动停止。 |
| Output | Object of Output | 是 | - | 转推配置。 |
SI | Object of SI | 否 |
| 声影同传模式配置。 说明 仅在 |
RealTime | Object of RealTime | 否 |
| 实时同传模式配置。 说明 仅在 |
Extra | Object of Extra | 否 |
| 额外配置。 说明 建议仅在开启同传声音时传入该参数。有关同传声音的相关参数配置,详见使用说明。 |
| Subtitle | Object of Subtitle | 否 | - | 字幕配置。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
Url | String | 是 |
| 源流地址,支持 RTMP 或 FLV 格式。从该地址拉取原始直播流,并进行同传处理。 说明 地址中不可直接包含多字节编码字符(如中文字符)。如需包含,必须对这些字符进行 URL 编码(URL-encode)。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
Url | Array of String | 是 |
| 转推地址,支持 RTMP 格式。同传任务会将经过同传处理的新直播流推送到该地址。 说明
|
| Callback | Object of Callback | 否 | - | 回调配置。 |
Sei | Array of String | 否 |
| 如需将字幕内容写入直播流的 SEI 消息,将参数值设置为 说明
|
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
LipSync | Boolean | 否 |
| 是否开启数字人口型功能。默认值为
|
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
VoiceShow | Boolean | 否 |
| 是否开启同传声音功能。默认值为
|
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| AMix | Object of AMix | 否 | - | 混音配置。 |
| Separator | Object of Separator | 否 | - | 人声与背景音分离配置。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| Position | Object of Position | 否 | - | 字幕位置。 |
Original | Object of Original | 是 |
| 原文字幕配置。 说明 原文与译文必须配置不同的语言。 |
Translation | Array of Translation | 否 |
| 译文字幕配置。 说明
|
| SubtitleTosConfig | Object of SubtitleTosConfig | 否 | - | TOS 配置,用于生成字幕 SRT 文件。 |
GlossaryMap | JSON Map | 否 |
| 关键词列表。默认为空。 注意
|
ReplaceMap | JSON Map | 否 |
| 易错词列表。默认为空。
注意
|
HotWords | Array of String | 否 |
| 热词列表。默认为空。 注意 仅对原文 ASR 字幕生效。有关原文 ASR 字幕的相关参数配置,详见使用说明。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| Url | String | 是 | https://xxx | 用于接收回调消息的地址。该地址需支持 HTTP 或 HTTPS 协议,并可通过公网访问。长度为 1 到 100 个字符。有关声影同传回调消息,详见声影同传回调消息。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
BGVolume | Float | 否 |
| 原声音量或背景音(非人声)的音量。默认值为
说明 仅在 |
AudioEnhance | Boolean | 否 |
| 是否开启音量均衡。默认值为
|
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
HandleType | Integer | 否 |
| 是否开启降噪模式。默认值为
注意
|
Separator | Boolean | 否 |
| 是否用同传声音替换原声。默认值为
说明 仅在 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
Relative | String | 否 |
| 字幕在画面中的位置。默认值为
|
MarginTb | Float | 否 |
| 字幕的上下边距,即字幕距离画面顶部或底部的距离。取值为画面高度的百分比,取值范围为
|
| MarginLr | Float | 否 | 0.2 | 字幕的左右边距,即字幕距离画面左右边缘的距离。取值为画面宽度的百分比,取值范围为 (0, 0.3]。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| Language | String | 是 | zh | 原文字幕语言。可通过 GetSpeechConfig 的 OriginalLang 获取当前账号字幕翻译和同传声音可使用的原文字幕语言,或通过该接口的AsrLang 获取当前账号可使用的原文 ASR 字幕语言,并传入 Key 值。 |
| Font | String | 否 | arial | 原文字幕字体,默认值为 arial。可通过 GetSpeechConfig 的 Font 获取当前账号下可使用的字体列表,并传入 Key 值。 |
| FontSize | Integer | 否 | 32 | 原文字幕字号。默认值为 40。取值范围为 [1,100]。 |
FontColor | String | 否 |
| 原文字幕的字体颜色。
说明
|
Alignment | Integer | 否 |
| 原文字幕对齐方式。默认值为
|
MaxRowNumber | Integer | 否 |
| 原文字幕最多显示的行数。默认值为
说明 原文和译文的行数限制单独计算。 |
MaxCharNumber | Integer | 否 |
| 原文每行字幕的最大字符数。默认值为 说明
|
Hidden | Boolean | 否 |
| 是否隐藏原文字幕。默认值为
|
ShowPriority | Integer | 否 |
| 原文字幕的展示优先级。默认原文字幕在上,译文字幕在下。 |
| Box | Object of Box | 否 | - | 原文字幕字体背景。 |
| Border | Object of Border | 否 | - | 原文字幕字体阴影。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| Language | String | 是 | en | 译文字幕语言。可通过 GetSpeechConfig 的 Lang 获取当前账号下可使用的译文字幕语言,并传入 Key 值。 |
| Font | String | 否 | arial | 译文字幕字体,默认值为 arial。可通过 GetSpeechConfig 的 Font 获取当前账号下可使用的字体列表,并传入 Key 值。 |
| FontSize | Integer | 否 | 32 | 译文字幕字号。默认值为 40。取值范围为 [1,100]。 |
FontColor | String | 否 |
| 译文字幕的字体颜色。
说明
|
Alignment | Integer | 否 |
| 译文字幕对齐方式。默认值为
|
MaxRowNumber | Integer | 否 |
| 译文字幕最多显示的行数。默认值为
说明 原文和译文的行数限制单独计算。 |
MaxCharNumber | Integer | 否 |
| 译文每行字幕的最大字符数。默认值为 说明
|
Hidden | Boolean | 否 |
| 是否隐藏译文字幕。默认值为
|
ShowPriority | Integer | 否 |
| 译文字幕的展示优先级。默认原文字幕在上,译文字幕在下。 |
| Box | Object of Box | 否 | - | 译文字幕字体背景。 |
| Border | Object of Border | 否 | - | 译文字幕字体阴影。 |
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
Enable | Boolean | 否 |
| 是否生成字幕 SRT 文件。默认值为
|
| Bucket | String | 否 | bucketa | 存储字幕 SRT 文件的 TOS 桶名称。长度为 3-63 个字符,只能包含小写字母(a-z)、数字(0-9)和连字符(-),且必须以小写字母(a-z)或数字(0-9)开头和结尾。 |
Region | String | 否 |
| 存储字幕 SRT 文件的 TOS 桶区域。取值如下:
|
StorageDir | String | 否 |
| 存储字幕 SRT 文件的 TOS 桶文件夹名称。长度为 1-255 个字符,
|
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| W | Float | 是 | 1.0 | 宽度。单位为 px。建议取值范围为 [1,10]。 |
Color | String | 是 |
| 颜色。
说明
|
| 参数 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| W | Float | 是 | 1.0 | 宽度。单位为 px。建议取值范围为 [1,10]。 |
Color | String | 是 |
| 颜色。
说明
|
下表仅列出本接口特有的返回参数。更多信息请见返回结构。
| 参数 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| Code | Integer | 0 | 状态码。 |
| Message | String | success | 状态信息。 |
| Data | Object of Data | - | 任务信息。 |
| 参数 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| TaskID | String | ab5d68****257f3f | 任务 ID。 |
原文 ASR 字幕(整句出字)
POST https://live.volcengineapi.com?Action=CreateSpeechTask&Version=2023-01-01 { "Name": "TaskA", "Rule": { "Pipe": "mix", "Delay": 15, "Source": { "Url": "https://pull.example.com/live/test.flv" }, "StartTime": "2026-11-17T11:30:06+08:00", "EndTime": "2026-11-17T13:30:06+08:00", "Output": { "Url": [ "rtmp://push.example.com/live/test01", "rtmp://push.example.com/live/test02" ], "Callback": { "Url": "https://example.com/callback" }, "Sei": [ "subtitle" ] }, "Subtitle": { "Position": { "Relative": "bottom", "MarginTb": 0.05, "MarginLr": 0.2 }, "Original": { "Language": "zh", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 100, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } }, "SubtitleTosConfig": { "Enable": true, "Bucket": "bucketa", "Region": "cn-beijing", "StorageDir": "speech-task/asr" }, "HotWords": [ "视频直播", "赛事直播" ], "ReplaceMap": { "视屏直播": "视频直播" } } } }
{ "ResponseMetadata": { "RequestId": "20230604110420****100232280022D31", "Action": "CreateSpeechTask", "Version": "2023-01-01", "Service": "live", "Region": "cn-north-1" }, "Result": { "Code": 0, "Message": "success", "Data": { "TaskID": "ab5d68****257f3f" } } }
原文 ASR 字幕(实时流式出字)
POST https://live.volcengineapi.com?Action=CreateSpeechTask&Version=2023-01-01 { "Name": "TaskB", "Rule": { "Pipe": "realtime", "Delay": 2, "Source": { "Url": "https://pull.example.com/live/test.flv" }, "StartTime": "2026-11-17T11:30:06+08:00", "EndTime": "2026-11-17T13:30:06+08:00", "Output": { "Url": [ "rtmp://push.example.com/live/test01", "rtmp://push.example.com/live/test02" ], "Callback": { "Url": "https://example.com/callback" } }, "Subtitle": { "Position": { "Relative": "bottom", "MarginTb": 0.05, "MarginLr": 0.2 }, "Original": { "Language": "zh", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 100, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } }, "HotWords": [ "视频直播", "赛事直播" ], "ReplaceMap": { "视屏直播": "视频直播" } } } }
{ "ResponseMetadata": { "RequestId": "20230604110420****100232280022D31", "Action": "CreateSpeechTask", "Version": "2023-01-01", "Service": "live", "Region": "cn-north-1" }, "Result": { "Code": 0, "Message": "success", "Data": { "TaskID": "ab5d68****257f3f" } } }
字幕翻译
POST https://live.volcengineapi.com?Action=CreateSpeechTask&Version=2023-01-01 { "Name": "TaskC", "Rule": { "Pipe": "mix", "Delay": 8, "Source": { "Url": "https://pull.example.com/live/test.flv" }, "StartTime": "2026-11-17T11:30:06+08:00", "EndTime": "2026-11-17T13:30:06+08:00", "Output": { "Url": [ "rtmp://push.example.com/live/test01", "rtmp://push.example.com/live/test02" ], "Callback": { "Url": "https://example.com/callback" }, "Sei": [ "subtitle" ] }, "Subtitle": { "Position": { "Relative": "bottom", "MarginTb": 0.05, "MarginLr": 0.2 }, "Original": { "Language": "en", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 100, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } }, "Translation": [ { "Language": "zh", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 90, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } } ], "GlossaryMap": { "ByteDance": "字节跳动", "MediaLive": "视频直播" }, "ReplaceMap": { "蒂姆": "Tim", "提姆": "Tim" } } } }
{ "ResponseMetadata": { "RequestId": "20230604110420****100232280022D31", "Action": "CreateSpeechTask", "Version": "2023-01-01", "Service": "live", "Region": "cn-north-1" }, "Result": { "Code": 0, "Message": "success", "Data": { "TaskID": "ab5d68****257f3f" } } }
同传声音 + 双语字幕
POST https://live.volcengineapi.com?Action=CreateSpeechTask&Version=2023-01-01 { "Name": "TaskD", "Rule": { "Pipe": "realtime", "Delay": 3, "Source": { "Url": "https://pull.example.com/live/test.flv" }, "StartTime": "2026-11-17T11:30:06+08:00", "EndTime": "2026-11-17T13:30:06+08:00", "Output": { "Url": [ "rtmp://push.example.com/live/test01", "rtmp://push.example.com/live/test02" ], "Callback": { "Url": "https://example.com/callback" } }, "RealTime": { "VoiceShow": true }, "Extra": { "AMix": { "BGVolume": 0.2, "AudioEnhance": true }, "Separator": { "HandleType": 1, "Separator": true } }, "Subtitle": { "Position": { "Relative": "bottom", "MarginTb": 0.05, "MarginLr": 0.2 }, "Original": { "Language": "en", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 100, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } }, "Translation": [ { "Language": "zh", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 90, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } } ], "GlossaryMap": { "ByteDance": "字节跳动", "MediaLive": "视频直播" }, "ReplaceMap": { "蒂姆": "Tim", "提姆": "Tim" } } } }
{ "ResponseMetadata": { "RequestId": "20230604110420****100232280022D31", "Action": "CreateSpeechTask", "Version": "2023-01-01", "Service": "live", "Region": "cn-north-1" }, "Result": { "Code": 0, "Message": "success", "Data": { "TaskID": "ab5d68****257f3f" } } }
同传声音 + 数字人口型 + 双语字幕
POST https://live.volcengineapi.com?Action=CreateSpeechTask&Version=2023-01-01 { "Name": "TaskE", "Rule": { "Pipe": "si", "Delay": 20, "Source": { "Url": "https://pull.example.com/live/test.flv" }, "StartTime": "2026-11-17T11:30:06+08:00", "EndTime": "2026-11-17T13:30:06+08:00", "Output": { "Url": [ "rtmp://push.example.com/live/test01", "rtmp://push.example.com/live/test02" ], "Callback": { "Url": "https://example.com/callback" }, "Sei": [ "subtitle" ] }, "SI": { "LipSync": true }, "Subtitle": { "Position": { "Relative": "bottom", "MarginTb": 0.05, "MarginLr": 0.2 }, "Original": { "Language": "en", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 100, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } }, "Translation": [ { "Language": "zh", "Font": "arial", "FontSize": 32, "FontColor": "0xFFFFFF@1", "Alignment": 0, "MaxRowNumber": 2, "MaxCharNumber": 60, "Hidden": false, "ShowPriority": 90, "Box": { "W": 1.0, "Color": "0x000000@0.5" }, "Border": { "W": 1.0, "Color": "0x000000@0.5" } } ], "GlossaryMap": { "ByteDance": "字节跳动", "MediaLive": "视频直播" }, "ReplaceMap": { "蒂姆": "Tim", "提姆": "Tim" } } } }
{ "ResponseMetadata": { "RequestId": "20230604110420****100232280022D31", "Action": "CreateSpeechTask", "Version": "2023-01-01", "Service": "live", "Region": "cn-north-1" }, "Result": { "Code": 0, "Message": "success", "Data": { "TaskID": "ab5d68****257f3f" } } }
您可访问公共错误码,获取更多错误码信息。