すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:Python SDK を使用したファイルのアップロード

最終更新日:Jun 22, 2026

このトピックでは、Python 向けのサーバー側アップロード SDK を使用して、さまざまなメディアファイルを ApsaraVideo VOD にアップロードする方法について、詳細な例を挙げて説明します。

概要

Python アップロード SDK は、ApsaraVideo VOD サーバー側 SDK の一般的なプロセスに従います。 詳細については、「アップロードプロセス」をご参照ください。 Python アップロード SDK を使用する基本的なプロセスは次のとおりです。

  1. 前提条件を満たします。 詳細については、「前提条件」をご参照ください。

  2. Python アップロード SDK を統合します。 詳細については、「Python アップロード SDK の統合」をご参照ください。

  3. アップロードロジックを実装します。 このステップでは、アップロード情報を設定します。

  4. Python アップロード SDK のデフォルトのエンドポイントは cn-shanghai (上海) です。 他のリージョンにメディアファイルをアップロードするには、AliyunVodUploader.pyApiRegion を使用してリージョンを指定できます。 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 ディレクトリの詳細な説明については、「ディレクトリ構造」をご参照ください。

  • このトピックでは、一般ユーザーを例に操作を説明します。

  1. 次のコマンドを実行して、依存パッケージをインストールします。

    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-coresudo pip install aliyun-python-sdk-core-v3 に変更してください。 複数の Python バージョンがインストールされている場合は、`pip3` コマンドを使用できます。 統合に関する問題が発生した場合は、「よくある質問」を参照して問題をトラブルシューティングしてください。

  2. Python アップロード SDK とサンプルコードをダウンロードします。

  3. VodUploadSDK-Python_1.3.*.zip を解凍し、VodUploadSDK-Python_1.3.* ディレクトリから voduploadsdk フォルダをローカルプロジェクトディレクトリ (推奨) または site-packages ディレクトリにコピーします。

Python アップロード SDK の更新

