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

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

最終更新日:Oct 29, 2024

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

アップロードのプロセス

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

  1. このトピックの前提条件セクションで説明しているように、設定を完了します。

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

  3. アップロードロジックを実装するためのアップロード情報を設定します。

  4. 中国 (上海) 以外のリージョンにメディアファイルをアップロードする場合は、AliyunVodUploader.pyApiRegionを指定します。 デフォルトでは、アップロードSDK for Pythonはメディアファイルを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操作に対する権限があります。 RAMユーザーのAccessKeyペアを使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりすることを推奨します。

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

  • オプションです。 RAMユーザー用にロールが作成され、Security Token Service (STS) を使用してApsaraVideo VODにアクセスする場合は、ApsaraVideo VODにアクセスするために必要な権限がロールに付与されます。 詳細については、「STSを使用した動画のアップロード」をご参照ください。

    説明

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

Python用のアップロードSDKの統合

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

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

  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 -- アップグレードoss2

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

    説明

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

ディレクトリ

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テラバイトのファイルをアップロードできます。 再開可能なアップロードはサポートされていません。 詳細については、サンプルコードのtestUploadLocalVideo関数を参照してください。

  • ファイルのURLを使用してオンラインファイルをアップロードします。 最大48.8テラバイトのファイルをアップロードできます。 オンラインファイルをアップロードする前に、ファイルをローカルディスクにダウンロードする必要があります。 ローカルディスクに十分な容量があることを確認してください。 詳細については、サンプルコードのtestUploadWebVideo関数を参照してください。

サンプルコードを表示する

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest 

# Test the upload of a local audio or video file.
def testUploadLocalVideo(accessKeyId, accessKeySecret, filePath, storageLocation=None):
    try:
        # Specify the region of the Elastic Compute Service (ECS) instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the local file is automatically uploaded over the internal network. This accelerates uploads and reduces Internet traffic. 
        # ecsRegionId ="cn-shanghai"
        # uploader = AliyunVodUploader(accessKeyId, accessKeySecret, ecsRegionId)
        # Do not specify the ECS region where the upload script is deployed. 
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(filePath, 'exampleTitle')
        # Specify the video thumbnail. If the video thumbnail is a local or an online image, you can call the UploadImageRequest operation to upload the image to ApsaraVideo VOD and obtain the value of the ImageURL parameter.
        # Sample value of the ImageURL parameter: https://example.com/sample-****.jpg.
        #uploadVideoRequest.setCoverURL('<your Image URL>')  
        # Configure tags.
        #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)
 
# Test the upload of an online audio or video file.
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)

####   Run the test code.   ####   
# The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
# We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
# In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and 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)

# Sample value of the fileUrl parameter: example: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

# Test the upload of a local M3U8 video file.
def testUploadLocalM3u8(accessKeyId, accessKeySecret, m3u8LocalFile):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8LocalFile, 'exampleTitle')
        # uploadVideoRequest.setTemplateGroupId('<TemplateGroupId>')
        # If the M3U8 file and file parts are stored in the same directory, the upload SDK automatically parses and uploads the M3U8 file.
        videoId = uploader.uploadLocalM3u8(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))

    except AliyunVodException as e:
        print(e)

# Test the upload of an online M3U8 video.
def testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8FileUrl, 'exampleTitle')
        # If the URLs of part files use the same signature as that of the M3U8 file or no signature is available, ApsaraVideo VOD automatically parses the URLs of file parts. In other scenarios, you need to manually parse the URLs of part files.
        sliceFileUrls = uploader.parseWebM3u8(m3u8FileUrl)
        videoId = uploader.uploadWebM3u8(uploadVideoRequest, sliceFileUrls)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))

    except AliyunVodException as e:
        print(e)

####   Run the test code.   ####
# The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
# We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
# In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and 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)
            

シナリオ2: 画像のアップロード

サンプルコードを表示する

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadImageRequest import UploadImageRequest

# Test the upload of a local image.
def testUploadLocalImage(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(filePath)
        uploadImageRequest.setTitle('exampleTitle')  # Specify the image title. By default, this parameter is left empty.
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, True)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))

    except AliyunVodException as e:
        print(e)

# Test the upload of an online image.
def testUploadWebImage(accessKeyId, accessKeySecret, fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(fileUrl)
        uploadImageRequest.setTitle('exampleTitle')  # Specify the image title. By default, this parameter is left empty.
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, False)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))

    except AliyunVodException as e:
        print(e)


####   Run the test code.   ####
# The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
# We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
# In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and 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


# Test the upload of a local auxiliary media asset such as a watermark or subtitle file.
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)


# Test the upload of an online auxiliary media asset such as a watermark or subtitle file.
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)


####   Run the test code.   ####
# The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
# We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
# In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and 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)
            

よくある質問

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

関連ドキュメント

概要

概要