通过 acquire
方法获取云端录制资源后,调用 start
方法开始云端录制。
该 API 的请求方法和接入点为:
该 API 需要在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appid |
String | 你的项目使用的 App ID。必须使用和待录制的频道相同的 App ID。 |
resourceid |
String | 通过 acquire 方法获取的 resource ID。 |
mode |
String | 录制模式,支持以下几种录制模式: |
该 API 需要在请求包体中传入以下参数:
参数 | 类型 | 描述 |
---|---|---|
cname |
String |
|
uid |
String | 字符串内容为云端录制服务使用的 UID,用于标识该录制服务,需要和你在 acquire 请求中输入的 UID 相同。 |
clientRequest |
JSON | 特定的客户请求参数,对于该请求包含以下参数:
|
appsCollection
是一个用于设置云端录制应用的 JSON Object。appsCollection
包含以下字段:
combinationPolicy
:(选填)String 类型,各个云端录制应用的组合方式。"default"
:(默认)除延时转码和延时混音外,均选用此种方式。"postpone_transcoding"
:如需延时转码或延时混音,则选用此种方式。region
必须设置为中国大陆区域内。 recordingConfig
是一个用于设置媒体流订阅的 JSON Object。云端录制会根据此设置订阅频道内的媒体流,并生成录制文件或截图。recordingConfig
包含以下字段:
channelType
:Number 类型,频道场景。频道场景必须与 Agora RTC SDK 的设置一致,否则可能导致问题。0
:(默认)通信场景1
:直播场景streamTypes
:(选填)Number 类型,订阅的媒体流类型。使用智能语音审核时,你需要将其设置为 0
,即仅订阅音频。0
:仅订阅音频1
:仅订阅视频2
:(默认)订阅音频和视频streamMode
:(选填)String 类型,单流录制模式下(mode
为 individual
),媒体流的输出模式。default
:默认模式。录制过程中音频转码,分别生成 M3U8 音频索引文件和视频索引文件。standard
:标准模式。Agora 推荐使用该模式。录制过程中音频转码,分别生成 M3U8 音频索引文件、视频索引文件和合并的音视频索引文件。如果在 Web 端使用 VP8 编码,则生成一个合并的 MPD 音视频索引文件。original
:原始编码模式。适用于单流音频不转码录制。仅订阅音频时(streamTypes
为 0
)时该参数生效,录制过程中音频不转码,生成 M3U8 音频索引文件。streamMode
三种模式各方面对比如下:streamMode |
描述 | 生成索引文件 | 生成切片文件 | 视频编码 | 音频编码 | 支持的功能 |
---|---|---|---|---|---|---|
default |
默认模式 | 每个 user ID 生成一个 M3U8 音频索引文件和一个 M3U8 视频索引文件。 | 每个 user ID 生成多个 TS 音频切片文件和多个 TS 视频切片文件。 | 不转码 | 转码 | 单流录制、视频截图、阿里云视频点播服务(VoD)、延时转码。 |
standard |
标准模式 | 每个 user ID 生成一个 M3U8 音频索引文件、一个M3U8 视频索引文件和一个合并的 M3U8 音视频索引文件。如果在 Web 端使用 VP8 编码,则生成一个合并的 MPD 音视频索引文件。 | 每个 user ID 生成多个 TS 音频切片文件和多个 TS 视频切片文件。 如果在 Web 端使用 VP8 编码,则生成多个 WebM 格式的音频文件和多个 WebM 格式的视频文件。 | 不转码 | 转码 | 单流录制、视频截图。 |
original |
原始模式。仅订阅音频时(streamTypes 为 0 )时该参数生效。 |
每个 user ID 生成一个 M3U8 音频索引文件。 | 每个 user ID 生成多个 TS 音频切片文件。 | 无 | 不转码 | 单流音频不转码录制、延时混音。 |
decryptionMode
:(选填)Number 类型,解密方案。如果频道设置了加密,该参数必须设置。解密方式必须与频道设置的加密方式一致。0
:(默认)不加密。1
:AES_128_XTS 加密模式。128 位 AES 加密,XTS 模式。2
:AES_128_ECB 加密模式。128 位 AES 加密,ECB 模式。3
:AES_256_XTS 加密模式。256 位 AES 加密,XTS 模式。4
:SM4_128_ECB 加密模式。128 位 SM4 加密,ECB 模式。5
:AES_128_GCM 加密模式。128 位 AES 加密,GCM 模式。6
:AES_256_GCM 加密模式。256 位 AES 加密,GCM 模式。7
:AES_128_GCM2 加密模式。128 位 AES 加密,GCM 模式。 相比于 AES_128_GCM 加密模式,AES_128_GCM2 加密模式安全性更高且需要设置密钥和盐。8
:AES_256_GCM2 加密模式。256 位 AES 加密,GCM 模式。相比于 AES_256_GCM 加密模式,AES_256_GCM2 加密模式安全性更高且需要设置密钥和盐。secret
:(选填)String 类型。启用解密模式后,设置解密的密钥。如果 decryptionMode
不为 0,则需要设置该值。salt
:(选填)Base64 编码、32 位字节。启用解密模式后,设置解密的盐。如果 decryptionMode
为 7 或 8,则需要设置该值。audioProfile
:(选填)设置输出音频的采样率、码率、编码模式和声道数。目前仅适用于合流录制。0
:(默认)48 kHz 采样率,音乐编码,单声道,编码码率约 48 Kbps1
:48 kHz 采样率,音乐编码,单声道,编码码率约 128 Kbps2
:48 kHz 采样率,音乐编码,双声道,编码码率约 192 KbpsvideoStreamType
:(选填)Number 类型,设置订阅的视频流类型。如果频道中有用户开启了双流模式,你可以选择订阅视频大流或者小流。0
:(默认)视频大流,即高分辨率高码率的视频流1
:视频小流,即低分辨率低码率的视频流maxIdleTime
:(选填)Number 类型,最长空闲频道时间,单位为秒。默认值为 30。该值需大于等于 5,且小于等于 2,592,000,即 30 天。如果频道内无用户的状态持续超过该时间,录制程序会自动退出。退出后,再次调用 start
请求,会产生新的录制文件。maxIdleTime
,录制程序会自动退出。transcodingConfig
:(选填)JSON 类型,视频转码的详细设置。仅适用于合流模式,单流模式下不能设置该参数。如果不设置将使用默认值。如果设置该参数,必须填入 width
、height
、fps
和 bitrate
字段。请参考如何设置录制视频的分辨率设置该参数。
width
:Number 类型,视频的宽度,单位为像素,默认值 360。width
不能超过 1920,且 width
和 height
的乘积不能超过 1920 * 1080,超过最大值会报错。height
:Number 类型,视频的高度,单位为像素,默认值 640。height
不能超过 1920,且 width
和 height
的乘积不能超过 1920 * 1080,超过最大值会报错。fps
:Number 类型,视频的帧率,单位 fps,默认值 15。bitrate
:Number 类型,视频的码率,单位 Kbps,默认值 500。maxResolutionUid
:(选填)String 类型,如果视频合流布局设为垂直布局,用该参数指定显示大视窗画面的用户 ID。取值范围 1 到 (232-1),不可设置为 0。mixedVideoLayout
:(选填)Number 类型,设置视频合流布局,0、1、2 为预设的合流布局,3 为自定义合流布局。该参数设为 3 时必须设置 layoutConfig
参数。0
:(默认)悬浮布局。第一个加入频道的用户在屏幕上会显示为大视窗,铺满整个画布,其他用户的视频画面会显示为小视窗,从下到上水平排列,最多 4 行,每行 4 个画面,最多支持共 17 个画面。1
:自适应布局。根据用户的数量自动调整每个画面的大小,每个用户的画面大小一致,最多支持 17 个画面。2
:垂直布局。指定一个用户在屏幕左侧显示大视窗画面,其他用户的小视窗画面在右侧垂直排列,最多两列,一列 8 个画面,最多支持共 17 个画面。设置为垂直布局时,用 maxResolutionUid
参数指定显示大视窗画面的用户 ID。3
:自定义布局。设置 layoutConfig
参数自定义合流布局。backgroundColor
:(选填)String 类型。视频画布的背景颜色。支持 RGB 颜色表,字符串格式为 # 号后 6 个十六进制数。默认值 "#000000"
黑色。backgroundImage
:(选填)String 类型。视频画布的背景图的 URL 地址。背景图的显示模式为裁剪模式。裁剪模式下,优先保证画面被填满。背景图尺寸等比缩放,直至整个画面被背景图填满。如果背景图长宽与显示窗口不同,则背景图会按照画面设置的比例进行周边裁剪后填满画面。defaultUserBackgroundImage
:(选填)String 类型。默认的用户画面背景图的 URL 地址。配置该参数后,当任一⽤户停止发送视频流超过 3.5 秒,画⾯将切换为该背景图;如果针对某 UID 单独设置了背景图,则该设置会被覆盖。layoutConfig
:(选填)JSONArray 类型。由每个用户对应的布局画面设置组成的数组,支持最多 17 个用户画面。当 mixedVideoLayout
设为 3 时,可以通过该参数自定义合流布局。一个用户画面设置包括以下参数:uid
:(选填)String 类型。字符串内容为待显示在该区域的用户的 UID,32 位无符号整数。如果不指定 UID,会按照用户加入频道的顺序自动匹配 layoutConfig
中的画面设置。x_axis
:Float 类型。屏幕里该画面左上角的横坐标的相对值,范围是 [0.0,1.0],精确到小数点后六位。从左到右布局,0.0 在最左端,1.0 在最右端。y_axis
:Float 类型。屏幕里该画面左上角的纵坐标的相对值,范围是 [0.0,1.0],精确到小数点后六位。从上到下布局,0.0 在最上端,1.0 在最下端。width
:Float 类型。该画面宽度的相对值,取值范围是 [0.0,1.0],精确到小数点后六位。height
:Float 类型。该画面高度的相对值,取值范围是 [0.0,1.0],精确到小数点后六位。alpha
:(选填)Float 类型。图像的透明度。取值范围是 [0.0,1.0] ,精确到小数点后六位。默认值 1.0。0.0 表示图像为透明的,1.0 表示图像为完全不透明的。render_mode
:(选填)Number 类型。画面显示模式:0
:(默认)裁剪模式。优先保证画面被填满。视频尺寸等比缩放,直至整个画面被视频填满。如果视频长宽与显示窗口不同,则视频流会按照画面设置的比例进行周边裁剪后填满画面。1
:缩放模式。优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与画面边框对齐。如果视频尺寸与画面尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满画面,缩放后的视频四周会有一圈黑边。backgroundConfig
:(选填)JSONArray 类型。数组内容为各 UID 单独的背景图设置。uid
:String 类型。用户 UID。image_url
:String 类型。该 UID 的背景图的 URL 地址。配置背景图后,当该⽤户停止发送视频流超过 3.5 秒,画⾯将切换为该背景图。render_mode
:(选填)Number 类型。画面显示模式。0
:(默认)裁剪模式。优先保证画面被填满。背景图尺寸等比缩放,直至整个画面被背景图填满。如果背景图长宽与显示窗口不同,则背景图会按照画面设置的比例进行周边裁剪后填满画面。1
:缩放模式。优先保证背景图内容全部显示。背景图尺寸等比缩放,直至背景图的一边与画面边框对齐。如果背景图尺寸与画面尺寸不一致,在保持长宽比的前提下,将背景图进行缩放后填满画面,缩放后的背景图四周会有一圈黑边。watermarkConfig
: (选填)JSONArray 类型。由水印设置组成的数组。仅适用于合流录制。
watermarkConfig.type
:Integer 类型。水印类型:0
:图片水印。使用一张本地 JPG、PNG、GIF 图片作为水印。1
:时间水印。使用指定时区的当前时间作为水印,显示形式为“2019:06:18 14:30:35"。2
:文字水印。使用一段文字作为水印,可设置字体和字号。imageConfig
是一个 JSON Object,用于配置图片水印。imageConfig
包含以下字段:image_url
:水印图片 URL。支持JPG、PNG、GIF 格式的图片。wm_width
:水印与输出视频宽度的相对比例。取值范围是 [0.0,1.0]。wm_height
:水印与输出视频高度的相对比例。取值范围是 [0.0,1.0]。x_axis
:以视频画布左上角为原点,水印框左上角到原点的水平距离。y_axis
:以视频画布左上角为原点,水印框左上角到原点的垂直距离。timestampConfig
是一个 JSON Object,用于配置图片水印。timestampConfig
包含以下字段:time_zone
:(选填)所在时区的当前时间与 UTC 时间之差。取值范围 [-1200 , +1200]。默认值为 0,即 UTC 时间。wm_width
:水印与输出视频宽度的相对比例。取值范围是 [0.0,1.0]。wm_height
:水印与输出视频高度的相对比例。取值范围是 [0.0,1.0]。x_axis
:以视频画布左上角为原点,水印框左上角到原点的水平距离。y_axis
:以视频画布左上角为原点,水印框左上角到原点的垂直距离。wm_color
:(选填)水印背景色,默认值为 #000000
(黑色)。wm_alpha
:(选填)水印透明度。取值范围 [0.0, 1.0] 。0.0
(默认)表示完全透明,1.0
表示完全不透明。literaConfig
是一个 JSON Object,用于配置文字水印。literaConfig
包含以下字段:litera
:文字内容,长度必须在 1024 个字节内。font_url
:字体 URL。默认字体为 NotoSansMonoCJKsc-Regular。font_size
:(选填)字号。取值范围 [5, 100]。默认值为 10。font_color
:(选填)字体颜色,默认值为 #000000
(黑色)。x_axis
:以视频画布左上角为原点,水印框左上角到原点的水平距离。y_axis
:以视频画布左上角为原点,水印框左上角到原点的垂直距离。wm_color
:(选填)水印背景色,默认值为 #000000
(黑色)。wm_alpha
:(选填)水印透明度。取值范围 [0.0, 1.0] 。0.0
(默认)表示完全透明,1.0
表示完全不透明。subscribeAudioUids
:(选填)JSONArray 类型,由 UID 组成的数组,指定订阅哪几个 UID 的音频流。如需订阅全部 UID 的音频流,则无需设置该参数。数组长度不得超过 32,不推荐使用空数组。详见设置订阅名单。
unSubscribeAudioUids
: (选填)JSONArray 类型,由 UID 组成的数组,指定不订阅哪几个 UID 的音频流。云端录制会订阅频道内除指定 UID 外所有 UID 的音频流。数组长度不得超过 32,不推荐使用空数组。详见设置订阅名单。
subscribeVideoUids
:(选填)JSONArray 类型,由 UID 组成的数组,指定订阅哪几个 UID 的视频流。如需订阅全部 UID 的视频流,则无需设置该参数。数组长度不得超过 32,不推荐使用空数组。详见设置订阅名单。
unSubscribeVideoUids
: (选填)JSONArray 类型,由 UID 组成的数组,指定不订阅哪几个 UID 的视频流。云端录制会订阅频道内除指定 UID 外所有 UID 的视频流。数组长度不得超过 32,不推荐使用空数组。详见设置订阅名单。
subscribeUidGroup
: (选填)Number 类型,预估的订阅人数峰值。在单流模式下,为必填参数。举例来说,如果 subscribeVideoUids
为 ["100","101","102"]
,subscribeAudioUids
为 ["101","102","103"]
,则订阅人数为 4 人。0
:1 到 2 个 UID1
:3 到 7 个 UID2
:8 到 12 个 UID3
:13 到 17 个 UID4
:17 到 32 个 UID5
:32 到 49 个 UIDtranscodeOptions
是一个用于设置录制文件转码属性的 JSON Object。云端录制会根据此设置录制文件的转码模式和输出音频属性。适用于延时混音。包含以下字段:
container
:(选填)JSON 类型,转码属性:format
:String 类型,输出音频格式,可设为mp3
(默认)、m4a
、aac
。transConfig
:(必填)JSON 类型,转码设置:transMode
:String 类型,转码模式,目前仅支持设置为 audioMix
(混音)。audio
:(选填)JSON 类型,输出录制文件的音频属性:sampleRate
:String 类型,数据采样率,单位 Hz,可设为 48000
(默认)、32000
、16000
。bitrate
:String 类型,码率,单位 Kbps,默认且仅支持设置为 48000
。channels
:String 类型,声道数,可设为 1
和 2
(默认)。recordingFileConfig
是一个 JSON Object,用于设置录制文件。包含以下字段:
avFileType
:(选填)JSONArray 类型,由多个字符串组成的数组,指定录制的视频文件类型。云端录制会生成 avFileType
中包含的所有文件类型。目前支持以下值:
"hls"
:默认值,即录制生成 M3U8 和 TS 文件。"mp4"
:录制生成 MP4 文件。只有在合流录制模式(mix
)和页面录制模式(web
)下,才可设置 "mp4"
。对于合流录制,录制服务会在当前 MP4 文件时长超过约 2 小时或大小超过约 2 GB 左右时创建一个新的 MP4 文件。对于页面录制,录制服务会在当前 MP4 文件时长超过 maxVideoDuration
时创建一个新的 MP4 文件。"mp4"
的同时必须设置 "hls"
(否则会收到错误码 2
),录制结束后,你会同时获得 MP4 和 HLS 文件。云端录制支持在一个单流录制进程中仅截图,或同时录制和截图两种方式,详见视频截图。snapshotConfig
是一个用于设置截图的 JSON Object。使用云端录制进行截图,需要注意以下参数的设置。设置错误会收到报错,或无法生成截图文件。
mode
参数必须设为 individual
。recordingFileConfig
参数;如果在一个录制进程中仅截图,则不可设置该参数。streamTypes
必须设置为 1 或 2。subscribeAudioUid
,则必须同时设置 subscribeVideoUids
。snapshotConfig
包含以下字段:
captureInterval
:(选填)Integer 类型,截图周期(s),云端录制会按此周期定期截图。取值范围是 [1, 3600],默认值 10
。fileType
:JSONArray 类型,由多个字符串组成的数组,指定截图的文件格式。目前只支持 ["jpg"]
,即生成 JPG 截图文件。storageConfig
是一个用于设置第三方云存储的 JSON Object,包含以下字段:
vendor
:Number 类型,第三方云存储平台。
region
:Number 类型,第三方云存储指定的地区信息。录制服务仅支持以下列表中的地区。
region
与你发起请求的应用服务器必须在同一个区域中。例如:你发起请求的应用服务器在中国大陆地区,则第三方云存储需要设置为中国大陆区域内。region
必须设置为中国大陆区域内。vendor
= 0,即第三方云存储为七牛云时:0
:华东1
:华北2
:华南3
:北美4
:东南亚vendor
= 1,即第三方云存储为 Amazon S3 时:0
:US_EAST_11
:US_EAST_22
:US_WEST_13
:US_WEST_24
:EU_WEST_15
:EU_WEST_26
:EU_WEST_37
:EU_CENTRAL_18
:AP_SOUTHEAST_19
:AP_SOUTHEAST_210
:AP_NORTHEAST_111
:AP_NORTHEAST_212
:SA_EAST_113
:CA_CENTRAL_114
:AP_SOUTH_115
:CN_NORTH_116
:CN_NORTHWEST_117
:US_GOV_WEST_120
:AP_NORTHEAST_321
:EU_NORTH_122
:ME_SOUTH_123
:US_GOV_EAST_1vendor
= 2,即第三方云存储为阿里云时:0
:CN_Hangzhou1
:CN_Shanghai2
:CN_Qingdao3
:CN_Beijing4
:CN_Zhangjiakou5
:CN_Huhehaote6
:CN_Shenzhen7
:CN_Hongkong8
:US_West_19
:US_East_110
:AP_Southeast_111
:AP_Southeast_212
:AP_Southeast_313
:AP_Southeast_514
:AP_Northeast_115
:AP_South_116
:EU_Central_117
:EU_West_118
:EU_East_119
:AP_Southeast_620
:CN_Heyuan21
:CN_Guangzhou22
:CN_Chengduvendor
= 3,即第三方云存储为腾讯云时:0
:AP_Beijing_11
:AP_Beijing2
:AP_Shanghai3
:AP_Guangzhou4
:AP_Chengdu5
:AP_Chongqing6
:AP_Shenzhen_FSI7
:AP_Shanghai_FSI8
:AP_Beijing_FSI9
:AP_Hongkong10
:AP_Singapore11
:AP_Mumbai12
:AP_Seoul13
:AP_Bangkok14
:AP_Tokyo15
:NA_Siliconvalley16
:NA_Ashburn17
:NA_Toronto18
:EU_Frankfurt19
:EU_Moscowvendor
= 4,即第三方云存储为金山云时:0
:CN_Hangzhou1
:CN_Shanghai2
:CN_Qingdao3
:CN_Beijing4
:CN_Guangzhou5
:CN_Hongkong6
:JR_Beijing7
:JR_Shanghai8
:NA_Russia_19
:NA_Singapore_1vendor
= 5,即第三方云存储为 Microsoft Azure 时:region
参数,即使设置也不生效。
vendor
= 6,即第三方云存储为谷歌云时:region
参数,即使设置也不生效。
vendor
= 7,即第三方云存储为华为云时:0
:CN_North_11
:CN_North_42
:CN_East_23
:CN_East_34
:CN_South_15
:CN_Southwest_26
:AP_Southeast_17
:AP_Southeast_28
:AP_Southeast_39
:AF_South_110
:SA_Argentina_111
:SA_Peru_112
:NA_Mexico_113
:SA_Brazil_114
:LA_South_215
:SA_Chile_1vendor
= 8,即第三方云存储为百度智能云时:0
:Beijing1
:Baoding2
:Suzhou3
:Guangzhou4
:Hongkong5
:Singapore6
:Wuhan7
:Shanghaibucket
:String 类型,第三方云存储的 bucket,bucket 名称需要符合对应第三方云存储服务的命名规则。
accessKey
:String 类型,第三方云存储的 access key。在一般情况下,建议提供只写权限的访问密钥。如需延时转码,则访问密钥必须同时具备读写权限。
secretKey
:String 类型,第三方云存储的 secret key。
fileNamePrefix
:(选填)JSONArray 类型,由多个字符串组成的数组,指定录制文件在第三方云存储中的存储位置。举个例子,fileNamePrefix
= ["directory1","directory2"]
,将在录制文件名前加上前缀 "directory1/directory2/
",即 directory1/directory2/xxx.m3u8
。前缀长度(包括斜杠)不得超过 128 个字符。字符串中不得出现斜杠、下划线、括号等符号字符。以下为支持的字符集范围:
extensionParams
:(选填)JSON Object 类型,第三方云存储服务会按照该参数设置对已上传的录制文件进行加密和打标签。包含以下字段:
sse
:加密模式。设置该字段后,第三方云存储服务会按照该加密模式将已上传的录制文件进行加密。该字段仅适用于 Amazon S3,详见 Amazon S3 官方文档。可设为:kms
:KMS 加密。aes256
:AES256 加密。tag
:标签内容。设置该字段后,第三方云存储服务会按照该标签内容将已上传的录制文件进行打标签操作。该字段仅适用于阿里云和 Amazon S3,详见阿里云官方文档和 Amazon S3 官方文档。extensionServiceConfig
是一个 JSON Object,用于设置扩展服务。扩展服务是基于 Agora RTC SDK 的一系列应用服务,能够对 Agora RTC SDK 中产生的音视频流进行进一步处理,如视频点播服务、语音审核服务。
extensionServiceConfig
包含以下字段:
errorHandlePolicy
:(选填)String 类型。错误处理策略。目前仅可设置为默认值 "error_abort"
,表示当某一扩展服务发生错误后,订阅及其他非扩展服务均停止。apiVersion
:(选填)String 类型,云端录制 RESTful API 的版本号,默认为 "v1"
。extensionServices
:JSONArray 类型,由每个扩展服务的设置组成的数组。根据你需要使用的扩展服务的不同,你需要设置以下参数:serviceName
:String 类型,扩展服务的名称。要使用阿里云视频点播服务(VoD),你需要将其设置为 "aliyun_vod_service"
。
errorHandlePolicy
:(选填)String 类型。错误处理策略。目前仅可设置为默认值 "error_abort"
,表示如果当前扩展服务发生错误,其他扩展服务均停止。
serviceParam
:JSON 类型。扩展服务的具体参数设置。当使用阿里云视频点播服务时,你需要设置以下参数:
accessKey
:String 类型。阿里云访问密钥 AccessKey 中的 AccessKeyId
。详见阿里云文档。secretKey
:String 类型。阿里云访问密钥 AccessKey 中的 AccessKeySecret
。详见阿里云文档。regionId
:String 类型,接入区域标识。详见阿里云文档。apiData
:JSON 类型。阿里云视频点播服务的详细设置,包含以下参数:videoData
:JSON 类型。视频设置。你可以至阿里云文档中心获取以下参数的详细解释。title
:String 类型。视频标题。description
:(选填)String 类型。视频描述。coverUrl
:(选填)String 类型。自定义视频封面的 URL 地址。cateId
:(选填)String 类型。字符串内容为视频分类 ID,必须为整型。tags
:(选填)String 类型。视频标签。templateGroupId
:(选填)String 类型。转码模板组 ID。userData
:(选填)String 类型。自定义设置。storageLocation
:(选填)String 类型。存储地址。workFlowId
:(选填)String 类型。工作流 ID。serviceName
:String 类型,扩展服务的名称。要进行页面录制,你需要将其设置为 "web_recorder_service"
。errorHandlePolicy
:(选填)String 类型。错误处理策略。目前仅可设置为默认值 "error_abort"
,表示如果当前扩展服务发生错误,其他扩展服务均停止。serviceParam
:JSON 类型。扩展服务的具体参数设置。当进行页面录制时,你需要设置以下参数:url
: String 类型。设置待录制页面的地址。videoBitrate
:(选填)Number 类型,输出视频的码率,单位为 kbps,范围为 [50, 8000]。针对不同的输出视频分辨率,videoBitrate
的默认值不同:videoFps
:(选填)Number 类型,输出视频的帧率,单位为 fps,范围为 [5, 60],默认值为 15。audioProfile
:Number 类型,设置输出音频的采样率、码率、编码模式和声道数。0
:48 kHz 采样率,音乐编码,单声道,编码码率约 48 Kbps1
:48 kHz 采样率,音乐编码,单声道,编码码率约 128 Kbps2
:48 kHz 采样率,音乐编码,双声道,编码码率约 192 Kbpsmobile
:(选填)Bool 类型,是否开启移动端网页模式:true
:开启。设置为 true
后,录制服务使用移动端网页渲染模式录制当前页面。false
:(默认)不开启。videoWidth
:Number 类型,设置输出视频的宽度,单位为 pixel,范围为 [240, 1920]。videoWidth
和 videoHeight
的乘积需小于等于 1920 × 1080。videoHeight
:Number 类型,设置输出视频的高度,单位为 pixel,范围为 [240, 1920]。videoWidth
和 videoHeight
的乘积需小于等于 1920 × 1080。maxRecordingHour
:Number 类型,设置录制的最大时长,单位为小时,范围为 [1,720]。当录制时长超过 maxRecordingHour
,录制会自动停止。建议 maxRecordingHour
不超过你在 acquire
方法中设置的 resourceExpiredHour
的值。maxRecordingHour
,或主动停止页面录制。maxVideoDuration
:(选填)Number 类型,设置页面录制生成的 MP4 切片文件的最大时长,单位为分钟,取值范围为 [30,240],默认值为 120 分钟。页面录制过程中,录制服务会在当前 MP4 文件时长超过约 maxVideoDuration
左右时创建一个新的 MP4 切片文件。onhold
:(选填)Bool 类型。设置是否在启动页面录制任务时暂停页面录制。true
:在启动页面录制任务时暂停页面录制。开启页面录制任务后立即暂停录制,录制服务会打开并渲染待录制页面,但不生成切片文件。false
:(默认) 启动页面录制任务并进行页面录制。Agora 推荐你按照如下流程使用
onhold
参数:调用start
方法时将onhold
参数设置为true
,开启并暂停页面录制,自行判断页面录制开始的合适时机,调用update
并将onhold
参数设置为false
,继续进行页面录制。
update
方法暂停或继续页面录制,请在收到上一次 update
响应后再进行调用,否则可能导致请求结果与预期不一致。readyTimeout
:(选填)Number 类型,设置页面加载超时时间,单位为秒,取值范围 [0,60]。详见页面加载超时检测。2
。页面录制参数设置同上,推流到 CDN相关参数设置如下:
serviceName
:String 类型,扩展服务的名称。要进行页面录制推流到 CDN,你需要将其设置为 "rtmp_publish_service"
。errorHandlePolicy
:(选填)String 类型。错误处理策略。目前仅可设置为默认值 "error_ignore"
,表示如果当前扩展服务发生错误,不影响其他扩展服务。serviceParam
:JSON 类型。扩展服务的具体参数设置。当进行页面录制推流到 CDN时,你需要设置以下参数:outputs
:JSON Array 类型。包含以下参数:rtmpUrl
:String 类型。CDN 推流地址。serviceName
:String 类型,扩展服务的名称。可设为:aliyun_voice_async_scan
:阿里云智能语音审核yitu_voice_async_scan
:依图智能语音审核errorHandlePolicy
:(选填)String 类型。错误处理策略。目前仅可设为:"error_abort"
:(默认)当扩展服务发生错误后,订阅等其他服务均停止。streamTypes
:Number 类型,要审核的媒体流类型。使用智能语音审核时,你需要将其设置为 0
,即仅审核音频。0
:仅订阅音频1
:仅订阅视频2
:(默认)订阅音频和视频serviceParam
:JSON 类型,扩展服务的具体参数设置。当使用智能语音审核时,你需要设置以下参数: callbackAddr
:String 类型,接收审核结果的 HTTP 服务器地址。 apiData
:JSON 类型,向智能语音审核服务传入的参数值: - accessKey
:String 类型,阿里云或依图提供的访问密钥中的 AccessKeyId/DevId,用于识别访问者的身份。 secretKey
:String 类型,阿里云或依图提供的访问密钥中的 AccessKeySecret/DevKey,用于验证签名的密钥。 bizType
:String 类型,你在开通依图智能语音审核服务时向依图获取到的 AppId。callbackSeed
:String 类型,随机字符串,用于回调通知请求中的签名。默认为空。accessKey
、secretKey
、bizType
。https://api.agora.io/v1/apps/<yourappid>/cloud_recording/resourceid/<resourceid>/mode/<mode>/start
Content-type
为 application/json;charset=utf-8
Authorization
为 Basic authorization,生成方法请参考 RESTful API 认证。{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamMode": "default",
"streamTypes": 2,
"channelType": 0,
"transcodingConfig": {
"height": 640,
"width": 360,
"bitrate": 500,
"fps": 15,
"mixedVideoLayout": 1,
"backgroundColor": "#FF0000"
},
"subscribeVideoUids": [
"123",
"456"
],
"subscribeAudioUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"recordingFileConfig": {
"avFileType": [
"hls"
]
},
"storageConfig": {
"accessKey": "xxxxxxf",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
"extensionParams": {
"tag":"xxxxxx",
"sse":"kms"
}
}
}
}
{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 60,
"channelType": 1,
"streamTypes": 2,
"videoStreamType": 0,
"subscribeUidGroup": 0,
"transcodingConfig": {
"width": 1920,
"height": 1080,
"fps": 15,
"bitrate": 3000,
"backgroundColor": "#00ff00",
"watermarkConfig": [
{
"type": 0,
"imageConfig": {
"image_url": "",
"wm_width": 0.2,
"wm_height": 0.2,
"x_axis": 0.5,
"y_axis": 0
}
},
{
"type": 1,
"timestampConfig": {
"time_zone": 0,
"font_size": 30,
"font_color": "#ff0000",
"wm_width": 0.2,
"wm_height": 0.2,
"x_axis": 0.7,
"y_axis": 0,
"wm_color": "#000000",
"wm_alpha": 0.1
}
},
{
"type": 2,
"literaConfig": {
"litera": "this is test",
"font_size": 30,
"font_url": "",
"font_color": "#00ff00",
"wm_width": 0.2,
"wm_height": 0.2,
"x_axis": 0,
"y_axis": 0,
"wm_color": "#000000",
"wm_alpha": 0.1
}
}
]
}
},
"recordingFileConfig": {
"avFileType": [
"hls"
]
},
"storageConfig": {
"accessKey": "xxx",
"bucket": "xxx",
"fileNamePrefix": [
"test"
],
"region": 0,
"secretKey": "xxx",
"vendor": 0
}
}
}
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"channelType": 0,
"subscribeUidGroup": 0
},
"snapshotConfig": {
"captureInterval": 5,
"fileType": [
"jpg"
]
},
"storageConfig": {
"accessKey": "xxxxxxf",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 1,
"channelType": 0
},
"snapshotConfig": {
"captureInterval": 5,
"fileType": [
"jpg"
]
},
"recordingFileConfig": {
"avFileType": [
"hls"
]
},
"storageConfig": {
"accessKey": "xxxxxxf",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"channelType": 0,
"subscribeUidGroup": 0
},
"extensionServiceConfig": {
"extensionServices": [
{
"serviceName": "aliyun_vod_service",
"serviceParam": {
"secretKey": "xxxxxx",
"accessKey": "xxxxxx",
"regionId": "cn-shanghai",
"apiData": {
"videoData": {
"title": "My Video",
"description": "This is my first video",
"coverUrl": "http://xxxxx"
}
}
}
}
]
}
}
}
{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {
"token": "<token if any>",
"extensionServiceConfig": {
"errorHandlePolicy": "error_abort",
"extensionServices": [
{
"serviceName": "web_recorder_service",
"errorHandlePolicy": "error_abort",
"serviceParam": {
"url": "https://xxxxx",
"audioProfile": 0,
"videoWidth": 1280,
"videoHeight": 720,
"maxRecordingHour": 3,
"maxVideoDuration": 200
}
}
]
},
"recordingFileConfig": {
"avFileType": [
"hls",
"mp4"
]
},
"storageConfig": {
"vendor": 2,
"region": 3,
"bucket": "xxxxx",
"accessKey": "xxxxx",
"secretKey": "xxxxx",
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {
"token": "<token if any>",
"extensionServiceConfig": {
"extensionServices": [
{
"serviceName": "web_recorder_service",
"errorHandlePolicy": "error_abort",
"serviceParam": {
"url": "https://xxxxx",
"audioProfile": 0,
"videoWidth": 1280,
"videoHeight": 720,
"maxRecordingHour": 3,
"maxVideoDuration": 200
}
},
{
"serviceName": "rtmp_publish_service",
"errorHandlePolicy": "error_ignore",
"serviceParam": {
"outputs": [
{
"rtmpUrl": "rtmp://xxx"
}
]
}
}
]
},
"recordingFileConfig": {
"avFileType": [
"hls",
"mp4"
]
},
"storageConfig": {
"vendor": 2,
"region": 3,
"bucket": "xxxxx",
"accessKey": "xxxxx",
"secretKey": "xxxxx",
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 0,
"streamMode": "original",
"channelType": 0,
"videoStreamType": 0,
"subscribeAudioUids": ["123","456"],
"subscribeUidGroup": 0
},
"storageConfig": {
"accessKey": "xxxxx",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": ["directory1","directory2"]
}
}
}
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"appsCollection": {
"combinationPolicy": "postpone_transcoding"
},
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 0,
"streamMode": "original",
"channelType": 0,
"videoStreamType": 0,
"subscribeAudioUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"transcodeOptions": {
"container": {
"format": "m4a"
},
"transConfig": {
"transMode": "audioMix"
},
"audio": {
"sampleRate": "xxxx",
"bitrate": "xxxx",
"channels": "xxxx"
}
},
"storageConfig": {
"accessKey": "xxxxx",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"appsCollection": {
"combinationPolicy": "postpone_transcoding"
},
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"channelType": 0,
"videoStreamType": 1,
"subscribeVideoUids": [
"123",
"456"
],
"subscribeAudioUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"storageConfig": {
"accessKey": "xxxxxxf",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
{
"clientRequest": {
"extensionServiceConfig": {
"apiVersion": "v1",
"errorHandlePolicy": "error_abort",
"extensionServices": [
{
"errorHandlePolicy": "error_abort",
"serviceName": "yitu_voice_async_scan", // 或 aliyun_voice_async_scan
"serviceParam": {
"apiData": {
"accessKey": "xxxx",
"bizType": "xxxx", // 仅当使用依图智能语音审核时需要设置
"callbackSeed": "xxxx",
"secretKey": "xxxx"
},
"callbackAddr": "http://xxxx"
},
"streamTypes": 0
}
]
},
"recordingConfig": {
"channelType": 1,
"maxIdleTime": 30,
"streamTypes": 0,
"subscribeUidGroup": 0
}
},
"cname": "httpClient463224",
"uid": "527841"
}
{
"clientRequest": {
"extensionServiceConfig": {
"apiVersion": "v1",
"errorHandlePolicy": "error_abort",
"extensionServices": [
{
"errorHandlePolicy": "error_abort",
"serviceName": "yitu_voice_async_scan", // 或 aliyun_voice_async_scan
"serviceParam": {
"apiData": {
"accessKey": "xxxx",
"bizType": "xxxx", // 仅当使用依图智能语音审核时需要设置
"callbackSeed": "xxxx",
"secretKey": "xxxx"
},
"callbackAddr": "http://xxxx"
},
"streamTypes": 0
}
]
},
"recordingConfig": {
"channelType": 1,
"maxIdleTime": 30,
"streamTypes": 0,
"subscribeUidGroup": 0
},
"recordingFileConfig": {
"avFileType": ["hls"]
},
"storageConfig": {
"accessKey": "xxxx",
"bucket": "xxxx",
"fileNamePrefix": ["directory1", "directory2"],
"region": 0,
"secretKey": "xxxx",
"vendor": 0
}
},
"cname": "httpClient463224",
"uid": "527841"
}
{
"clientRequest": {
"extensionServiceConfig": {
"apiVersion": "v1",
"errorHandlePolicy": "error_abort",
"extensionServices": [
{
"errorHandlePolicy": "error_abort",
"serviceName": "yitu_voice_async_scan", // 或 aliyun_voice_async_scan
"serviceParam": {
"apiData": {
"accessKey": "xxxx",
"bizType": "xxxx", // 仅当使用依图智能语音审核时需要设置
"callbackSeed": "xxxx",
"secretKey": "xxxx"
},
"callbackAddr": "http://xxxx"
},
"streamTypes": 0
}
]
},
"recordingConfig": {
"audioProfile": 2,
"channelType": 1,
"maxIdleTime": 30,
"streamTypes": 0
}
},
"cname": "httpClient463224",
"uid": "527841"
}
{
"clientRequest": {
"extensionServiceConfig": {
"apiVersion": "v1",
"errorHandlePolicy": "error_abort",
"extensionServices": [
{
"errorHandlePolicy": "error_abort",
"serviceName": "yitu_voice_async_scan", // 或 aliyun_voice_async_scan
"serviceParam": {
"apiData": {
"accessKey": "xxxx",
"bizType": "xxxx", // 仅当使用依图智能语音审核时需要设置
"callbackSeed": "xxxx",
"secretKey": "xxxx"
},
"callbackAddr": "http://xxxx"
},
"streamTypes": 0
}
]
},
"recordingConfig": {
"audioProfile": 2,
"channelType": 1,
"maxIdleTime": 30,
"streamTypes": 0
},
"recordingFileConfig": {
"avFileType": ["hls"]
},
"storageConfig": {
"accessKey": "xxxx",
"bucket": "xxxx",
"fileNamePrefix": ["directory1", "directory2"],
"region": 0,
"secretKey": "xxxx",
"vendor": 0
}
},
"cname": "httpClient463224",
"uid": "527841"
}
{
"clientRequest": {
"extensionServiceConfig": {
"apiVersion": "v1",
"errorHandlePolicy": "error_abort",
"extensionServices": [
{
"errorHandlePolicy": "error_abort",
"serviceName": "yitu_voice_async_scan", // 或 aliyun_voice_async_scan
"serviceParam": {
"apiData": {
"accessKey": "xxxx",
"bizType": "xxxx", // 仅当使用依图智能语音审核时需要设置
"callbackSeed": "xxxx",
"secretKey": "xxxx"
},
"callbackAddr": "http://xxxx"
},
"streamTypes": 0
}
]
},
"recordingConfig": {
"audioProfile": 2,
"channelType": 1,
"maxIdleTime": 30,
"streamTypes": 0
},
"recordingFileConfig": {
"avFileType": ["hls", "mp4"]
},
"storageConfig": {
"accessKey": "xxxx",
"bucket": "xxxx",
"fileNamePrefix": ["directory1", "directory2"],
"region": 0,
"secretKey": "xxxx",
"vendor": 0
}
},
"cname": "httpClient463224",
"uid": "527841"
}
如果返回的 HTTP 状态码为 200
,表示请求成功,响应包体中包含以下字段:
code
: Number 类型,响应状态码。resourceId
: String 类型,云端录制使用的 resource ID。sid
: String 类型,录制 ID。成功开始云端录制后,你会得到一个 sid (录制 ID)。该 ID 是一次录制周期的唯一标识。"Code": 200,
"Body":
{
"sid": "38f8e3cfdc474cd56fc1ceba380d7e1a",
"resourceId": "JyvK8nXHuV1BE64GDkAaBGEscvtHW7v8BrQoRPCHxmeVxwY22-x-kv4GdPcjZeMzoCBUCOr9q-k6wBWMC7SaAkZ_4nO3JLqYwM1bL1n6wKnnD9EC9waxJboci9KUz2WZ4YJrmcJmA7xWkzs_L3AnNwdtcI1kr_u1cWFmi9BWAWAlNd7S7gfoGuH0tGi6CNaOomvr7-ILjPXdCYwgty1hwT6tbAuaW1eqR0kOYTO0Z1SobpBxu1czSFh1GbzGvTZG"
}