ApsaraVideo for Live以錄製模板的形式管理錄製配置。系統根據您推流地址中的 DomainName、AppName 和 StreamName 來匹配相應的錄製模板。錄製模板支援配置兩種按需錄製方式:通過推流參數控制和通過 HTTP 回調控制,協助您基於商務規則來動態決定是否對某一次直播內容進行錄製。
通過推流參數控制
當錄製模板的觸發方式設定為”推流參數設定”時,您可以直接在推流URL中通過 record_config 參數,控制當前流是否開啟錄製。
參數格式:
record_config={"NeedRecord": <true/false>}參數說明:
true:開啟錄製,false:關閉錄製注意事項:構造推流URL時,必須通過 URL Encode 對參數進行編碼
假設推流地址為:rtmp://push.example.com/live/stream1
若需要通過參數開啟錄製,URL 可構造為:rtmp://push.example.com/live/stream1?record_config=%7B%22NeedRecord%22%3Atrue%7D&auth_key=xxx
使用限制:
該觸發方式僅支援控制是否錄製源流,不支援轉碼流錄製。錄製內容包括轉碼流時,請選擇其他觸發方式。
通過 HTTP 回調控制
工作原理
直播流推流時,如果這條流匹配的錄製模板設定的觸發方式為“回調確認”,直播服務會向您預設的按需回調地址發送一條 HTTP 要求,詢問是否對當前直播流進行錄製。
您的業務系統收到請求後,根據當前業務狀態返回錄製指令(允許或拒絕)。
直播服務根據您的返回結果,決定是否開啟錄製任務。
請求參數
參數 | 類型 | 描述 |
domain | String | 主播流網域名稱。 |
app | String | 播流所屬應用程式名稱。 |
stream | String | 播流名稱。 |
codec | String | 編碼方式。取值:
|
vbitrate | String | 視頻碼率。單位:kbps。 |
請求樣本
GET /?app=seq_all&domain=demo.aliyundoc.com&stream=ondemand8&vbitrate=2000&codec=h264 HTTP/1.1
Host: pull.aliyundoc.com
User-Agent: Go-http-client/1.1
Accept-Encoding: gzip返回參數
使用者服務器收到回調請求後,需返回 HTTP 200 狀態代碼,並在 Body 中返回 JSON 格式的資料:
參數 | 類型 | 是否必選 | 描述 |
ApiVersion | String | 否 | API版本。預設為1.0版本。 |
NeedRecord | Bool | 是 | 是否需要錄製。 |
Interval | JSONObject | 否 | 具體格式的錄製周期。取值範圍:5-21600。單位:秒。 |
Format | JSONArray | 否 | 錄製格式。支援MP4、FLV、M3U8。 |
返回樣本
{
"ApiVersion": "1.0",
"NeedRecord": true,
"Interval": {
"Mp4": 300,
"Flv": 120,
"M3U8": 180
},
"Format": ["mp4","flv"]
}返回參數處理
錄製服務收到使用者服務器的返回參數後,會與原有的錄製配置進行比對和覆蓋:
周期覆蓋:若返回參數中指定了
Interval,則該值會覆蓋原有的錄製配置中的錄製周期。格式交集:返回參數中的
Format會與之前配置的錄製格式取交集。比如,原錄製模板配置了 MP4 和 FLV 格式,而回調返回["mp4", "m3u8"],則最終只會錄製 MP4 格式。若交集為空白,則該路流不會執行任何錄製。
使用者介面必須返回 HTTP 200 狀態代碼,返回其他任何狀態代碼均被視作回調失敗,預設不進行錄製。
回調介面返回的 Body 長度上限為 2048 位元組。超過該長度的響應會被截斷,以防惡意攻擊。
注意事項
若您的業務使用了觸發拉流功能,即有使用者通過播放地址拉取時,ApsaraVideo for Live才進行拉流直播;無人播放時不會回來源站點進行拉流:
錄製觸發前提:無論是自動錄製、按需錄製還是手動錄製,在觸發拉流情境下,必須有使用者發起播放才會啟動錄製。
無人播放不錄製:若該流無任何用戶端播放,直播服務不會向來源站點拉流,因此不會產生任何錄製檔案。