全部產品
Search
文件中心

Object Storage Service:產生播放清單

更新時間:Dec 20, 2025

產生邊轉邊播播放清單能夠對視頻產生標準HLS協議的m3u8播放清單檔案,無需提前產生TS檔案就可立即播放且按播放進度動態轉碼。與傳統離線轉碼相比,顯著縮短了轉碼等待時間,且按需轉碼能大幅降低轉碼和儲存成本。

功能簡介

不同於視頻轉碼需要在視頻上傳完成後等待整個視頻轉碼完成才能播放,邊轉邊播作為即時轉碼功能,可以實現原視頻檔案上傳完成後立即開始播放,並在播放時僅對需要播放的視頻片段進行轉碼。邊轉邊播主要能為您帶來:

  • 邊播放邊轉碼,播放無需等待。

  • 轉碼最佳化,秒級開播跳播,接近本地的播放體驗。

  • 不播放不轉碼,即使轉碼檔案刪除也能重新轉碼,顯著節省轉碼和儲存成本。

  • 支援幾十種轉碼參數,轉碼參數可高度自訂。

  • 相容性高,支援300+種音視頻格式。

使用情境

  • 網盤:使用者上傳視頻後,網盤用戶端根據網路情況選擇解析度播放,確保即時性和裝置相容性。冷視頻未播放不轉碼,降低儲存成本。

  • 聊天軟體視頻預覽:在即時通訊或社交媒體中,視頻發送完成後接收方可立即播放,提高即時性。歷史聊天記錄中的視頻可定期清理,隨時可立即播放。

  • 網路論壇與部落格交流:在論壇和部落格中分享視頻時,使用邊轉邊播技術,使用者無需等待轉碼即可觀看,保持流暢性和清晰度。

功能特性

邊轉邊播的更多功能特性如下表所示。

特性

說明

標準化

  • 支援標準HLS協議。

  • 支援Media playlist以及支援產生Master playlist。

  • 支援多視頻流、多語音流、多字幕流播放。

  • 支援主流的HLS播放器。

  • 支援300+種主流的音視頻格式。

低成本

  • 未播放的視頻及切片將不進行轉碼,以降低轉碼成本。

  • 轉碼產生的視頻切片可以被刪除,以節省儲存成本。在重新播放時,系統能夠自動觸發新的轉碼,從而確保線上播放體驗不受影響。

高效率

  • 大規模叢集支援即時轉碼。

  • 提供多種解析度和碼率的視頻流,以適應不同的網路環境,確保播放的流暢性。

  • 無需等待轉碼完成,產生播放清單後即可播放。

  • 視頻頭分區大小自適應,標題載入更高效。

  • 智能預轉。

支援音視頻格式列表

邊轉邊播支援的音視頻格式有300多種,幾乎包含了所有常見的音視頻格式。下面是邊轉邊播支援的部分常見音視頻格式。

輸入視頻格式

avi、mov、flv、mkv、webm、mpeg、wmv、rm、vob、ts等所有主流格式

輸入音頻格式

mp3、wav、aac、flac、wma等所有主流格式

輸出容器格式

ts

前提條件

注意事項

參數說明

操作說明:hls/m3u8

具體參數如下表所示:

參數

類型

是否必須

描述

ss

int

產生播放清單的起始時間點,單位為毫秒(ms)。取值範圍如下:

  • 0(預設值)或不填表示從源視頻起始時間點開始。

  • 大於0表示從源視頻所設定的時間點開始。

說明

通過與參數t一同設定可以對源視頻的部分內容產生播放清單。

t

int

產生播放清單的轉碼時間長度。單位為毫秒(ms),取值範圍如下:

  • 0(預設值)或不填表示持續到源視頻結尾。

  • 大於0表示從產生播放清單的起始時間點持續所設定的時間長度。

說明

當設定參數所對應的時間點超過源視頻結尾時,按預設值處理。

ta

int

觸發邊轉邊播時向前轉碼的ts檔案數量。預設向前轉碼2分鐘時間長度的視頻。

樣本:st為10000,則ta預設為12。您可以指定該參數控制非同步向前轉碼的數量,取值範圍為[10,30]。

