公式ドキュメント参照: Python アップロード SDK - 共通ファイルアップロード、再生 URL 取得
この記事では、ビデオのアップロードと 1 つのビデオ再生アドレスの取得についてのみ説明します。すべての動画リストを一括で取得するなどのその他のケースについては、公式ドキュメントを直接参照してください: Media Management
1. ビデオをアップロードします。アップロードが完了したら videoId パラメータを返し、この videoId を使用してビデオ再生アドレスを取得します。
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest
import re
filePath = "F:/Download/新增红色视频/丹心映红六盘山——夜宿单家集探寻“红色密码”.mp4"
# print(filename.rindex('/'))
# print(filename[filename.rindex('/')+1: filename.index('.')])
filename = filePath[filePath.rindex('/')+1: filePath.index('.')]
# 测试上传本地音视频
def testUploadLocalVideo(accessKeyId, accessKeySecret, filePath, storageLocation=None):
try:
# 可以指定上传脚本部署的ECS区域。如果ECS区域和视频点播存储区域相同,则自动使用内网上传,上传更快且更省公网流量。
# ecsRegionId ="cn-shanghai"
# uploader = AliyunVodUploader(accessKeyId, accessKeySecret, ecsRegionId)
# 不指定上传脚本部署的ECS区域。
uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
uploadVideoRequest = UploadVideoRequest(filePath, filename)
# 可以设置视频封面,如果是本地或网络图片可使用UploadImageRequest上传图片到视频点播,获取到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)
testUploadLocalVideo('yourAccessKeyID', "yourAccessKeySecret", filePath)
コード内の yourAccessKeyID と yourAccessSecret を、Alibaba Cloud メイン アカウントの AccessKeyID と AccessKeySecret、または RAM アクセス制御ユーザーの AccessKeyID と AccessKeySecret に置き換えます。
2. videoId に従ってビデオ再生アドレスを取得します。戻り値のパラメータ PlayURL が再生アドレスです。
公式パラメータ説明ドキュメント: GetPlayInfo インターフェイスの説明
import json
import traceback
from aliyunsdkcore.client import AcsClient
def init_vod_client(accessKeyId, accessKeySecret):
regionId = 'cn-shanghai' # 点播服务接入地域
connectTimeout = 3 # 连接超时,单位为秒
return AcsClient(accessKeyId, accessKeySecret, regionId, auto_retry=True, max_retry_time=3, timeout=connectTimeout)
from aliyunsdkvod.request.v20170321 import GetPlayInfoRequest
def get_play_info(clt, videoId):
request = GetPlayInfoRequest.GetPlayInfoRequest()
request.set_accept_format('JSON')
request.set_VideoId(videoId)
request.set_AuthTimeout(3600*5) # 设置播放地址的有效时间。单位:秒。
response = json.loads(clt.do_action_with_exception(request))
return response
try:
clt = init_vod_client('yourAccessKeyID', "yourAccessKeySecret")
playInfo = get_play_info(clt, '4aa4f9c0b73c71ed80110675a0ec0102') # 第二个参数是videoID
print(json.dumps(playInfo, ensure_ascii=False, indent=4))
except Exception as e:
print(e)
print(traceback.format_exc())
コード内の yourAccessKeyID と yourAccessSecret を、Alibaba Cloud メイン アカウントの AccessKeyID と AccessKeySecret、または RAM アクセス制御ユーザーの AccessKeyID と AccessKeySecret に置き換えます。
注: アドレスのアップロードや取得などの操作でエラーが報告された場合は、使用した RAM ユーザーに権限がないことが原因である可能性があります。ユーザーを検索して、対応する権限を追加してください。
3. sts を使用してトークンを取得してアクセスすることもできます
1. RAMアクセス制御で作成したユーザーからAccessKeyIDとAccessKeySecretを取得し、作成したロールからARNを取得します(これらのパラメータの取得方法は以前公開した記事で詳しく説明しているので割愛します)ここ)
2. AccessKeyID、AccessKeySecret、ARNを通じてSTSのSecurityToken、AccessKeyID、AccessKeySecretを取得します。これらは以降のアクセスで画像テキストのインターフェースを識別するために使用されます。
公式APIを参照:STS SDK概要、セキュリティトークン取得(APIインターフェースに必要なパラメータを入力し、コードをコピーしてください)
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdksts.request.v20150401.AssumeRoleRequest import AssumeRoleRequest
credentials = AccessKeyCredential('yourAccessKeyID', 'yourAccessSecret')
# use STS Token
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
client = AcsClient(region_id='cn-shanghai', credential=credentials)
request = AssumeRoleRequest()
request.set_accept_format('json')
policy_text = '{"Version": "1","Statement": [{"Action": "vod:*","Resource": "*","Effect": "Allow"}]}' # 策略
request.set_RoleArn("yourRoleArn") # 在RAM访问控制中的角色里获取ARN
request.set_RoleSessionName("client") # 任意写
request.set_Policy(policy_text)
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
上記のコードの yourAccessKeyID、yourAccessKeySecret、および yourRoleArn を、最初の手順で取得した値に置き換えてください。
2. SecurityToken リクエスト インターフェイスを使用してデータを取得します
import json
import traceback
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkvod.request.v20170321 import GetPlayInfoRequest
from aliyunsdkvod.request.v20170321 import CreateUploadVideoRequest
def init_vod_client(accessKeyId, accessKeySecret, securityToken):
regionId = 'cn-shanghai' # 点播服务接入地域
connectTimeout = 3 # 连接超时,单位为秒
credential = StsTokenCredential(accessKeyId, accessKeySecret, securityToken)
return AcsClient(region_id=regionId, auto_retry=True, max_retry_time=3, timeout=connectTimeout, credential=credential)
def get_play_info(clt, videoId):
request = GetPlayInfoRequest.GetPlayInfoRequest()
request.set_accept_format('JSON')
request.set_VideoId(videoId)
request.set_AuthTimeout(3600*5)
response = json.loads(clt.do_action_with_exception(request))
return response
try:
clt = init_vod_client('yourAccessKeyID', 'yourAccessSecret', "yourSecurityToken")
playInfo = get_play_info(clt, '20b87bd0b73e71ed801d0674a2ce0102') # 第二个参数是videoID
print(json.dumps(playInfo, ensure_ascii=False, indent=4))
except Exception as e:
print(e)
print(traceback.format_exc())
上記のコードの yourAccessKeyID、yourAccessKeySecret、および yourSecurityToken を、3 番目と 2 番目の小さなステップのコードによって返される SecurityToken、AccessKeyId、および AccessKeySecret に置き換えます。