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

アップロードのプロセス

Python用サーバーアップロードSDKで使用される内部アップロードロジックは、サーバーアップロードSDKの一般的なアップロードプロセスと同じです。 詳細については、t1959334.html#section_xp5_uw7_di1トピックの「アップロードプロセス」セクションを参照してください。 次のコンテンツでは、Python用サーバーアップロードSDKを使用する基本的なプロセスについて説明します。

  1. 前提条件を完了します。 詳細については、「前提条件」セクションをご参照ください。
  2. Python用のアップロードSDKを統合します。 詳細については、Python用のアップロードSDKの統合のセクションをご参照ください。
  3. アップロードロジックを実装します。 これにはアップロード情報の設定が含まれます。

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

Python用アップロードSDKのディレクトリの詳細については、「Python用アップロードSDKのディレクトリ」をご参照ください。
  1. 次のコマンドを実行して依存関係をインストールします。

    pip install aliyun-python-sdk-core

    pip install aliyun-python-sdk-vod

    pip install oss2

    Python 3.xを使用している場合は、pip install aliyun-python-sdk-corepip install aliyun-python-sdk-core-v3に置き換えます。 複数のバージョンのPythonをインストールしている場合は、pip3コマンドを実行できます。 SDKの統合時にエラーが発生した場合は、トラブルシューティングについてこのトピックのよくある質問のセクションを参照してください。
  2. Python用のアップロードSDKとサンプルコードを含むVodUploadSDK-Python_1.3.1.zipパッケージをダウンロードします。 詳細については、「SDKダウンロード」をご参照ください。
    この例では、SDK V1.3.1が使用されています。 ビジネス要件に基づいて他のバージョンを使用できます。
  3. VodUploadSDK-Python_1.3.1.zipパッケージを解凍し、voduploadsdkディレクトリをVodUploadSDK-Python_1.3.1ディレクトリからローカルプロジェクトにコピーします。 この方法を使用することを推奨します。 または、voduploadsdkディレクトリをsite-packagesディレクトリにコピーすることもできます。

Python用のアップロードSDKの更新

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

  1. 次のコマンドを実行して依存関係を更新します。

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

    pip install -- アップグレードoss2

  2. 最新バージョンのアップロードSDK for Pythonをダウンロードして、現在のSDKを上書きします。 詳細については、「SDKダウンロード」をご参照ください。
    voduploadsdkディレクトリのChangeLog.txtファイルの最初の行で、現在のSDKのバージョン番号とリリース日を確認できます。

オーディオおよびビデオファイルのアップロード

通常のオーディオおよびビデオファイル
Python用のアップロードSDKは、次の種類のオーディオおよびビデオファイルをサポートしています。
  • ローカルファイル。 マルチパートアップロードが使用されます。 アップロードする1つのファイルのサイズは最大48.8テラバイトです。 再開可能なアップロードはサポートされていません。 詳細については、次のサンプルコードのtestUploadLocalVideo関数を参照してください。
  • オンラインファイル。 アップロードURLを指定してオンラインファイルをアップロードできます。 アップロードする1つのファイルのサイズは最大48.8テラバイトです。 オンラインファイルをアップロードする前に、ファイルをローカルディスクにダウンロードする必要があります。 ローカルディスクに十分な容量があることを確認してください。 詳細については、次のサンプルコードのtestUploadWebVideo関数を参照してください。
サンプルコード
# -*-コーディング: UTF-8 -*-
voduploadsdk.AliyunVodUtilsのインポートから *
voduploadsdk.AliyunVodUploaderからAliyunVodUploaderをインポート
からvoduploadsdk.UploadVideoRequestインポートUploadVideoRequest

# ローカルのオーディオまたはビデオファイルのアップロードをテストします。
def testUploadLocalVideo(accessKeyId、accessKeySecret、filePath、storageLocation=なし):
    try:
        # アップロードスクリプトをデプロイするECS (Elastic Compute Service) インスタンスのリージョンを指定します。 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('<あなたのイメージのURL>')  
        # タグを設定します。
        # uploadVideoRequest.setTags('tag1,tag2')
        storageLocationの場合:
            uploadVideoRequest.setStorageLocation(storageLocation)
        videoId = uploader.uploadLocalVideo(uploadVideoRequest)
        print("file: % s, videoId: % s" % (uploadVideoRequest.filePath, videoId))
        
    AliyunVodExceptionをeとして除く:
        プリント (e)
 