st

int

單個ts檔案的切片時間長度。單位為毫秒(ms),預設為10000,取值範圍為[5000,15000]。

initd

int

產生播放清單時初始轉碼的時間長度,單位為毫秒(ms),預設值為30000。

  • 當所設定的時間長度為0時,不預轉。

  • 當設定為負數或超過源視頻時間長度時,將初始轉碼整段視頻。

  • 當所設定的時間長度位於TS檔案中間時,將持續轉碼到TS檔案結束位置。

說明

該參數主要用於加快視頻初次播放的等待時間,提升播放體驗。若您需要替換傳統VOD業務情境則可嘗試初始轉碼整段視頻。

vcodec

string

視頻codec(編碼格式)。取值:

  • h264(預設值):h264編碼格式。

  • h265:h265編碼格式。

fps

float

視訊框架率,預設與源視頻一致。

fpsopt

int

視訊框架率選項。取值:

  • 0:始終使用目標幀率。

  • 1(預設值):源視訊框架率小於fps時使用源視訊框架率。

  • 2:源視訊框架率小於fps時返回失敗。

說明

該參數需要與參數fps一同設定。

pixfmt

string

像素格式,預設與源視頻一致。取值範圍如下:

  • yuv420p

  • yuv422p

  • yuv444p

  • yuv420p10le

  • yuv422p10le

  • yuv444p10le

s

string

輸出視頻的解析度,格式為寬 x 高,預設與源視頻解析度一致。

  • 格式為w x h,即寬 x 高。

  • 寬和高的取值應為2的倍數,且取值範圍為64~4096。例如:4096x4096、64x64等。

sopt

string

解析度選項。取值:

  • 0:始終使用設定的目標視頻解析度。

  • 1(預設值):源視頻解析度面積小於設定的目標視頻解析度面積時使用源視頻解析度。

  • 2:源視頻解析度面積小於設定的目標視頻解析度面積時返回失敗。

scaletype

string

縮放模式。取值範圍如下:

  • stretch(預設值):固定寬高或長短邊,強制縮放,展開以填滿空白部分。

  • crop:等比縮放,縮放為延伸出指定寬高或長短邊的矩形框外的最小解析度,然後將超出的部分進行置中裁剪。

  • fill:等比縮放,縮放為指定寬高或長短邊的矩形內的最大解析度,然後使用黑色置中填充空白部分。

  • fit:等比縮放,縮放為指定寬高或長短邊的矩形內的最大解析度。

說明

該參數需要與參數s一同設定。

arotate

int

自適應解析度方向。取值:

  • 0(預設值):關閉。

  • 1:開啟。

vb

int

視頻流碼率,單位為位元每秒(bit/s)。

如果crf、vb都不填,則crf預設值是23;如果設定了vbopt,則vb參數必填。

vbopt

int

視頻碼率選項。取值範圍如下:

  • 0:始終使用設定的目標視頻碼率。

  • 1(預設值):源視頻碼率小於設定的目標視頻碼率時使用源視頻碼率。

  • 2:源視頻碼率小於設定的目標視頻碼率時返回失敗。

crf

float

指定恒定品質模式。與參數vb互斥,取值範圍為[0,51],數值越大畫質越差,建議取值範圍為[18,38]。如果未填寫crf、vb,預設值是23。

maxrate

int

動態碼率下限定最大碼率。使用該參數時,必須指定參數bufsize。

說明

該參數需要與參數crf一起使用才有效。

bufsize

int

動態碼率下解碼緩衝大小,單位為位元每秒(bit/s)。

說明

該參數需要與參數crf一起使用才有效。

an

int

是否禁用音頻流。取值:

  • 0(預設值):不禁用。

  • 1:禁用。

acodec

string

音頻編碼方式。取值為:aac。

ar

int

音頻採樣率。單位為赫茲(Hz)。預設保持源音訊採樣頻率。取值範圍:

  • 8000

  • 11025

  • 12000

  • 16000

  • 22050

  • 24000

  • 32000

  • 44100

  • 48000

  • 88200

  • 96000

ac

int

