この機能は、ビデオの標準的な HTTP Live Steaming (HLS) m3u8 プレイリストを生成します。これにより、Transport Stream (TS) ファイルを事前に生成することなく、ビデオをすぐに再生できます。ビデオは再生中に動的にトランスコーディングされます。従来のオフラインのトランスコーディングと比較して、この方法はオンデマンドでコンテンツを処理することにより、トランスコーディングの待機時間を大幅に短縮し、トランスコーディングとストレージのコストを削減します。
概要
ビデオトランスコーディングでは、ビデオ全体のトランスコーディングが完了するまで再生を待つ必要がありますが、ライブトランスコーディングはリアルタイム機能です。必要なビデオセグメントのみをその場でトランスコーディングすることで、ソースビデオファイルがアップロードされた直後に再生を開始できます。ライブトランスコーディングには、次の利点があります。
再生中にトランスコーディングするため、待機時間がありません。
最適化されたトランスコーディングにより、高速な起動とシークが可能になり、ローカル再生と同様の再生体験を提供します。
ビデオが再生されない場合、トランスコーディングは行われません。トランスコーディングされたファイルは削除し、オンデマンドで再生成できます。これにより、トランスコーディングとストレージのコストを大幅に節約できます。
高度なカスタマイズのために、数十のトランスコーディングパラメーターをサポートします。
300 以上のオーディオおよびビデオフォーマットをサポートし、高い互換性を提供します。
利用シーン
ネットワークドライブ:ユーザーがビデオをアップロードした後、クライアントはネットワーク条件に基づいて最適な解像度を選択して再生できます。これにより、リアルタイム再生とデバイスの互換性が確保されます。頻繁にアクセスされないビデオは、再生されない場合はトランスコーディングされず、ストレージコストを削減します。
チャットアプリケーションでのビデオプレビュー:インスタントメッセージ (IM) やソーシャルメディアアプリケーションでは、ビデオは送信直後に再生可能です。これにより、リアルタイムパフォーマンスが向上します。チャット履歴内のビデオは定期的に削除でき、オンデマンドで再生可能な状態を維持できます。
オンラインフォーラムとブログ:フォーラムやブログでビデオを共有する際、ライブトランスコーディングを使用すると、ユーザーはトランスコーディングを待つことなくビデオを視聴できます。これにより、スムーズな再生と高解像度が保証されます。
特徴
次の表に、ライブトランスコーディングの特徴を説明します。
特徴 | 説明 |
標準化 |
|
低コスト |
|
高効率 |
|
サポートされているオーディオおよびビデオフォーマット
ライブトランスコーディングは、ほぼすべての一般的なフォーマットを含む 300 以上のオーディオおよびビデオフォーマットをサポートしています。次の表に、サポートされている一般的なフォーマットの一部を示します。
入力ビデオフォーマット | AVI、MOV、FLV、MKV、WebM、MPEG、WMV、RM、VOB、TS などのすべての主流フォーマット。 |
入力オーディオフォーマット | MP3、WAV、AAC、FLAC、WMA などのすべての主流フォーマット。 |
出力コンテナフォーマット | TS |
前提条件
Intelligent Media Management (IMM) サービスが有効化されていること。詳細については、「プロダクトのアクティベーション」をご参照ください。
IMM プロジェクトがアタッチされていること。Object Storage Service (OSS) コンソールでプロジェクトをアタッチする方法の詳細については、「クイックスタート」をご参照ください。API を使用してプロジェクトをアタッチする方法の詳細については、「AttachOSSBucket - Object Storage Service バケットのアタッチ」をご参照ください。
IMM が処理を実行するために必要な権限を持っていること。詳細については、「権限」をご参照ください。
注意事項
匿名アクセスは拒否されます。
詳細については、「ライブトランスコーディング」および「ライブトランスコーディングプレイリストの生成」をご参照ください。
パラメーターの説明
操作:hls/m3u8
次の表にパラメーターを説明します。
パラメーター | タイプ | 必須 | 説明 |
ss | int | いいえ | プレイリストを生成する開始時刻。単位:ミリ秒 (ms)。有効値:
説明 このパラメーターを t パラメーターと併用して、ソースビデオの特定の部分のプレイリストを生成します。 |
t | int | いいえ | プレイリストのトランスコーディング期間。単位:ms。有効値:
説明 指定した時刻がソースビデオの最後を超える場合、デフォルト値が使用されます。 |
ta | int | いいえ | ライブトランスコーディングがトリガーされたときに事前トランスコーディングする TS ファイルの数。デフォルトでは、2 分間のビデオセグメントが事前トランスコーディングされます。 例:st が 10000 の場合、ta のデフォルト値は 12 です。このパラメーターを指定して、非同期で事前トランスコーディングされるセグメントの数を制御できます。有効値:[10,30]。 |
st | int | いいえ | 単一の TS ファイルセグメントの期間。単位:ms。デフォルト:10000。有効値:[5000,15000]。 |
initd | int | いいえ | プレイリスト生成時の初期トランスコーディング期間。単位:ms。デフォルト:30000。
説明 このパラメーターは主に、最初の再生の待機時間を短縮し、ユーザーエクスペリエンスを向上させるために使用されます。従来の VOD サービスを置き換えるには、ビデオ全体を初期トランスコーディングすることを試みることができます。 |
vcodec | string | いいえ | ビデオコーデック (エンコード形式)。有効値:
|
fps | float | いいえ | ビデオフレームレート。デフォルト:ソースビデオと同じ。 |
fpsopt | int | いいえ | ビデオフレームレートのオプション。有効値:
説明 このパラメーターは fps パラメーターと一緒に設定する必要があります。 |
pixfmt | string | いいえ | ピクセルフォーマット。デフォルト:ソースビデオと同じ。有効値:
|
s | string | いいえ | 出力ビデオの解像度。
|
sopt | string | いいえ | 解像度オプション。有効値:
|
scaletype | string | いいえ | スケーリングモード。有効値:
説明 このパラメーターは s パラメーターと一緒に設定する必要があります。 |
arotate | int | いいえ | 解像度の自動回転。有効値:
|
vb | int | いいえ | ビデオストリームのビットレート。単位:bit/s。 crf または vb を指定しない場合、crf のデフォルト値は 23 です。vbopt を設定する場合、vb パラメーターは必須です。 |
vbopt | int | いいえ | ビデオビットレートのオプション。有効値:
|
crf | float | いいえ | 固定品質モードを指定します。このパラメーターは vb パラメーターと相互排他です。有効値:[0,51]。値が大きいほど品質は低くなります。値は [18,38] の範囲で指定することを推奨します。crf または vb を指定しない場合、デフォルト値は 23 です。 |
maxrate | int | いいえ | 動的ビットレートモードの最大ビットレート。このパラメーターを使用する場合は、bufsize パラメーターも指定する必要があります。 説明 このパラメーターは crf パラメーターと併用する場合にのみ有効です。 |
bufsize | int | いいえ | 動的ビットレートモードのデコーダーバッファーサイズ。単位:bit/s。 説明 このパラメーターは crf パラメーターと併用する場合にのみ有効です。 |
an | int | いいえ | オーディオストリームを無効にするかどうかを指定します。有効値:
|
acodec | string | いいえ | 音声エンコード方式。値は `aac` です。 |
ar | int | いいえ | 音声サンプリングレート。単位:ヘルツ (Hz)。デフォルト:ソースオーディオと同じ。有効値:
|
ac | int | いいえ | サウンドチャンネルの数。デフォルト:ソースオーディオと同じ。有効値:[1,8]。 |
aq | int | いいえ | 音声品質。このパラメーターは ab パラメーターと相互排他です。有効値:0 から 100。値が大きいほど高品質になります。 |
ab | int | いいえ | 音声ビットレート。このパラメーターは aq パラメーターと相互排他です。単位:bit/s。有効値:1000 から 10000000。 |
abopt | int | いいえ | 音声ビットレートのオプション。有効値:
|
sys/saveas パラメーターは、ライブトランスコーディングプレイリストを生成する際にも使用されます。詳細については、「名前を付けて保存」をご参照ください。
操作手順
ライブトランスコーディングには、次の 2 つのステップが含まれます。
プレイリストを生成した後、IMM ドキュメントのライブトランスコーディングのトピックで再生手順を確認することもできます。
1. ビデオのライブトランスコーディングプレイリストの生成
トランスコーディング情報
トランスコーディング前
ビデオフォーマット:AVI
ビデオ名:oss://video-demo/example.avi
開始位置:ビデオの先頭から 15 秒
トランスコーディング期間:1800 秒
処理方法:プレイリストの生成
トランスコーディング後
セグメントサイズ:10 秒
事前トランスコーディング期間:30 秒
ビデオ情報
ビデオストリームフォーマット:H.264
ビデオ解像度:1280 × 720
ビデオフレームレート: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 を使用したライブトランスコーディングストリームへの署名
Object Storage Service (OSS) は、オーディオおよびビデオデータにアクセスするための動的署名メカニズムを提供します。m3u8 ファイルに初めてアクセスするときは、URL に x-oss-process=hls/sign,live_1 を追加します。すると、OSS は、m3u8 ファイルに使用されたのと同じ署名メソッドを使用して、返されたプレイリスト内のすべての TS アドレスに自動的に署名します。
hls/sign 署名メソッド:
# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# バケットが配置されているリージョンのエンドポイントを指定します。実際の値に置き換えてください。
endpoint = 'yourEndpoint'
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 宛先バケットの名前。
bucket_name = 'your-oss-bucket-name'
# key を生成されたプレイリストの名前に設定します (例:output/media.m3u8)。
key = 'output/media.m3u8'
# バケットインスタンスを指定します。すべてのファイル関連のメソッドは、バケットインスタンスを介して呼び出す必要があります。
# 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 はデフォルトでオブジェクトの完全なパスに含まれるスラッシュ (/) をエスケープします。これにより、署名付き URL が使用できなくなります。
# slash_safe を True に設定します。OSS はオブジェクトの完全なパスに含まれるスラッシュ (/) をエスケープしません。生成された署名付き 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-ENDLISThls/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-ENDLISTSDK の使用
ライブトランスコーディングプレイリストの生成は同期プロセスです。SDK の使用方法については、「SDK の使用」をご参照ください。
よくある質問
どのような出力ファイルが含まれますか?
指定された出力パスのプレフィックスに基づいて、m3u8 ファイルと TS ファイルが生成されます。m3u8 ファイルはすぐに生成されます。事前トランスコーディング期間を指定した場合、その期間の TS ファイルが非同期で生成されます。たとえば、事前トランスコーディング期間が 30 秒でセグメントの長さが 10 秒の場合、3 つの TS ファイルが生成されます。事前トランスコーディングされていないビデオの部分は、再生中にオンデマンドでトランスコーディングされます。たとえば、ビデオが一度も再生されない場合、追加の TS ファイルは生成されません。ビデオを 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 プレイリストが削除されない限り、ビデオは再生可能です。m3u8 プレイリストが再度リクエストされると、TS ファイルは再生成されます。この方法により、ビデオ再生に影響を与えることなくストレージコストを削減できます。
ライブトランスコーディングで生成されていない m3u8 ファイルをライブトランスコーディングに使用できますか?
いいえ、できません。ライブトランスコーディング機能で生成された m3u8 ファイルのみがライブトランスコーディングに使用できます。