現在の SDK で新しい API や既存 API の新機能が利用できない場合は、SDK を最新バージョンに更新してください。

  1. 次のコマンドを実行して、依存パッケージを更新します。

    sudo pip install --upgrade aliyun-python-sdk-vod

    sudo pip install --upgrade oss2

  2. 最新の 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` 関数をご参照ください。

クリックしてサンプルコードを表示

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest 
# ローカルの音声または動画ファイルをアップロードするテスト
def testUploadLocalVideo(accessKeyId, accessKeySecret, filePath, storageLocation=None):
    try:
        # アップロードスクリプトがデプロイされているリージョンを指定できます。 ECS リージョンが ApsaraVideo VOD のストレージリージョンと同じ場合、アップロードは自動的に内部ネットワーク経由で実行されます。 これにより、速度が向上し、インターネットトラフィックが節約されます。
        # ecsRegionId ="cn-shanghai"
        # uploader = AliyunVodUploader(accessKeyId, accessKeySecret, ecsRegionId)
        # アップロードスクリプトがデプロイされている ECS リージョンを指定しません。
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(filePath, 'exampleTitle')
        # 動画のサムネイルを設定できます。 ローカルまたは Web 画像の場合は、UploadImageRequest を使用して画像を ApsaraVideo VOD にアップロードし、ImageURL を取得できます。
        # ImageURL の例: https://example.com/sample-****.jpg
        #uploadVideoRequest.setCoverURL('<your Image URL>')  
        # タグ
        #uploadVideoRequest.setTags('tag1,tag2')
        if storageLocation:
            uploadVideoRequest.setStorageLocation(storageLocation)
        videoId = uploader.uploadLocalVideo(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
# Web の音声または動画ファイルをアップロードするテスト
def testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl, storageLocation=None):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(fileUrl, 'exampleTitle')
        uploadVideoRequest.setTags('tag1,tag2')
        if storageLocation:
            uploadVideoRequest.setStorageLocation(storageLocation)
        videoId = uploader.uploadWebVideo(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
#### テストコードの実行 ####   
# Alibaba Cloud アカウント (root ユーザー) の AccessKey は、すべての API に対する権限を持っています。 API の呼び出しや日常の O&M には、RAM ユーザーの AccessKey を使用することを推奨します。
# AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。 これにより、AccessKey が漏洩し、アカウントのすべてのリソースのセキュリティが損なわれる可能性があります。
# この例では、本人確認のために環境変数から AccessKey を読み取ります。 サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
localFilePath = '/opt/video/sample-****.mp4'
testUploadLocalVideo(accessKeyId, accessKeySecret, localFilePath)
# fileURL の例: http://video.developer.aliyundoc.com/video/sample-****.mp4
fileUrl = '<your file URL>'
#testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl)

M3U8 ファイルのアップロード

クリックしてサンプルコードを表示

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest
# ローカル M3U8 ビデオをアップロードするテスト
def testUploadLocalM3u8(accessKeyId, accessKeySecret, m3u8LocalFile):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8LocalFile, 'exampleTitle')
        # uploadVideoRequest.setTemplateGroupId('<TemplateGroupId>')
        # セグメントファイルと M3U8 ファイルは同じディレクトリにあります。 SDK は自動的にそれらを解析してアップロードします。
        videoId = uploader.uploadLocalM3u8(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
# Web M3U8 ビデオをアップロードするテスト
def testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8FileUrl, 'exampleTitle')
        # セグメントファイルの URL を解析します。 これは、セグメント URL が M3U8 ファイルと同じ署名を持つか、署名がない場合に適用されます。 その他の場合は、自分で解析する必要があります。
        sliceFileUrls = uploader.parseWebM3u8(m3u8FileUrl)
        videoId = uploader.uploadWebM3u8(uploadVideoRequest, sliceFileUrls)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
#### テストコードの実行 ####
# Alibaba Cloud アカウント (root ユーザー) の AccessKey は、すべての API に対する権限を持っています。 API の呼び出しや日常の O&M には、RAM ユーザーの AccessKey を使用することを推奨します。
# AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。 これにより、AccessKey が漏洩し、アカウントのすべてのリソースのセキュリティが損なわれる可能性があります。
# この例では、本人確認のために環境変数から AccessKey を読み取ります。 サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
m3u8LocalFile = '/opt/video/m3u8/example_01.m3u8'
#testUploadLocalM3u8(accessKeyId, accessKeySecret, m3u8LocalFile)
m3u8FileUrl = 'http://sample.oss.aliyuncs.com/video/m3u8/example****.m3u8'
#testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl)
            

アップロードアクセラレーション

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:画像のアップロード

クリックしてサンプルコードを表示

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadImageRequest import UploadImageRequest
# ローカル画像をアップロードするテスト
def testUploadLocalImage(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(filePath)
        uploadImageRequest.setTitle('exampleTitle')  # 画像のタイトルを設定します。 デフォルト値は空です。
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, True)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))
    except AliyunVodException as e:
        print(e)
# Web 画像をアップロードするテスト
def testUploadWebImage(accessKeyId, accessKeySecret, fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(fileUrl)
        uploadImageRequest.setTitle('exampleTitle')  # 画像のタイトルを設定します。 デフォルト値は空です。
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, False)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))
    except AliyunVodException as e:
        print(e)
#### テストコードの実行 ####
# Alibaba Cloud アカウント (root ユーザー) の AccessKey は、すべての API に対する権限を持っています。 API の呼び出しや日常の O&M には、RAM ユーザーの AccessKey を使用することを推奨します。
# AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。 これにより、AccessKey が漏洩し、アカウントのすべてのリソースのセキュリティが損なわれる可能性があります。
# この例では、本人確認のために環境変数から AccessKey を読み取ります。 サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
localFilePath = '/opt/image/image01.png'
#testUploadLocalImage(accessKeyId, accessKeySecret, localFilePath)
fileUrl = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif'
testUploadWebImage(accessKeyId, accessKeySecret, fileUrl)
            

シナリオ 3:補助メディアアセットのアップロード

クリックしてサンプルコードを表示

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadAttachedMediaRequest import UploadAttachedMediaRequest
# ローカルの補助メディアアセット (ウォーターマークや字幕ファイルなど) をアップロードするテスト
def testUploadLocalAttachedMedia(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(filePath, 'watermark')
        uploadAttachedRequest.setTitle('exampleTitle')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, True)
        print(media)
    except AliyunVodException as e:
        print(e)
# Web の補助メディアアセット (ウォーターマークや字幕ファイルなど) をアップロードするテスト
def testUploadWebAttachedMedia(accessKeyId, accessKeySecret, fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(fileUrl, 'watermark')
        uploadAttachedRequest.setTitle('exampletitle')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, False)
        print(media)
    except AliyunVodException as e:
        print(e)
#### テストコードの実行 ####
# Alibaba Cloud アカウント (root ユーザー) の AccessKey は、すべての API に対する権限を持っています。 API の呼び出しや日常の O&M には、RAM ユーザーの AccessKey を使用することを推奨します。
# AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。 これにより、AccessKey が漏洩し、アカウントのすべてのリソースのセキュリティが損なわれる可能性があります。
# この例では、本人確認のために環境変数から AccessKey を読み取ります。 サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
localFilePath = '/opt/image/sample.png'
#testUploadLocalAttachedMedia(accessKeyId, accessKeySecret, localFilePath)
fileUrl = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif'
testUploadWebAttachedMedia(accessKeyId, accessKeySecret, fileUrl)
            

よくある質問

サンプルコードを使用して 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