ライブトランスコードを使用すると、トランスポートストリーム (TS) オブジェクトを事前に作成する必要なく、HTTP ライブストリーミングプロトコル (HLS) 用の M3U8 プレイリストを作成することで、ビデオを動的にトランスコードして即座に再生できます。 従来のトランスコードと比較して、ライブトランスコードはビデオのトランスコード開始に必要な時間を大幅に短縮し、オンデマンド機能によりトランスコードとストレージのオーバーヘッドを大幅に削減します。
概要
ビデオトランスコード(再生を開始する前にビデオ全体をトランスコードする必要がある)とは異なり、ライブトランスコードは必要なビデオセグメントのみを処理し、元のビデオファイルをアップロードした直後に再生を開始できます。 ライブトランスコードには、次の利点があります。
トランスコード中もすぐに再生でき、バッファリングは不要です。
最適化されたトランスコードとスムーズな再生、数秒で完了するスクラブ
オンデマンドトランスコード、トランスコード済みファイルの削除時の再トランスコード、トランスコードとストレージのコスト削減。
多数のカスタムトランスコードパラメーターを使用したカスタムトランスコード。
300 を超えるオーディオおよびビデオフォーマットとの優れた互換性。
シナリオ
ネットワークドライブに保存されているビデオの再生: ライブトランスコードを使用すると、ネットワークドライブ内のビデオを、実際のネットワーク状況に最適な解像度で、クライアントのリクエストに応じて即座に再生できます。 これにより、リアルタイム再生が保証され、デバイス間での優れたビデオ互換性が提供されます。 また、ライブトランスコードでは、ビデオがリクエストされない場合、ネットワークドライブ内のビデオはトランスコードされないため、ストレージコストも削減されます。
ネットワークドライブに保存されているビデオ: ユーザーがネットワークドライブにビデオをアップロードすると、クライアントはリアルタイムのネットワーク状況に基づいて最適な再生解像度を自動的に選択し、リアルタイム再生とマルチデバイス互換性の両方を保証します。 コールドアーカイブビデオは、再生されない場合はトランスコードされないため、ストレージコストを効果的に削減できます。
ソーシャルメディアプラットフォームでのビデオのプレビューと再生: ライブトランスコードを使用すると、インスタントメッセージやソーシャルメディアプラットフォームのユーザーは、受信したビデオをすぐに再生できます。 これにより、コミュニケーションの適時性が向上します。 さらに、ユーザーが長時間視聴されていないチャット履歴のビデオを再生する場合、ビデオ用に生成された TS オブジェクトがストレージ使用量を削減するために定期的にクリアされていても、ビデオを即座に再生できます。
ソーシャルメディアプラットフォームでのビデオのプレビュー: インスタントメッセージまたはソーシャルメディアプラットフォーム経由で共有されたビデオは、配信後すぐに再生可能になり、待ち時間がなくなります。 チャット履歴にある視聴されていないビデオは、ストレージ使用率を最適化するために使用される TS セグメントの定期的なクリーンアップ後も、すぐにアクセスできます。
フォーラムやブログプラットフォームでのビデオコンテンツの共有: ライブトランスコードは、フォーラムやブログプラットフォームのユーザーに、スムーズでデバイス互換性のあるビデオ視聴体験を提供します。 ユーザーは、ビデオトランスコードを待つことなく、共有ビデオをネットワーク状況に最適な解像度で即座に再生できます。
フォーラムとブログで共有されるビデオ: ライブトランスコードテクノロジーにより、ユーザーは完全なトランスコードを待つことなく再生を開始できます。 これにより、スムーズでクリアな再生が保証されます。
機能
次の表に、ライブトランスコードの利点を詳しく説明します。
機能 | 説明 |
標準化 |
|
費用対効果 |
|
高効率 |
|
サポートされているオーディオおよびビデオフォーマット
ライブトランスコード機能は、300 種類を超える事実上すべてのオーディオおよびビデオフォーマットをサポートしています。 次の表に、ライブトランスコードでサポートされている一般的なオーディオおよびビデオフォーマットの一部を示します。
入力ビデオフォーマット | AVI、MOV、FLV、MKV、WebM、MPEG、WMV、RM、VOB、および TS、すべての主要なビデオフォーマット |
入力オーディオフォーマット | MP3、WAV、AAC、FLAC、および WMA、すべての主要なビデオフォーマット |
出力コンテナフォーマット | TS |
前提条件
IMM がアクティブ化されていること。 詳細については、「IMM のアクティブ化」をご参照ください。
続行する前に、IMM プロジェクトがバケットにマッピングされていることを確認してください。 IMM プロジェクトのマッピング方法の詳細については、「はじめに」および「AttachOSSBucket」をご参照ください。 OSS コンソールで IMM プロジェクトをマッピングする方法の詳細については、「はじめに」をご参照ください。 API 操作を呼び出して IMM プロジェクトをマッピングする方法の詳細については、「AttachOSSBucket」をご参照ください。
ライブトランスコードのプレイリストを生成するには、Object Storage Service (OSS) の x-oss-process 機能が必要です。 GET および POST メソッドに基づいて Intelligent Media Management (IMM) のデータ処理機能にアクセスするには、クォータセンターでアプリケーションを送信済みであることを確認してください。
IMM には、操作を実行するために必要な権限が付与されていること。 詳細については、「権限」をご参照ください。
使用上の注意
匿名アクセスは拒否されます。
ライブトランスコードに関するその他の使用上の注意については、「ライブトランスコード」および「GenerateVideoPlaylist」をご参照ください。
パラメーター
アクション: hls/m3u8
次の表に、ライブトランスコードプレイリストを生成するために設定できるパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 |
ss | int | いいえ | ソースビデオでプレイリストの生成が開始される時点。 単位: ミリ秒。 有効な値:
説明 このパラメーターを t パラメーターと一緒に使用して、ビデオコンテンツの一部のみをカバーするプレイリストを生成できます。 |
t | int | いいえ | プレイリストでカバーされるソースビデオのコンテンツの期間。 単位: ミリ秒。 有効な値:
説明 このパラメーターにソースビデオの合計時間よりも大きい値を設定すると、プレイリストはソースビデオの最後までしか延長されません。 |
ta | int | いいえ | ライブトランスコードがトリガーされたときに事前トランスコードされる TS オブジェクトの数。 デフォルトでは、2 分間のセグメントが事前トランスコードされます。 たとえば、st パラメーターを 10000 に設定した場合、ta パラメーターのデフォルト値は 12 です。 有効な値: 10 ~ 30。 |
st | int | いいえ | TS オブジェクトの期間。 単位: ミリ秒。 デフォルト値: 10000。 有効な値: 5000 ~ 15000。 |
initd | int | いいえ | 初期トランスコードでカバーされる期間。 単位: ミリ秒。 デフォルト値: 30000。
説明 このパラメーターは、最初の再生を開始するために必要な時間を短縮し、視聴体験を向上させます。 従来のビデオオンデマンドシナリオでライブトランスコードを使用する場合は、最初にビデオ全体をトランスコードできます。 |
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 | いいえ | Constant Rate Factor (CRF)。 このパラメーターの値は、[0,51] の範囲内です。 値が大きいほど、品質が低いことを示します。 [18,38] の範囲内の値を指定することをお勧めします。 このパラメーターと vb パラメーターは相互に排他的です。 crf パラメーターと vb パラメーターの両方を空のままにすると、crf パラメーターはデフォルトで 23 に設定されます。 |
maxrate | int | いいえ | 動的ビットレートが使用される場合の最大ビットレート。 このパラメーターを指定する場合は、bufsize パラメーターも指定する必要があります。 説明 このパラメーターは、crf パラメーターと一緒に使用する必要があります。 |
bufsize | int | いいえ | 動的ビットレートモードのバッファーサイズ。 単位: bit/s。 説明 このパラメーターは、crf パラメーターと一緒に使用する必要があります。 |
an | int | いいえ | オーディオストリームの生成を無効にするかどうかを指定します。 有効な値:
|
acodec | 文字列 | いいえ | 音声コーディング形式。有効な値: acc。 |
ar | 整数 | いいえ | 出力オーディオのサンプリングレート。単位:Hz。デフォルトでは、ソースオーディオのサンプリングレートが保持されます。有効な値:
|
ac | 整数 | いいえ | サウンドチャンネルの数です。デフォルトでは、出力オーディオのサウンドチャンネル数はソースオーディオと同じです。有効な値: [1,8] です。 |
aq | int | いいえ | オーディオ品質。このパラメーターの値は 0 ~ 100 の範囲内です。値が大きいほど、オーディオ品質が高くなります。このパラメーターと ab パラメーターは相互排他です。 |
ab | int | いいえ | ターゲット オーディオ ビットレート。単位:bit/s。このパラメーターと aq パラメーターは相互排他です。有効な値:1000 ~ 10000000。 |
abopt | int | いいえ | 音声ビットレートオプション。有効な値:
|
プレイリストを生成するときに、sys/saveas パラメーターを使用する必要がある場合もあります。詳細については、「名前を付けて保存」をご参照ください。
RESTful API の使用
ライブトランスコードを使用するには、次の手順を実行します。
プレイリストが生成された後、IMM ドキュメントのライブトランスコード トピックの手順に従って、ビデオを再生することもできます。
1. プレイリストの生成
トランスコードタスク情報
トランスコード前
ビデオフォーマット:AVI
ビデオ名:oss://video-demo/example.avi
トランスコードの開始位置:ビデオの 15 秒目
トランスコードする期間:1,800 秒
処理方法:プレイリストを生成する。
トランスコード後
セグメント期間:10 秒
事前にトランスコードされたビデオの期間:30 秒
ビデオ情報
ビデオストリームフォーマット:H.264
ビデオ解像度:1280 × 720
フレームレート:25 fps
ビデオビットレート:2 Mbit/s
オーディオ情報
オーディオストリームフォーマット:AAC
オーディオビットレート:128 Kbit/s
パスプレフィックス: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 を使用して TS オブジェクトに署名する
OSS は、オーディオデータとビデオデータにアクセスするための動的署名メカニズムを提供します。 M3U8 プレイリストに初めてアクセスするときは、x-oss-process=hls/sign,live_1 パラメーターを M3U8 プレイリストの URL に追加する必要があります。その後、OSS は、M3U8 プレイリストの署名に使用されたのと同じ署名方法を使用して、M3U8 プレイリスト内のすべての TS オブジェクトの URL に自動的に署名します。
次のサンプルコードは、hls/sign を使用して M3U8 プレイリストに署名する方法の例を示しています。
# -*- 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' // キー
# バケットインスタンスを指定します。すべてのオブジェクト関連メソッドを呼び出すには、バケットインスタンスを使用する必要があります。
# 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 に署名します。
# デフォルトでは、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-ENDLIST次のコンテンツは、署名済みバージョンの M3U8 オブジェクトの例を示しています。
#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-ENDLISTOSS SDK の使用
プレイリストの生成は同期操作です。 OSS SDK を使用してプレイリストを生成する方法の詳細については、「OSS SDK を使用する」をご参照ください。
FAQ
プレイリスト生成操作の出力オブジェクトとは何ですか?
プレイリスト生成操作の出力オブジェクトには、M3U8 オブジェクトと TS オブジェクトが含まれます。M3U8 オブジェクトはすぐに生成されます。指定された数のプレトランスコード済み TS オブジェクトは非同期的に生成されます。プレトランスコードされていないビデオ部分は、その部分の再生がリクエストされた場合にのみ、非同期的にトランスコードされます。たとえば、ビデオが再生されなかった場合、プレトランスコードの範囲に含まれていない部分の TS オブジェクトは生成されません。プレトランスコードがビデオの 15 分目をカバーしておらず、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 オブジェクトが削除されたビデオを再生できますか?
はい。一部またはすべての TS オブジェクトが削除されていても、ビデオを再生できます。ただし、ビデオと M3U8 オブジェクトが削除されていないことを確認してください。これは、M3U8 プレイリストのリクエストによって TS オブジェクトの再生成がトリガーされるためです。このメカニズムにより、将来の再生パフォーマンスに影響を与えることなくストレージ コストを削減するために、長期間視聴されていないビデオ用に生成された TS オブジェクトを削除できます。
ライブトランスコードは、ライブトランスコードから作成されていない M3U8 プレイリストをサポートしていますか?
いいえ。ライブトランスコードは、ライブトランスコードから作成されていない M3U8 プレイリストをサポートしていません。