聲道數。預設保持源音訊聲道數。取值範圍:[1,8]。

aq

int

音頻品質,與參數ab互斥,取值範圍:0~100(值越大品質越高)。

ab

int

音頻碼率,與參數aq互斥,單位為位元每秒(bit/s)。取值範圍:1000~10000000。

abopt

int

音頻碼率選項。取值:

  • 0:始終使用目標音頻碼率。

  • 1(預設值):源視訊框架率小於ab時使用源視頻碼率。

  • 2:源視訊框架率小於ab時返回失敗。

說明

產生邊轉邊播播放清單時也會用到sys/saveas參數。更多資訊,請參見另存新檔

使用步驟

使用邊轉邊播分為以下兩個步驟:

說明

產生播放清單之後,您也可以參考IMM文檔的邊轉邊播介紹來操作播放。

1. 將視頻產生邊轉邊播播放清單

轉碼資訊

  • 轉碼前

    • 視頻格式:AVI

    • 視頻名稱:oss://video-demo/example.avi

    • 視頻起始位置:跳過前面15秒

    • 視頻轉碼長度:1800秒

  • 處理方式:產生播放清單

  • 轉碼後

    • 轉碼分區大小:10秒

    • 預轉視頻長度:30秒

    • 視頻資訊

      • 視頻流格式:H.264

      • 視頻解析度:1280x720

      • 視訊框架率:25 fps

      • 視頻碼率:2 Mbps

    • 音頻資訊

      • 音頻流格式:AAC

      • 音頻碼率:128 Kbps

    • 檔案儲存體路徑首碼:oss://outbucket/outobjprefix/media

請求樣本

POST /example.avi?x-oss-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e

x-oss-process=hls/m3u8,ss_15000,t_1800000,vcodec_h264,fps_25,fpsopt_1,s_1280x720,sopt_1,scaletype_fit,arotate_1,vb_2000000,vbopt_1,acodec_aac,ar_44100,ac_2,ab_128000,abopt_1,st_10000,initd_30000|sys/saveas,o_b3V0b2JqcHJlZml4L21lZGlh,b_b3V0YnVja2V0

響應樣本

HTTP/1.1 200 OK
Server: AliyunOSS
Date: Wed, 25 May 2022 12:43:57 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 161
Connection: keep-alive
x-oss-request-id: 628E2481184E20F26C000009
x-oss-transfer-acc-type: acc-none
x-oss-data-location: oss-cn-hangzhou-a
ETag: "D0F162350DA037F4DC2A142B2E116BD0"
Last-Modified: Wed, 25 May 2022 12:20:34 GMT
x-oss-object-type: Normal
x-oss-hash-crc64ecma: 2040549661341440100
x-oss-storage-class: Standard
x-oss-server-time: 12437

{"Duration":1800,"RequestId":"********-37E6-5996-8425-********","VideoPlaylist":[{"FrameRate":"25","Resolution":"1280x720","Token":"f93c43079**********1269608ebc86e","URI":"oss://outbucket/outobjprefix/media.m3u8"}]}

2. 使用hls/sign簽名邊轉邊播

OSS對音視頻資料的訪問提供了動態簽名機制,即只需在首次訪問m3u8檔案時在URL中添加x-oss-process=hls/sign,live_1, OSS將對返回的播放清單中的所有ts地址自動按照與m3u8完全相同的方式進行簽名。

  • hls/sign簽名方式:

# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 填寫Bucket所在地區對應的Endpoint。請按實際情況填寫。
endpoint = 'yourEndpoint'

# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 目標Bucket名稱。
bucket_name = 'your-oss-bucket-name'
# output/media.m3u8填寫產生的播放清單名稱。
key = 'output/media.m3u8'

# 指定Bucket執行個體,所有檔案相關的方法都需要通過Bucket執行個體來調用。
# 必須使用oss2.AuthV2的簽名方式。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', bucket_name)

# x-oss-process的處理方式為hls/sign,live_1。
params = {}
params.update({oss2.Bucket.PROCESS: 'hls/sign,live_1'})

