このトピックでは、Python 向けのサーバー側アップロード SDK を使用して、さまざまなメディアファイルを ApsaraVideo VOD にアップロードする方法について、詳細な例を挙げて説明します。
概要
Python アップロード SDK は、ApsaraVideo VOD サーバー側 SDK の一般的なプロセスに従います。 詳細については、「アップロードプロセス」をご参照ください。 Python アップロード SDK を使用する基本的なプロセスは次のとおりです。
-
前提条件を満たします。 詳細については、「前提条件」をご参照ください。
-
Python アップロード SDK を統合します。 詳細については、「Python アップロード SDK の統合」をご参照ください。
-
アップロードロジックを実装します。 このステップでは、アップロード情報を設定します。
-
音声と動画のアップロードについては、「シナリオ 1:音声ファイルと動画ファイルのアップロード」をご参照ください。
-
画像のアップロードについては、「シナリオ 2:画像のアップロード」をご参照ください。
-
補助メディアアセットのアップロードについては、「シナリオ 3:補助メディアアセットのアップロード」をご参照ください。
-
-
Python アップロード SDK のデフォルトのエンドポイントは
cn-shanghai(上海) です。 他のリージョンにメディアファイルをアップロードするには、AliyunVodUploader.pyのApiRegionを使用してリージョンを指定できます。 ApsaraVideo VOD がサポートするエンドポイントの詳細については、「エンドポイント」をご参照ください。次の例は、アップロードリージョンを
cn-beijing(北京) に設定する方法を示しています。self.setApiRegion('cn-beijing')
前提条件
-
ApsaraVideo VOD が有効化されていること。 詳細については、「ApsaraVideo VOD の有効化」をご参照ください。
-
指定されたリージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。 詳細については、「ストレージバケットの管理」および「コールバックの設定」をご参照ください。
-
ApsaraVideo VOD へのアクセスに Resource Access Management (RAM) ユーザーが作成され、使用されていること。 Alibaba Cloud アカウント (root ユーザー) の AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、その RAM ユーザーに ApsaraVideo VOD へのアクセスに必要な権限を付与することを推奨します。 その後、RAM ユーザーの AccessKey ペア を使用して ApsaraVideo VOD にアクセスできます。 詳細については、「RAM ユーザーの作成と権限の付与」をご参照ください。
-
ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。 詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
重要-
Alibaba Cloud アカウント (root ユーザー) の AccessKey ペアは、すべての API オペレーションに対する権限を持っています。 API オペレーションの呼び出しや日常の O&M には、RAM ユーザーの AccessKey ペアを使用してください。
-
AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。 漏洩した場合、アカウント内のすべてのリソースが危険にさらされます。
-
-
任意。 Security Token Service (STS) を使用して ApsaraVideo VOD にアクセスする場合は、RAM ユーザー用のロールを作成し、そのロールに ApsaraVideo VOD へのアクセスに必要な権限を付与します。 詳細については、「STS トークンの取得」をご参照ください。
Python アップロード SDK の統合
-
アップロード SDK ディレクトリの詳細な説明については、「ディレクトリ構造」をご参照ください。
-
このトピックでは、一般ユーザーを例に操作を説明します。
-
次のコマンドを実行して、依存パッケージをインストールします。
sudo pip install aliyun-python-sdk-core
sudo pip install aliyun-python-sdk-vod
sudo pip install oss2
説明Python 3 を使用する場合は、sudo pip install aliyun-python-sdk-core を sudo pip install aliyun-python-sdk-core-v3 に変更してください。 複数の Python バージョンがインストールされている場合は、`pip3` コマンドを使用できます。 統合に関する問題が発生した場合は、「よくある質問」を参照して問題をトラブルシューティングしてください。
-
Python アップロード SDK とサンプルコードをダウンロードします。
-
SDK バージョン:1.3.2.2
-
更新日時:2022-02-24
-
ダウンロードアドレス:V1.3.2.2 SDK およびデモソースコード
-
-
VodUploadSDK-Python_1.3.*.zip を解凍し、VodUploadSDK-Python_1.3.* ディレクトリから voduploadsdk フォルダをローカルプロジェクトディレクトリ (推奨) または site-packages ディレクトリにコピーします。
Python アップロード SDK の更新
現在の SDK で新しい API や既存 API の新機能が利用できない場合は、SDK を最新バージョンに更新してください。
-
次のコマンドを実行して、依存パッケージを更新します。
sudo pip install --upgrade aliyun-python-sdk-vod
sudo pip install --upgrade oss2
-
最新の Python アップロード SDK をダウンロードし、ローカルの SDK ファイルを上書きします。 詳細については、「SDK のダウンロード」をご参照ください。
説明voduploadsdk ディレクトリにある ChangeLog.txt ファイルを開くと、現在の SDK バージョン番号とリリース日を確認できます。
Python アップロード SDK のディレクトリ構造
voduploadsdk ディレクトリ
-
AliyunVodUtils.py
ディレクトリ
説明
AliyunVodLog
アップロード SDK のログクラスです。 logging に基づいて実装されています。
AliyunVodUtils
アップロード SDK のユーティリティクラスです。
AliyunVodException
アップロード SDK の例外クラスです。 統一された例外処理を提供します。 この例外は外部でキャッチできます。
-
UploadVideoRequest.py
ディレクトリ
説明
UploadVideoRequest
ビデオをアップロードするためのリクエストクラスです。 フィールドの詳細については、「CreateUploadVideo」をご参照ください。
-
UploadImageRequest.py
ディレクトリ
説明
UploadImageRequest
画像をアップロードするためのリクエストクラスです。 フィールドの詳細については、「CreateUploadImage」をご参照ください。
-
UploadAttachedMediaRequest.py
ディレクトリ
説明
UploadAttachedMediaRequest
補助メディアアセットをアップロードするためのリクエストクラスです。 フィールドの詳細については、「CreateUploadAttachedMedia」をご参照ください。
-
AliyunVodUploader.py
ディレクトリ
説明
uploadLocalVideo
ローカルビデオをアップロードするための API です。
uploadWebVideo
Web ビデオをアップロードするための API です。
uploadLocalM3u8
ローカル M3U8 ビデオをアップロードします。
uploadWebM3u8
Web M3U8 ビデオをアップロードします。
uploadImage
ローカルまたは Web の画像ファイルをアップロードします。
uploadAttachedMedia
ローカルまたは Web の補助メディアアセットファイルをアップロードします。
parseWebM3u8
Web M3U8 ファイルのシャード情報を解析します。
parseLocalM3u8
ローカル M3U8 ファイルのシャード情報を解析します。
setApiRegion
VOD のエンドポイントを設定します。 デフォルト値は cn-shanghai (上海) です。 ap-southeast-1 (シンガポール) など、中国以外のリージョンもサポートされています。 詳細については、「VOD リージョン ID」をご参照ください。
setMultipartUpload
マルチパートアップロードのしきい値とパートサイズを設定します。
uploadProgressCallback
アップロードの進捗状況に関するコールバック関数です。 この関数は書き換えることができます。
setEnableCrc
アップロード中に巡回冗長検査 (CRC) を有効にするかどうかを指定します。 デフォルトで有効になっています。
-
ChangeLog.txt:リリース履歴が含まれています。 最初の行は、現在の SDK のバージョン番号とリリース日を示します。
samples ディレクトリ
-
uploadVideo.py:ビデオをアップロードするためのサンプルコード。
-
uploadImage.py:画像をアップロードするためのサンプルコード。
-
uploadAttachedMedia.py:補助メディアアセットファイルをアップロードするためのサンプルコード。
シナリオ 1:音声ファイルと動画ファイルのアップロード
通常ファイルのアップロード
次の種類の音声ファイルと動画ファイルをアップロードできます。
-
ローカルファイル:マルチパートアップロードが使用されます。 単一ファイルの最大サイズは 48.8 TB です。 レジュームアップロードはサポートされていません。 詳細については、サンプルコードの `testUploadLocalVideo` 関数をご参照ください。
-
Web ファイル:アップロードするファイルの URL を指定できます。 単一ファイルの最大サイズは 48.8 TB です。 この方法では、アップロードする前に Web ファイルをローカルディスクにダウンロードする必要があります。 ローカルディスクに十分な空き容量があることを確認してください。 詳細については、サンプルコードの `testUploadWebVideo` 関数をご参照ください。
M3U8 ファイルのアップロード
アップロードアクセラレーション
GB または TB レベルの大容量ファイルをアップロードする場合や、中国本土からシンガポールのストレージリージョンにあるストレージの場所に動画をアップロードするなど、クロスリージョンアップロードを実行する場合は、アップロードアクセラレーション機能を有効にできます。 詳細については、「アップロードアクセラレーションの有効化」をご参照ください。 この機能を有効にした後、アップロード設定の UserData オブジェクトに AccelerateConfig キーと値のペアを追加する必要があります。 `UserData` オブジェクトが存在しない場合は、作成する必要があります。 次に例を示します。
uploadVideoRequest.setUserData("{\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
パラメーターの説明
|
名前 |
タイプ |
説明 |
|
Type |
string |
有効にするアップロードアクセラレーションのタイプ。 `oss` のみがサポートされています。 |
|
Domain |
string |
バケットの高速化ドメイン名。 デフォルトのプロトコルは HTTPS です。 説明
有効化後に割り当てられた高速化ドメイン名を使用します。例:`vod-*******.oss-accelerate.aliyuncs.com`。 |
シナリオ 2:画像のアップロード
シナリオ 3:補助メディアアセットのアップロード
よくある質問
サンプルコードを使用して Web ビデオストリームをアップロードする際に、ERROR:root:Download fail: [Errno 2] No such file or directory エラーが報告された場合は、voduploadsdk フォルダと同じディレクトリに dlfiles フォルダを手動で作成することで問題を解決できます。
/Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/venv/bin/python /Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/uploadVideo.py
[2022-02-16 20:54:59]Download https://img.a... To /Users/fulin/Documents/Code/PythonProject/
/Users/fulin... : InsecureRequestWarning: Unverifi...
warnings.warn(...)
[2022-02-16 20:54:59]Download fail: [Errno 2] No such file or directory: '/Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/dlfiles/115...
Type: FileDownloadError, Code: Download File Error, Message: , HTTPStatus: NULL, RequestId: NULL
ERROR:root:Download fail: [Errno 2] No such file or directory: '/Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/dlfiles/115310cd4d...
Process finished with exit code 0