本文檔指導您如何使用即時音視頻(ARTC)的雲端錄製功能,將通話或直播內容錄製並儲存至雲端,以滿足回放、存檔、審核等需求。
功能概覽
雲端錄製功能允許您通過API建立錄製任務,將ARTC頻道內的音視頻流錄製下來。核心特性包括:
多樣的錄製模式:支援將每個使用者單獨錄製(單流錄製),或將多個使用者合成為一個檔案(混流錄製)。
靈活的訂閱機制:可按需選擇錄製頻道內的指定使用者、指定流類型(網路攝影機/螢幕畫面分享)。
自訂輸出:支援自訂混流布局、背景圖,並可產生多種檔案格式(如 MP4, MP3, HLS)。
可靠的雲端儲存:支援將錄製檔案自動上傳至阿里雲Object Storage Service或ApsaraVideo for VODVOD。
準備工作
開通相關服務:確保您已開通即時音視頻(ARTC)服務。根據您選擇的儲存方式,您還需要:
儲存到OSS:錄製儲存至OSS需要開通OSS服務並建立Bucket,具體操作請參見建立儲存空間。會產生儲存費用,在OSS中計費請參見儲存費用。
說明完成服務授權:確保ARTC服務有許可權將檔案寫入您指定的OSS Bucket。通常在開通服務時會自動完成授權。如果該許可權意外被刪除可點擊同意雲資源訪問授權完成快速授權。
儲存到VOD:錄製儲存至VOD方式需要開通ApsaraVideo for VOD服務,並進行配置管理儲存Bucket。會產生儲存費用,在VOD中計費請參見點播基礎服務計費。
重要地區一致性要求:雲端錄製儲存所需Bucket的地區與調用介面時使用的存取點地區必須一致。例如,選擇cn-shanghai存取點時,Bucket必須也是cn-shanghai地區的。
錄製檔案產生:錄製結束後,系統會將錄製檔案根據介面參數配置項儲存至儲存平台所配置的Bucket中。
瞭解計費規則:
雲端錄製屬於通用能力,不需要開通即可使用。
雲端錄製屬於收費功能,當前為公測階段,您可以免費使用,公測結束後將正常收費,具體時間另行通知。
核心概念
錄製模式
您可以根據業務情境選擇合適的錄製模式。
單流錄製
分別錄製頻道內每個使用者的音視頻流,為每個使用者產生獨立的錄製檔案。適用於需要對單個使用者內容進行獨立分析或後期處理的情境。
錄製檔案的音視頻參數預設與源流保持一致。
若使用者中途斷流,錄製檔案會補充靜音或黑屏/最後一幀畫面,保證檔案連續性。
混流錄製
將頻道內多個使用者的音視頻流混合成一個流,並錄製成單個檔案。適用於需要完整記錄多人互動過程的情境,如會議、線上教育等。
可自訂輸出視頻的解析度、碼率、幀率等參數。
支援自訂視頻布局(最多17路畫面)和畫布背景圖。
若有使用者斷流,其在混流畫面中的位置將顯示預設的子畫面背景圖或黑屏。
錄製任務生命週期
當任務處於正常運行或異常運行狀態中時,若超過最大生命週期(72小時)則任務會自動停止。
任務已停止狀態下會觸發停止回調,以該回調狀態為準,當收到回調資訊時,可查詢全部錄製檔案。
空閑逾時時間,當任務處於空閑狀態的時間長度超過MaxIdleTime時,自動停止任務。單位為秒,範圍須在[10,14400]內,即最大4小時。(預設為300秒)
對於混流錄製模式,當所有訂閱的使用者流都停止推流時算作空閑。
對於單流錄製模式,訂閱的流之間彼此獨立,任意一路流停止推流都算作空閑,達到MaxIdleTime後會停止該路流的錄製,當所有訂閱流都空閑逾時後,會停止整個雲端錄製任務。
檔案產生與儲存
錄製檔案格式
純音頻:支援 MP3、AAC 格式。
音視頻:支援 MP4、HLS 格式。
系統預設會產生一份HLS格式的檔案,即使您未在請求中指定。
產生多種格式檔案會按格式數量分別計費。
檔案命名規則
錄製檔案儲存體在您指定的OSS/VOD路徑下,並以TaskId作為一級目錄。您可以通過組合預設變數來自訂檔案名稱。
自訂檔案名稱可用變數:
變數名 | 描述 |
| 應用ID。 |
| 頻道ID。 |
| 使用者ID(僅單流錄製有效)。 |
| 錄製模式(0: 單流, 1: 混流)。 |
| 流類型(A: 音頻, V: 視頻, AV: 音視頻)。 |
| 視頻源(C: 網路攝影機, S: 螢幕畫面分享)。 |
| 錄製開始的UTC時間(毫秒)。 |
| HLS切片索引號。 |
預設檔案名稱規則:
單流錄製:
HLS格式:
{AppId}_{ChannelId}_{UserId}_{StartTime}_{Sequence}其他格式:
{AppId}_{ChannelId}_{UserId}_{StartTime}
混流錄製:
HLS格式:
{AppId}_{ChannelId}_{StartTime}_{Sequence}其他格式:
{AppId}_{ChannelId}_{StartTime}
若同時訂閱了同一個
UserId的不同StreamType或不同SourceType則在預設命名規則中的{UserId}後補充{SourceType}。當檔案命名為***後,檔案最終會儲存為類似
TaskId/***.M3U8的形式,其中TaskId是在啟動雲端錄製任務時產生的任務ID,會由系統自動添加到儲存路徑中。
檔案分區策略
為了便於管理,錄製會按指定時間長度自動切分成多個檔案。您可以通過 MaxFileDuration 參數設定每個分區檔案的最大時間長度,範圍為180秒到7200秒(2小時),預設為2小時。
實現步驟
通過調用API,您可以輕鬆控制雲端錄製的整個流程。以下是核心步驟和常見情境的參數樣本。
第一步:啟動錄製任務
調用啟動Rtc雲端錄製任務介面來啟動一個錄製任務。您需要根據需求,在請求中配置訂閱、錄製和儲存參數。
關鍵參數配置思路:
明確錄製模式:決定是單流(
RecordMode: 0)還是混流(RecordMode: 1)。確定訂閱對象:在
SubscribeParams中列出您想錄製的UserId及其流類型(StreamType)。設定輸出格式:在
RecordParams中定義輸出是純音頻(StreamType: 1)還是音視頻(StreamType: 0)。配置儲存資訊:在
StorageParams中指定儲存到OSS或VOD,並提供必要的Bucket和Endpoint資訊。
情境樣本
單流純音頻錄製
情境:在房間myRoom內,有userA、userB和userC三個使用者。現在希望分別錄製userA和userB的音頻內容,userC不錄製。並期望產生m3u8和mp3檔案(m3u8檔案是必選的)。
錄製結果:檔案會儲存到指定的OSS的my-bucket內。其中,m3u8格式的檔案儲存體在hls/{taskId}路徑下,mp3格式的檔案儲存體在mp3/{taskId}路徑下。
參數樣本:
{
"AppId": "my-app-id", // 推流時使用的appId
"ChannelId": "myRoom", // 推流時指定的房間
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 待錄製的user
"StreamType": 1 // 指定訂閱純音頻
},
{
"UserId": "userB", // 待錄製的user
"StreamType": 1 // 指定訂閱純音頻
}
]
},
"RecordParams": {
"RecordMode": 0, // 指定單流錄製
"StreamType": 1, // 指定輸出純音頻格式
"MaxFileDuration": 180 // 指定檔案大小,180對應3分鐘
},
"StorageParams": {
"StorageType": 1, // 指定儲存到OSS
"FileInfo": [ // 產生m3u8和mp3檔案,分別儲存到"hls"和"mp3"路徑下
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP3",
"FilePathPrefix": [
"mp3"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"NotifyUrl": "http://mytest/callback", // 接收回調訊息的地址,可選
"NotifyAuthKey": "12345678abcdefghikj" // 回調訊息的鑒權key,可選
}單流音視頻錄製
情境:在房間myRoom內,有userA、userB和userC三個使用者。現在希望分別錄製userA和userB的音視頻內容,userC不錄製。並期望產生m3u8和mp4檔案(m3u8檔案是必選的)。
錄製結果:檔案會儲存到指定的OSS的my-bucket內。其中,m3u8格式的檔案儲存體在hls/{taskId}路徑下,mp4格式的檔案儲存體在mp4/{taskId}路徑下。
參數樣本:
{
"AppId": "my-app-id", // 推流時使用的appId
"ChannelId": "myRoom", // 推流時指定的房間
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 待錄製的user
"StreamType": 0 // 指定訂閱音視頻
},
{
"UserId": "userB", // 待錄製的user
"StreamType": 0 // 指定訂閱音視頻
}
]
},
"RecordParams": {
"RecordMode": 0, // 指定單流錄製
"StreamType": 0, // 指定輸出音視頻格式
"MaxFileDuration": 180 // 指定檔案大小,180對應3分鐘
},
"StorageParams": {
"StorageType": 1, // 指定儲存到OSS
"FileInfo": [ // 產生m3u8和mp4檔案,分別儲存到"hls"和"mp4"路徑下
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP4",
"FilePathPrefix": [
"mp4"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"NotifyUrl": "http://mytest/callback", // 接收回調訊息的地址,可選
"NotifyAuthKey": "12345678abcdefghikj" // 回調訊息的鑒權key,可選
}混流純音頻錄製
情境:在房間myRoom內,有userA、userB和userC三個使用者。現在希望錄製userA和userB的交流內容,userC不錄製,錄製出的檔案中既包含userA的聲音,又包含userB的聲音,即混流錄製。並期望產生m3u8和mp3檔案(m3u8檔案是必選的)。
錄製結果:檔案會儲存到指定的OSS的my-bucket內。其中,m3u8格式的檔案儲存體在hls/{taskId}路徑下,mp3格式的檔案儲存體在mp3/{taskId}路徑下。
參數樣本:
{
"AppId": "my-app-id", // 推流時使用的appId
"ChannelId": "myRoom", // 推流時指定的房間
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 待錄製的user
"StreamType": 1 // 指定訂閱純音頻
},
{
"UserId": "userB", // 待錄製的user
"StreamType": 1 // 指定訂閱純音頻
}
]
},
"RecordParams": {
"RecordMode": 1, // 指定混流錄製
"StreamType": 1, // 指定輸出純音頻格式
"MaxFileDuration": 180 // 指定檔案大小,180對應3分鐘
},
"StorageParams": {
"StorageType": 1, // 指定儲存到OSS
"FileInfo": [ // 產生m3u8和mp3檔案,分別儲存到"hls"和"mp3"路徑下
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP3",
"FilePathPrefix": [
"mp3"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"MixTranscodeParams": {
"AudioBitrate": 128, // 音頻碼率
"AudioChannels": 2, // 頻道數
"AudioSampleRate": 44100 // 採樣率
},
"NotifyUrl": "http://mytest/callback", // 接收回調訊息的地址,可選
"NotifyAuthKey": "12345678abcdefghikj" // 回調訊息的鑒權key,可選
}混流音視頻錄製
情境:在房間myRoom內,有userA、userB和userC三個使用者。現在希望錄製userA和userB的音頻和網路攝影機內容,以及userC的音頻內容。並期望產生m3u8和mp4檔案(m3u8檔案是必選的)。
錄製出的結果中,期望userA和userB的畫面按如下方式排列:
錄製結果:檔案會儲存到指定的OSS的my-bucket內。其中,m3u8格式的檔案儲存體在hls/{taskId}路徑下,mp4格式的檔案儲存體在mp4/{taskId}路徑下。
參數樣本:
{
"AppId": "my-app-id", // 推流時使用的appId
"ChannelId": "myRoom", // 推流時指定的房間
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 待錄製的user
"StreamType": 0, // 指定訂閱音視頻
"SourceType": 0 // 指定訂閱相機流
},
{
"UserId": "userB", // 待錄製的user
"StreamType": 0, // 指定訂閱音視頻
"SourceType": 0 // 指定訂閱相機流
},
{
"UserId": "userC", // 待錄製的user
"StreamType": 1 // 指定訂閱純音頻
}
]
},
"RecordParams": {
"RecordMode": 1, // 指定混流錄製
"StreamType": 0, // 指定輸出音視頻格式
"MaxFileDuration": 180 // 指定檔案大小,180對應3分鐘
},
"StorageParams": {
"StorageType": 1, // 指定儲存到OSS
"FileInfo": [ // 產生m3u8和mp4檔案,分別儲存到"hls"和"mp4"路徑下
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP4",
"FilePathPrefix": [
"mp4"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"MixTranscodeParams": {
"AudioBitrate": 128,
"AudioChannels": 2,
"AudioSampleRate": 44100,
"VideoCodec": "H.264",
"VideoBitrate": 500,
"VideoFramerate": 30,
"VideoGop": 30,
"VideoHeight": 480, // 最終產生視頻的高度
"VideoWidth": 640 // 最終產生視頻的寬度
},
"MixLayoutParams": {
"UserPanes": [
{
"UserId": "userA",
"SourceType": 0,
"Height": "1", // 占整個畫面高度
"Width": "0.5", // 佔一半畫面寬度
// 視窗左上頂點處於畫面左上方
"X": "0",
"Y": "0"
},
{
"UserId": "userB",
"SourceType": 0,
"Height": "1", // 占整個畫面高度
"Width": "0.5", // 佔一半畫面寬度
// 視窗左上頂點處於畫面中部
"X": "0.5",
"Y": "0"
}
]
},
"NotifyUrl": "http://mytest/callback", // 接收回調訊息的地址,可選
"NotifyAuthKey": "12345678abcdefghikj" // 回調訊息的鑒權key,可選
}第二步(可選):更新錄製任務
在錄製過程中,您可以調用更新Rtc雲端錄製任務介面來動態修改錄製參數,無需停止任務。
單流模式:僅支援更新訂閱資訊。
混流模式:可以更新訂閱資訊與布局資訊。
第三步:停止錄製任務
當您需要結束錄製時,調用停止Rtc雲端錄製任務介面。
調用此介面後,系統會開始處理並上傳最後的錄製檔案。真正的任務結束是以收到“停止回調”事件為準。在此之前,請勿刪除或修改相關的儲存資源。
第四步:查詢任務與檔案
可調用查詢Rtc雲端錄製檔案及任務狀態介面來查詢雲端錄製中錄製任務的狀態與錄製檔案資訊等。
僅當錄製任務存在時可以正常查詢到具體資訊,若查詢任務不存在則無法查詢到資訊,介面會返回錯誤碼。
當任務成功進入到運行狀態且距離任務建立時間未達到72小時的情況下,可正常擷取到錄製檔案資訊,超過72小時後會返回錯誤碼。