アップロードプロセス
Python アップロード SDK は、ApsaraVideo VOD SDK の一般的なアップロードプロセスに従います。 詳細については、「アップロードプロセス」をご参照ください。 Python サーバーアップロード SDK を使用する際の基本的なプロセスを以下に示します。
このトピックの前提条件セクションの説明に従って構成を完了します。
Python アップロード SDK を統合します。 詳細については、「Python アップロード SDK を統合する」をご参照ください。
アップロードロジックを実装するためにアップロード情報を構成します。
中国 (上海) リージョン以外にメディアファイルをアップロードする場合、AliyunVodUploader.py で ApiRegion を指定します。 デフォルトでは、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 を使用してビデオをアップロードする」をご参照ください。
Python アップロード SDK を統合する
依存関係をインストールするには、次のコマンドを実行します。
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-core を sudo pip install aliyun-python-sdk-core-v3 に置き換えます。 複数のバージョンの Python をインストールしている場合は、pip3 コマンドを実行できます。 SDK の統合時にエラーが発生した場合は、「FAQ」に記載されている手順に従ってエラーをトラブルシューティングしてください。
Python アップロード SDK とサンプルコードを含む VodUploadSDK-Python_1.3.*.zip パッケージをダウンロードします。 詳細については、「アップロード SDK」をご参照ください。
説明 このトピックでは、SDK V1.3.1 を例として使用しています。 ビジネス要件に基づいて他のバージョンを使用できます。
VodUploadSDK-Python_1.3.*.zip パッケージを解凍し、voduploadsdk を VodUploadSDK-Python_1.3.* ディレクトリからローカルプロジェクトのディレクトリまたは site-packages ディレクトリにコピーします。 voduploadsdk をローカルプロジェクトのディレクトリにコピーすることをお勧めします。
Python アップロード SDK を更新する
新しい操作または既存の操作の新しい機能が現在の SDK で使用できない場合は、SDK を最新バージョンに更新します。
依存関係をインストールするには、次のコマンドを実行します。
sudo pip install --upgrade aliyun-python-sdk-vod
sudo pip install --upgrade oss2
Python アップロード SDK の最新バージョンをダウンロードして、既存の SDK を上書きします。 詳細については、「SDK の概要とダウンロード」をご参照ください。
説明 現在の SDK のバージョン番号とリリース日は、ChangeLog.txt ファイル (voduploadsdk ディレクトリ内) の最初の行で確認できます。
ディレクトリ
voduploadsdk
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 と同じレベルのディレクトリに作成することでエラーを修正できます。