# オンラインのオーディオまたはビデオファイルのアップロードをテストします。
def testUploadWebVideo(accessKeyId、accessKeySecret、fileUrl、storageLocation=なし):
    try:
        uploader = AliyunVodUploader(accessKeyId、accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(fileUrl, 'exampleTitle')
        uploadVideoRequest.setTags('tag1,tag2')
        storageLocationの場合:
            uploadVideoRequest.setStorageLocation(storageLocation)
        videoId = uploader.uploadWebVideo(uploadVideoRequest)
        print("file: % s, videoId: % s" % (uploadVideoRequest.filePath, videoId))
        
    AliyunVodExceptionをeとして除く:
        プリント (e)

#### テストコードを実行します。   ####
accessKeyId = '<AccessKeyId>'
accessKeySecret = '<AccessKeySecret>'

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ファイル
サンプルコード
# -*-コーディング: UTF-8 -*-
voduploadsdk.AliyunVodUtilsのインポートから *
voduploadsdk.AliyunVodUploaderからAliyunVodUploaderをインポート
からvoduploadsdk.UploadVideoRequestインポート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))

    AliyunVodExceptionをeとして除く:
        プリント (e)

# オンラインM3U8ビデオのアップロードをテストします。
def testUploadWebM3u8(accessKeyId、accessKeySecret、m3u8FileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId、accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8FileUrl、'exampleTitle')
        # ApsaraVideo VODは、URLがM3U8ファイルと同じ署名を使用している場合、または署名がない場合、ファイルパーツのURLを自動的に解析します。 他のシナリオでは、部品ファイルのURLを手動で解析する必要があります。
        sliceFileUrls = uploader.parseWebM3u8(m3u8FileUrl)
        videoId = uploader.uploadWebM3u8(uploadVideoRequest, sliceFileUrls)
        print("file: % s, videoId: % s" % (uploadVideoRequest.filePath, videoId))

    AliyunVodExceptionをeとして除く:
        プリント (e)

#### テストコードを実行します。   ####
accessKeyId = '<AccessKeyId>'
accessKeySecret = '<AccessKeySecret>'

m3u8LocalFile = '/opt/video/m3u8/example_01.m3u8'
# testUploadLocalM3u8(accessKeyId、accessKeySecret、m3u8LocalFile)

m3u8FileUrl = 'http:// sample.oss.aliyuncs.com/video/m3u8/example_01.m3u8'
# testUploadWebM3u8(accessKeyId、accessKeySecret、m3u8FileUrl)
            

画像のアップロード

サンプルコード
# -*-コーディング: UTF-8 -*-
voduploadsdk.AliyunVodUtilsのインポートから *
voduploadsdk.AliyunVodUploaderからAliyunVodUploaderをインポート
からvoduploadsdk.UploadImageRequestのインポート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))

    AliyunVodExceptionをeとして除く:
        プリント (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))

    AliyunVodExceptionをeとして除く:
        プリント (e)


#### テストコードを実行します。   ####
accessKeyId = '<AccessKeyId>'
accessKeySecret = '<AccessKeySecret>'

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)
            

補助メディア資産のアップロード

サンプルコード
# -*-コーディング: UTF-8 -*-
voduploadsdk.AliyunVodUtilsのインポートから *
voduploadsdk.AliyunVodUploaderからAliyunVodUploaderをインポート
からvoduploadsdk.UploadAttachedMediaRequestのインポートUploadAttachedMediaRequest


# 透かしや字幕などのローカル補助メディア資産のアップロードをテストします。
def testUploadLocalAttachedMedia(accessKeyId、accessKeySecret、filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId、accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(filePath, 'watermark')
        uploadAttachedRequest.setTitle('exampleTitle')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, True)
        print (メディア)

    AliyunVodExceptionをeとして除く:
        プリント (e)


