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

ApsaraVideo VOD:Python アップロード SDK を使用してファイルをアップロードする

最終更新日:Mar 15, 2025

このトピックでは、Python アップロード SDK を使用してメディアファイルを ApsaraVideo VOD にアップロードする方法について説明します。

アップロードプロセス

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

  1. このトピックの前提条件セクションの説明に従って構成を完了します。

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

  3. アップロードロジックを実装するためにアップロード情報を構成します。

  4. 中国 (上海) リージョン以外にメディアファイルをアップロードする場合、AliyunVodUploader.pyApiRegion を指定します。 デフォルトでは、Python アップロード SDK はメディアファイルを cn-shanghai にアップロードします。 サポートされているエンドポイントの詳細については、「エンドポイント」をご参照ください。

    次のサンプルコードは、中国 (北京) リージョンを指定する方法の例を示しています。

    self.setApiRegion('cn-beijing')

前提条件

  • ApsaraVideo VOD がアクティブ化されていること。 詳細については、「ApsaraVideo VOD をアクティブ化する」をご参照ください。

  • 指定されたリージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。 詳細については、「ストレージバケットを管理する」および「コールバックを構成する」をご参照ください。

  • RAM ユーザーが作成され、ApsaraVideo VOD へのアクセスに使用されていること。 Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、ApsaraVideo VOD へのアクセスに必要な権限を RAM ユーザーに付与することをお勧めします。 その後、RAM ユーザーの AccessKey ペア を使用して ApsaraVideo VOD にアクセスできます。 詳細については、「RAM ユーザーを作成し、権限を付与する」をご参照ください。

  • ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。詳細については、「Linux、macOS、および Windows で環境変数を設定する」をご参照ください。

    重要
    • Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーの AccessKey ペアを使用することをお勧めします。

    • AccessKey ID と AccessKey シークレットをプロジェクトコードにハードコードしないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。

  • オプション。 セキュリティトークンサービス (STS) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザーのロールが作成され、そのロールに ApsaraVideo VOD へのアクセスに必要な権限が付与されます。 詳細については、「STS を使用してビデオをアップロードする」をご参照ください。

    説明

    STS を使用できるシナリオの詳細については、「資格情報と STS の比較」をご参照ください。

Python アップロード SDK を統合する

説明
  • Python アップロード SDK のディレクトリの詳細については、「ディレクトリ」をご参照ください。

  • 次のセクションでは、ルートユーザー以外として Python アップロード SDK を統合する方法について説明します。

  1. 依存関係をインストールするには、次のコマンドを実行します。

    sudo pip install aliyun-python-sdk-core

    sudo pip install aliyun-python-sdk-vod

    sudo pip install oss2

    説明

    Python 3.x を使用している場合は、sudo pip install aliyun-python-sdk-coresudo pip install aliyun-python-sdk-core-v3 に置き換えます。 複数のバージョンの Python をインストールしている場合は、pip3 コマンドを実行できます。 SDK の統合時にエラーが発生した場合は、「FAQ」に記載されている手順に従ってエラーをトラブルシューティングしてください。

  2. Python アップロード SDK とサンプルコードを含む VodUploadSDK-Python_1.3.*.zip パッケージをダウンロードします。 詳細については、「アップロード SDK」をご参照ください。

    説明

    このトピックでは、SDK V1.3.1 を例として使用しています。 ビジネス要件に基づいて他のバージョンを使用できます。

  3. VodUploadSDK-Python_1.3.*.zip パッケージを解凍し、voduploadsdkVodUploadSDK-Python_1.3.* ディレクトリからローカルプロジェクトのディレクトリまたは site-packages ディレクトリにコピーします。 voduploadsdk をローカルプロジェクトのディレクトリにコピーすることをお勧めします。

Python アップロード SDK を更新する