# 簽名URL。
# 產生簽名URL時,OSS預設會對Object完整路徑中的正斜線(/)進行轉義,從而導致產生的簽名URL無法直接使用。
# 設定slash_safe為True,OSS不會對Object完整路徑中的正斜線(/)進行轉義,此時產生的簽名URL可以直接使用。
url = bucket.sign_url('GET', key, 7200, params=params, slash_safe=True)

# 產生的URL可以直接在HLS播放器中播放。
print(url)
  • 原始m3u8內容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.0,
media-c14709808479b31566b50f2f8b93fe1a-0.ts
#EXTINF:10.0,
media-c14709808479b31566b50f2f8b93fe1a-1.ts
#EXTINF:10.0,
media-c14709808479b31566b50f2f8b93fe1a-2.ts
#EXTINF:10.0,
media-c14709808479b31566b50f2f8b93fe1a-3.ts
#EXT-X-ENDLIST
  • 使用hls/sign簽名後返回的內容:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.000,
media-c14709808479b31566b50f2f8b93fe1a-0.ts?x-oss-process=if_status_eq_404{hls/ts,from_b3V0cHV0L21lZGlhLm0zdTg}&x-oss-expires=1710457284&x-oss-signature-version=OSS2&x-oss-access-key-id=****fEAub****&x-oss-signature=****VR3gy****
#EXTINF:10.000,
media-c14709808479b31566b50f2f8b93fe1a-1.ts?x-oss-process=if_status_eq_404{hls/ts,from_b3V0cHV0L21lZGlhLm0zdTg}&x-oss-expires=1710457284&x-oss-signature-version=OSS2&x-oss-access-key-id=****fEAub****&x-oss-signature=****VR3gy****
#EXTINF:10.000,
media-c14709808479b31566b50f2f8b93fe1a-2.ts?x-oss-process=if_status_eq_404{hls/ts,from_b3V0cHV0L21lZGlhLm0zdTg}&x-oss-expires=1710457284&x-oss-signature-version=OSS2&x-oss-access-key-id=****fEAub****&x-oss-signature=****VR3gy****
#EXTINF:10.000,
media-c14709808479b31566b50f2f8b93fe1a-3.ts?x-oss-process=if_status_eq_404{hls/ts,from_b3V0cHV0L21lZGlhLm0zdTg}&x-oss-expires=1710457284&x-oss-signature-version=OSS2&x-oss-access-key-id=****fEAub****&x-oss-signature=****VR3gy****
#EXT-X-ENDLIST

使用SDK

產生邊轉邊播播放清單僅支援同步處理,SDK使用方法請參見使用SDK

常見問題

輸出檔案包括哪些?

我們會根據您指定的輸入路徑首碼產生m3u8檔案和ts檔案。m3u8檔案立刻產生。如果您指定了預轉視頻長度,會非同步產生預轉長度的ts檔案(例如您指定的預轉長度是30秒,切片長度為10秒,則產生3個ts檔案)。未指定預轉的部分會在視頻播放時才會按需觸發非同步轉碼(例如1:視頻從未播放,則不會對未指定預轉的部分產生ts檔案;例如2:視頻從15分鐘的地方開始播放,只會從15分鐘的位置開始轉碼)。組建檔案的分類樹如下:

.
├── outobjprefix.m3u8
├── outobjprefix-92376fbb-171f-4259-913f-705f7ee02f2s-0.ts
├── outobjprefix-92376fbb-171f-4259-913f-705f7ee02f2s-1.ts
├── outobjprefix-92376fbb-171f-4259-913f-705f7ee02f2s-2.ts
├── outobjprefix-92376fbb-171f-4259-913f-705f7ee02f2s-3.ts

已經產生的ts檔案手工刪除後能正常播放嗎?

可以。只要視頻源檔案和m3u8播放清單未被刪除,手動刪除ts檔案後仍能正常播放,因為m3u8播放清單再次被請求時會觸發重建ts檔案。這種方式可以減少儲存成本,不影響視頻的重新播放。

能使用非邊轉邊播的m3u8檔案做邊轉邊播嗎?

不可以。非邊轉邊播產生的m3u8檔案不能用於邊轉邊播。