# 透かしや字幕などのオンライン補助メディアアセットのアップロードをテストします。
def testUploadWebAttachedMedia(accessKeyId、accessKeySecret、fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId、accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(fileUrl, 'watermark')
        uploadAttachedRequest.setTitle('exampletitle')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, False)
        print (メディア)

    AliyunVodExceptionをeとして除く:
        プリント (e)


#### テストコードを実行します。   ####
accessKeyId = '<AccessKeyId>'
accessKeySecret = '<AccessKeySecret>'

localFilePath = '/opt/image/sample.png'
# testUploadLocalAttachedMedia(accessKeyId、accessKeySecret、localFilePath)

fileUrl = 'http:// vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F386E0B.gif'
testUploadWebAttachedMedia(accessKeyId、accessKeySecret、fileUrl)
            

よくある質問

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

Python用アップロードSDKのディレクトリ

voduploadsdkディレクトリ
  • AliyunVodUtils.py
    ディレクトリ 説明
    AliyunVodLog ログに基づいて実装されるアップロードSDKのログクラス。
    AliyunVodUtils アップロードSDKのユーティリティクラス。
    AliyunVodException アップロードSDKの例外クラス。 統一された例外処理がサポートされます。 外部呼び出しのAliyunVodException例外のみを検出する必要があります。
  • UploadVideoRequest.py
    ディレクトリ 説明
    UploadVideoRequest ビデオをアップロードするためのリクエストクラス。 パラメーターの詳細については、「CreateUploadVideo」をご参照ください。
  • UploadImageRequest.py
    ディレクトリ 説明
    UploadImageRequest 画像をアップロードするためのリクエストクラス。 パラメーターの詳細については、「t1235495.html#doc_api_vod_CreateUploadImage」をご参照ください。
  • UploadAttachedMediaRequest.py
    ディレクトリ 説明
    UploadAttachedMediaRequest 補助メディアアセットをアップロードするためのリクエストクラス。 パラメーターの詳細については、「CreateUploadAttachedMedia」をご参照ください。
  • AliyunVodUploader.py
    ディレクトリ 説明
    uploadLocalVideo ローカルビデオのアップロードに使用される方法。
    uploadWebVideo オンラインビデオのアップロードに使用される方法。
    uploadLocalM3u8 ローカルM3U8ビデオのアップロードに使用される方法。
    uploadWebM3u8 オンラインM3U8ビデオをアップロードするために使用される方法。
    uploadImage ローカルまたはオンライン画像のアップロードに使用される方法。
    uploadAttachedMedia ローカルまたはオンラインの補助メディア資産をアップロードするために使用される方法。
    parseWebM3u8 オンラインM3U8ビデオのファイル部分に関する情報を解析するために使用される方法。
    parseLocalM3u8 ローカルM3U8ビデオのファイル部分に関する情報を解析するために使用されるメソッド。
    setApiRegion ApsaraVideo VODのアクセス領域を指定するために使用される方法。 デフォルトのリージョンは中国 (上海) リージョンです。 シンガポール (シンガポール) リージョンなど、中国本土以外のリージョンを指定することもできます。 詳細については、「ApsaraVideo VODのリージョンID」をご参照ください。
    setMultipartUpload マルチパートアップロードの開始に基づくファイルサイズのしきい値と、マルチパートアップロードの各パーツのサイズを設定する方法。
    uploadProgressCallback アップロードの進行状況のコールバックを設定するために使用されるメソッド。 このメソッドはオーバーライドできます。
    setEnableCrc アップロード中に巡回冗長検査 (CRC) を有効にするかどうかを指定するために使用される方法。 デフォルトでは、CRCは有効です。
  • ChangeLog.txt: バージョン履歴を提供します。 最初の行で、現在のSDKのバージョン番号とリリース日を取得できます。
samplesディレクトリ
  • uploadVideo.py: ビデオをアップロードするためのサンプルコードを提供します。
  • uploadImage.py: 画像をアップロードするためのサンプルコードを提供します。
  • uploadAttachedMedia.py: 補助メディアアセットをアップロードするためのサンプルコードを提供します。