音訊處理流程
Vylux 透過 POST /api/audio/jobs 提供音訊處理能力。
音訊被視為獨立媒體領域,而不是影片的附帶情境。
Public create contract
音訊工作透過 domain-specific 路由建立:
POST /api/audio/jobs
request body 以輸出導向為主,不再使用舊的 generic type + options schema,也不需要 asset_type 這種 discriminator 欄位。
典型請求:
{
"source": {
"hash": "sha256...",
"key": "uploads/example.flac"
},
"pipeline": {
"package": {
"hls": {
"enabled": true,
"profile": "stream_aac_standard"
}
},
"downloads": [
{"profile": "download_mp3_high"},
{"profile": "download_flac_standard"}
],
"waveform": {
"enabled": true,
"profile": "waveform_standard",
"bins": 2048
}
},
"delivery": {
"callback_url": "https://app.example.com/internal/media/callback"
}
}
支援的輸出
目前音訊路徑可產出:
- audio-only HLS 播放輸出
- MP3 download artifact
- FLAC download artifact
- waveform JSON artifact
- job result payload 內的 probe metadata
儲存結構
衍生音訊資產都放在專用的 audio/... namespace:
audio/{prefix}/{hash}/hls/...audio/{prefix}/{hash}/downloads/...audio/{prefix}/{hash}/waveform/...
probe analysis 目前直接保存在 job result payload,而不是另外寫成 analysis/... 檔案。
處理階段
worker 目前會為以下階段記錄結構化狀態:
sourceprobepackagedownloadswaveform
失敗時會保留 stage-level 結果,而不是只回一條不可分辨的錯誤字串。
Worker 行為
內部 worker task 目前使用 audio:transcode。整體流程如下:
- 把來源 object 下載到 scratch workspace
- 用
ffprobe分析來源 - 驗證來源格式是否支援
- 視需求產生 waveform JSON
- 視需求產生 audio-only HLS
- 視需求產生 MP3 與 FLAC download artifact
- 回寫最終 job result,並在需要時送出 callback
目前 retry model 是 whole-job retry,而不是 per-stage retry orchestration。
播放入口
音訊 HLS 對外播放入口目前是:
/stream/{hash}/hls/master.m3u8
results.streaming.master_playlist 應視為 storage-backed route target,而不是 raw bucket URL。