全部产品
云市场

Python上传SDK

更新时间:2019-02-12 20:15:19

SDK介绍

简介

点播服务(VoD)基于对象存储(OSS)构建,开通VoD时会自动分配独立的系统Bucket,以存储各种媒体文件,包括上传的视频、音频、图片等源文件,以及转码后的输出文件、截图和封面等等,并作为点播加速域名的源站。使用VoD上传SDK能方便、快速实现媒体文件的上传。支持的文件格式参考 媒体上传文件支持

功能介绍

使用此上传SDK可实现以下功能:

主要功能

  1. 可上传各种媒体文件到点播:视频(含音频)、图片、辅助媒资(如水印、字幕文件)。
  2. 上传本地媒体文件到点播,默认使用分片上传,最大支持48.8TB的单个文件;暂不支持断点续传。
  3. 上传网络媒体文件到点播,最大支持48.8TB的单个文件,会先下载到本地临时目录再上传;暂不支持断点续传。
  4. 上传M3U8视频,同时提供解析M3U8索引文件得到分片地址列表的接口;也可自行指定分片文件地址。

其它功能

  1. 上传进度条功能,支持默认进度回调和自定义进度回调。
  2. 可指定上传脚本部署的ECS区域,如果和点播存储区域相同,则自动使用内网上传,上传更快且更省公网流量。
  3. 可指定点播中心(默认为上海)和存储区域,便于海外上传。
  4. 支持上传时设置元数据(标题等),以及StorageLocation、UserData、转码模板等。

SDK安装

环境要求

  • Python 2.7 及以上版本,可到Python官网下载合适的版本安装。
  • pip,若尚未安装请参看pip官网安装。

安装SDK

  1. 安装依赖包

    1. pip install aliyun-python-sdk-core
    2. pip install aliyun-python-sdk-vod
    3. pip install oss2
    • 如果使用的是 Python 3.x,请将pip install aliyun-python-sdk-core修改为pip install aliyun-python-sdk-core-v3。如果同时安装了不同版本,可使用pip3命令。

    • 如果安装时出现权限问题,请在命令前加sudo。

  2. 下载SDK

访问下载页 服务端上传SDK下载,选择Python版本下载。解压后拷贝VodUploadSDK-Python目录下的voduploadsdk即可使用,samples目录为示例代码。

更新SDK

若发现新的接口或已有接口新的功能在当前SDK没有,可更新到最新版。

  1. 更新依赖包

    1. pip install --upgrade aliyun-python-sdk-vod
    2. pip install --upgrade oss2
  2. 下载最新的Python版上传SDK,覆盖原有本地SDK文件。

    voduploadsdk 目录下的 ChangeLog.txt 为发版记录,首行即为当前SDK的版本号和发布日期。

使用说明

SDK结构

voduploadsdk目录

  • AliyunVodUtils.py文件

    • AliyunVodLog,上传SDK的日志类,基于logging实现。
    • AliyunVodUtils,上传SDK的工具类。
    • AliyunVodException,上传SDK的异常类,做统一的异常处理,外部捕获此异常即可。
  • UploadVideoRequest.py文件

  • UploadImageRequest.py文件

  • UploadAttachedMediaRequest.py文件

  • AliyunVodUploader.py文件,主要是AliyunVodUploader类

    • uploadLocalVideo,上传本地视频的接口。
    • uploadWebVideo,上传网络视频的接口。
    • uploadLocalM3u8,上传本地m3u8视频。
    • uploadWebM3u8,上传网络m3u8视频。
    • uploadImage,上传本地或网络图片文件。
    • uploadAttachedMedia,上传本地或网络辅助媒资文件。
    • parseWebM3u8,解析网络m3u8文件的分片信息。
    • parseLocalM3u8,解析本地m3u8文件的分片信息。
    • setApiRegion,设置VoD的接入地址,默认为cn-shanghai(中国大陆),海外支持ap-southeast-1(新加坡)等区域。详情参考 点播中心和访问域名
    • setMultipartUpload,设置分片上传的阈值、分片大小。
    • uploadProgressCallback,上传进度回调函数,可重写。
    • setEnableCrc,上传时是否启用CRC校验,默认开启。
  • ChangeLog.txt 版本发布记录,首行即为当前SDK的版本号和发布日期。