新しい操作または既存の操作の新しい機能が現在の SDK で使用できない場合は、SDK を最新バージョンに更新します。

  1. 依存関係をインストールするには、次のコマンドを実行します。

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

    sudo pip install --upgrade oss2

  2. Python アップロード SDK の最新バージョンをダウンロードして、既存の SDK を上書きします。 詳細については、「SDK の概要とダウンロード」をご参照ください。

    説明

    現在の SDK のバージョン番号とリリース日は、ChangeLog.txt ファイル (voduploadsdk ディレクトリ内) の最初の行で確認できます。

ディレクトリ

voduploadsdk

  • AliyunVodUtils.py

    ディレクトリ

    説明

    AliyunVodLog

    アップロード SDK のログクラス。 このクラスはロギングに基づいて実装されています。

    AliyunVodUtils

    アップロード SDK のユーティリティクラス。

    AliyunVodException

    アップロード SDK の例外クラス。 統一された例外処理がサポートされています。 外部呼び出しの場合は、AliyunVodException 例外のみを検出する必要があります。

  • UploadVideoRequest.py

    ディレクトリ

    説明

    UploadVideoRequest

    ビデオアップロードのリクエストクラス。 パラメータの詳細については、「CreateUploadVideo」をご参照ください。

  • UploadImageRequest.py

    ディレクトリ

    説明

    UploadImageRequest

    画像アップロードのリクエストクラス。 パラメータの詳細については、「CreateUploadImage」をご参照ください。

  • UploadAttachedMediaRequest.py

    ディレクトリ

    説明

    UploadAttachedMediaRequest

    補助メディアアセットのアップロードのリクエストクラス。 パラメータの詳細については、「CreateUploadAttachedMedia」をご参照ください。

  • AliyunVodUploader.py

    ディレクトリ

    説明

    uploadLocalVideo

    ローカルビデオのアップロードに使用される API 操作。

    uploadWebVideo

    オンラインビデオのアップロードに使用される API 操作。

    uploadLocalM3u8

    ローカル M3U8 ビデオのアップロードに使用される API 操作。

    uploadWebM3u8

    オンライン M3U8 ビデオのアップロードに使用される API 操作。

    uploadImage

    ローカルまたはオンライン画像のアップロードに使用される API 操作。

    uploadAttachedMedia

    ローカルまたはオンラインの補助メディアアセットのアップロードに使用される API 操作。

    parseWebM3u8

    オンライン M3U8 ビデオのファイルパートに関する情報を解析するために使用される API 操作。

    parseLocalM3u8

    ローカル M3U8 ビデオのファイルパートに関する情報を解析するために使用される API 操作。

    setApiRegion

    ApsaraVideo VOD のアクセスリージョンを指定するために使用される API 操作。 デフォルト値: cn-shanghai 。 中国本土以外のリージョン (シンガポールの場合は ap-southeast-1 など) を指定できます。 詳細については、「ApsaraVideo VOD のリージョン ID」をご参照ください。

    setMultipartUpload

    マルチパートアップロードのしきい値とパートサイズを設定するために使用される API 操作。

    uploadProgressCallback

    アップロードの進捗状況のコールバックを設定するために使用される API 操作。 この結果はオーバーライドできます。

    setEnableCrc

    アップロード中に巡回冗長検査 (CRC) を有効にするかどうかを指定するために使用される API 操作。 デフォルトでは、CRC は有効になっています。

  • ChangeLog.txt: バージョン履歴。 SDK のバージョン番号とリリース日は最初の行で確認できます。

samples ディレクトリ

  • uploadVideo.py: ビデオアップロードのサンプルコード。

  • uploadImage.py: 画像アップロードのサンプルコード。

  • uploadAttachedMedia.py: 補助メディアアセットのアップロードのサンプルコード。

シナリオ 1:オーディオファイルとビデオファイルをアップロードする

標準のオーディオおよびビデオ ファイル