samples目录

  • uploadVideo.py,上传视频的示例代码。
  • uploadImage.py,上传图片的示例代码。

使用示例

以上传本地视频和网络视频文件为例:

  1. # -*- coding: UTF-8 -*-
  2. from voduploadsdk.AliyunVodUtils import *
  3. from voduploadsdk.AliyunVodUploader import AliyunVodUploader
  4. from voduploadsdk.UploadVideoRequest import UploadVideoRequest
  5. # 测试上传本地视频
  6. def testUploadLocalVideo(accessKeyId, accessKeySecret, filePath, storageLocation=None):
  7. try:
  8. uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
  9. uploadVideoRequest = UploadVideoRequest(filePath, 'test upload local video')
  10. # 可以设置视频封面,如果是本地或网络图片可使用UploadImageRequest上传图片到点播,获取到ImageURL
  11. #uploadVideoRequest.setCoverURL('https://sample.com/sample.jpg')
  12. #uploadVideoRequest.setTags('tag1,tag2')
  13. if storageLocation:
  14. uploadVideoRequest.setStorageLocation(storageLocation)
  15. videoId = uploader.uploadLocalVideo(uploadVideoRequest)
  16. print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
  17. except AliyunVodException as e:
  18. print(e)
  19. # 测试上传网络视频
  20. def testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl, storageLocation=None):
  21. try:
  22. uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
  23. uploadVideoRequest = UploadVideoRequest(fileUrl, 'test upload web video')
  24. uploadVideoRequest.setTags('tag1,tag2')
  25. if storageLocation:
  26. uploadVideoRequest.setStorageLocation(storageLocation)
  27. videoId = uploader.uploadWebVideo(uploadVideoRequest)
  28. print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
  29. except AliyunVodException as e:
  30. print(e)
  31. #### 执行测试代码 ####
  32. accessKeyId = '<AccessKeyId>'
  33. accessKeySecret = '<AccessKeySecret>'
  34. localFilePath = '/opt/video/sample.mp4'
  35. testUploadLocalVideo(accessKeyId, accessKeySecret, localFilePath)
  36. fileUrl = 'http://sample.oss.aliyuncs.com/video/sample.mp4'
  37. #testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl)

更多示例代码请参考解压后VodUploadSDK-Python目录下的samples目录。

常见问题

  • 如何实现内网上传?
    在点播控制台 存储管理 查看 媒资存储区域,将上传脚本部署在对应区域的ECS上,然后在初始化AliyunVodUploader类实例时指定ecsRegionId参数为对应区域,如:

    1. uploader = AliyunVodUploader(accessKeyId, accessKeySecret, 'cn-shanghai')
  • 如何获知上传进度?
    AliyunVodUploader类的uploadProgressCallback接口接收上传进度回调,可获取上传的媒体ID(视频ID)、已上传大小、总大小等信息,可重写此函数实现自己的上传进度回调。

  • 如何关闭日志打印?
    AliyunVodUtils.py文件的AliyunVodLog类,VOD_PRINT_INFO_LOG_SWITCH为日志打印开关,值更改为0即可关闭日志打印。

  • 上传是同步还是异步?
    本SDK上传时都为同步,会阻塞相应进程或线程,如要实现异步,建议使用单独线程上传。

  • 支持断点续传吗?
    暂时不支持断点续传,重新上传时会创建新的视频(或图片等)信息;后续版本会支持,时间待定。

  • 支持Windows下执行吗?支持Python3吗?
    本SDK支持Linux/Unix/Mac/Windows等多种平台;支持Python2.7或以上版本,包括Python3,但请安装相应版本的扩展。