ApsaraVideo VOD では、次のいずれかの方法でオーディオファイルまたはビデオファイルをアップロードできます。

  • マルチパートアップロードを使用してローカルファイルをアップロードします。 最大 48.8 TB のサイズのファイルをアップロードできます。 再開可能なアップロードはサポートされていません。 詳細については、サンプルコードの testUploadLocalVideo 関数を参照してください。

  • ファイル URL を使用してオンラインファイルをアップロードします。 最大 48.8 TB のサイズのファイルをアップロードできます。 オンラインファイルをアップロードする前に、ファイルをローカルディスクにダウンロードする必要があります。 ローカルディスクに十分な空き容量があることを確認してください。 詳細については、サンプルコードの 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:
        # アップロードスクリプトがデプロイされている Elastic Compute Service (ECS) インスタンスのリージョンを指定します。 ECS リージョンが ApsaraVideo VOD のストレージリージョンと同じである場合、ローカルファイルは内部ネットワーク経由で自動的にアップロードされます。 これにより、アップロードが高速化され、インターネットトラフィックが削減されます。
        # ecsRegionId ="cn-shanghai"
        # uploader = AliyunVodUploader(accessKeyId, accessKeySecret, ecsRegionId)
        # アップロードスクリプトがデプロイされている ECS リージョンを指定しないでください。
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(filePath, 'exampleTitle')
        # ビデオサムネイルを指定します。 ビデオサムネイルがローカル画像またはオンライン画像の場合、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)


# オンラインのオーディオファイルまたはビデオファイルのアップロードをテストします。
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 アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを使用することをお勧めします。
# AccessKey ペア (AccessKey ID と AccessKey シークレット) をプロジェクトコードに含めないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
# この例では、ApsaraVideo VOD は環境変数から AccessKey ペアを読み取り、API アクセスの ID 検証を実装します。 サンプルコードを実行する前に、環境変数 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 は M3U8 ファイルを自動的に解析してアップロードします。
        videoId = uploader.uploadLocalM3u8(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))

    except AliyunVodException as e:
        print(e)

# オンライン M3U8 ビデオのアップロードをテストします。
def testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8FileUrl, 'exampleTitle')
        # パートファイルの URL が M3U8 ファイルと同じ署名を使用している場合、または署名がない場合、ApsaraVideo VOD はファイルパートの URL を自動的に解析します。 他のシナリオでは、ファイルパートの URL を手動で解析する必要があります。
        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 アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを使用することをお勧めします。
# AccessKey ペア (AccessKey ID と AccessKey シークレット) をプロジェクトコードに含めないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
# この例では、ApsaraVideo VOD は環境変数から AccessKey ペアを読み取り、API アクセスの ID 検証を実装します。 サンプルコードを実行する前に、環境変数 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)
            

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

ギガバイトまたはテラバイト単位の大容量ファイルをアップロードする場合、またはリージョンをまたいで (たとえば、中国本土から シンガポール リージョンのストレージアドレスに) ビデオをアップロードする場合は、アップロードアクセラレーション機能を有効にできます。 詳細については、「アップロードアクセラレーションを有効にする」をご参照ください。 アップロードアクセラレーションを有効にした後、対応する キーと値 のペア 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)

# オンライン画像のアップロードをテストします。
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 アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを使用することをお勧めします。
# AccessKey ペア (AccessKey ID と AccessKey シークレット) をプロジェクトコードに含めないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
# この例では、ApsaraVideo VOD は環境変数から AccessKey ペアを読み取り、API アクセスの ID 検証を実装します。 サンプルコードを実行する前に、環境変数 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)


# ウォーターマークや字幕ファイルなどのオンラインの補助メディアアセットのアップロードをテストします。
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 アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを使用することをお勧めします。
# AccessKey ペア (AccessKey ID と AccessKey シークレット) をプロジェクトコードに含めないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
# この例では、ApsaraVideo VOD は環境変数から AccessKey ペアを読み取り、API アクセスの ID 検証を実装します。 サンプルコードを実行する前に、環境変数 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)
            

FAQ

オンラインビデオストリームをアップロードするためにサンプルコードを使用するときに ERROR:root:Download fail: [Errno 2] No such file or directory エラーメッセージが返される場合は、dlfiles フォルダを voduploadsdk と同じレベルのディレクトリに作成することでエラーを修正できます。错误

参照資料

メディアのアップロード

STS SDK の概要