视频点播支持将第三方平台的视频资源迁移到视频点播,也支持阿里云账号间的视频资源迁移。本文介绍上述资源的迁移方法。
迁移场景及方法
视频点播提供了多种方式进行资源迁移,支持将第三方资源(存储于个人网站、云端的视频等第三方数据资源)、同账号或跨账号下的OSS资源及点播资源迁移到视频点播中。
资源迁移成功之后,资源将会在视频点播中生成新的视频ID、播放地址、封面地址等视频信息,您需要自行关联迁移前后的视频资源关系。
迁移场景 | 迁移方法 | 迁移工具 |
第三方资源,迁移到视频点播 |
| |
同阿里云账号下的OSS资源,迁移到视频点播 |
| |
跨阿里云账号下的OSS资源,迁移到视频点播 |
| |
跨阿里云账号下的点播资源,迁移到视频点播 |
|
准备工作
URL批量拉取上传(推荐)
使用场景
如果需要迁移的文件没有存储在本地服务器或终端,需要通过公网访问URL地址进行资源访问迁移时,推荐您使用URL批量拉取的方式进行上传。该方式的优势在于能够快速上传大量文件,同时上传过程采用内网上传方式,节省上传流量。
使用限制
URL批量拉取上传目前仅支持在华东2(上海)和新加坡地域使用,其他地域的用户建议您使用其他方式进行资源迁移。
注意事项
URL批量拉取上传是异步任务,非实时,不保证时效性,一般提交后会在数小时、甚至数天内完成迁移上传。如果对时效性要求较高,建议使用上传SDK上传。
同一个媒体文件URL,每次提交上传任务都会在点播中产生一个新的媒体资源(即产生新的媒体ID)。
迁移流程
操作步骤
集成视频点播服务端SDK。
本文以集成Java SDK为例完成后续操作,更多语言的使用,请参见服务端SDK。
准备需要迁移的资源。
说明用户需要准备所有迁移文件的下载地址,需要注意下载地址如果存在鉴权,尽量保证鉴权时间够长,避免下载时文件下载地址失效。
文件的下载地址必须是包含文件扩展名的完整路径,例如:
https://****.mp4
。
通过点播服务端SDK调用UploadMediaByURL - URL批量拉取上传接口完成批量上传。
以下提供Java语言的调用示例,更多语言的调用示例,请参见URL批量拉取上传。
您也可以通过OpenAPI开发者门户在线调试。
获取上传结果。
方式一:事件通知
视频点播支持HTTP回调和MNS回调两种方式的事件通知,通过提前配置事件通知,当媒体文件处理完成(如上传完成、转码完成等)后,视频点播服务会根据您配置的回调方式及时通知您。配置详情请参见事件通知。
URL批量拉取上传的事件类型为URL上传视频完成。您可以从接收到的回调结果中获取到上传任务的状态等信息。
上传成功回调示例
{ "Status": "success", "EventTime": "2017-03-20T07:49:17Z", "EventType": "UploadByURLComplete", "VideoId": "43q9fjdun3f****", "JobId": "4c815bjs83j1****", "SourceURL ": "http://example.aliyundoc.com/27ffc438-164d55217ef-0005-6884-51a-1****.mp4", "Size":"123456" }
上传失败回调示例
{ "Status": "fail", "EventTime": "2017-03-20T07:49:17Z", "EventType": "UploadByURLComplete", "ErrorCode ": "URLInvalidError ", "ErrorMessage ": "download video failed by the url, please check it", "JobId": "4c815bjsued****" , "SourceURL ": "http://example.aliyundoc.com/27ffc438-164d55217ef-0005-6884-51a-1****.mp4", }
方式二:调用API查询
调用GetURLUploadInfos - 获取URL上传信息接口来查询指定URL拉取上传任务的执行状态等信息。
自行下载文件并搭建上传服务上传
当您的服务地域不支持使用URL批量拉取方式上传或您对上传实时性要求较高时,您可以自行下载文件并使用视频点播提供的上传SDK进行上传。如果您把上传服务部署在ECS上,根据您的ECS地域的不同可以选择内网上传和公网上传两种方式进行资源迁移。
内网下载内网上传
使用场景
当您的上传服务所在ECS与视频源文件在同一个地域时,可以通过ECS内网,将同账号或跨账号下的OSS资源迁移到视频点播中,或将跨账号下的视频点播资源迁移到视频点播中。
迁移流程
前提条件
您的上传服务所在的ECS与视频源文件必须在同一个地域。
操作步骤
准备需要迁移的OSS资源或视频点播资源的内网地址并保存。
说明需要注意资源文件地址如果存在鉴权,尽量保证鉴权时间够长,避免下载时文件下载地址失效。
点播资源
调用视频点播服务端GetMezzanineInfo - 获取源文件信息接口获取文件OSS地址,请务必将请求参数
OutputType
的值设为oss
。将获取到的OSS地址修改为内网地址,修改方法为在OSS地域后增加
-internal
。
OSS资源
可以通过列举文件,得到object列表,获取到资源的源文件地址并保存。
将获取到的OSS地址修改为内网地址,修改方法为在OSS地域后增加
-internal
。
修改前后的地址示例如下:
获取的OSS回源地址
修改后的内网地址
outin-67870fd5b29****98a3900163e1c35d5.oss-cn-shanghai.aliyuncs.com/customerTrans/2a13b91506f9158f****7317f4a9d4c9/30f24681-1718d5c6237-**4bd.mp4
outin-67870fd5b29****98a3900163e1c35d5.oss-cn-shanghai-internal.aliyuncs.com/customerTrans/2a13b91506f9158f****7317f4a9d4c9/30f24681-1718d5c6237-**4bd.mp4
更多获取OSS资源的内网访问地址的信息,请参见ECS实例通过OSS内网地址访问OSS资源。
搭建上传服务。
说明将上传服务部署在与点播OSS Bucket(中国内地默认上海)同地域的ECS。按照此方式部署后,使用上传SDK上传时指定参数
regionId
为上述地域,上传过程会自动走内网。代码示例请参考上传服务搭建及代码示例。推荐使用视频点播上传SDK完成迁移。
执行步骤2搭建的上传代码,上传视频至视频点播。
使用修改后的内网地址作为文件地址传入上传接口进行上传。
公网下载公网上传
使用场景
当您未将上传服务部署在ECS上或上传服务所在ECS与视频源文件不在同一个地域时,您可以选择使用公网下载公网上传方式进行资源迁移。
迁移流程
操作步骤
准备需要迁移的资源的源文件地址并保存。
说明需要注意资源文件地址如果存在鉴权,尽量保证鉴权时间够长,避免下载时文件下载地址失效。
资源文件的地址必须是包含文件扩展名的完整路径,例如:
https://****.mp4
。
点播资源
调用点播SearchMedia - 搜索媒体信息接口筛选出要迁移的视频VideoId。
调用GetMezzanineInfo - 获取源文件信息接口获取所有需要迁移视频的源文件地址并保存。
OSS资源
可以通过列举文件,得到object列表,获取到资源的源文件地址并保存。
第三方资源(存储于个人网站、云端的视频等第三方数据资源)
请自行准备所有迁移文件的下载地址,您可以根据自身的数据处理习惯保存迁移文件下载地址。
搭建上传服务。
代码示例请参考上传服务搭建及代码示例。推荐使用视频点播上传SDK完成迁移。
说明需要整理迁移前后资源关系的用户,上传程序应当记录源文件地址和上传后VideoId的关联,如:在上传时打印日志形式记录、上传时源文件地址写入视频媒资信息记录等,具体如何记录依赖于用户场景。如果使用URL批量拉取,该接口同步返回信息中有对应上传源文件地址,有需求可以合理使用。
执行步骤2搭建的上传代码,上传视频至视频点播。
不需要修改源文件地址,直接将源文件地址作为文件地址传入上传接口进行上传。
(可选)整理点播资源关系。
顺利完成数据迁移,如有整理资源的需求,请根据上传时记录的迁移源文件地址和上传到点播后VideoId之间的对应关系进行整理。
将OSS自有Bucket添加到视频点播并注册资源
使用场景
适用于资源存储在同账号下的OSS Bucket时,无需二次上传,直接通过将OSS自有Bucket添加到视频点播中后并注册资源来达到迁移资源的目的。
使用限制
目前仅支持将标准存储类型的OSS Bucket添加到视频点播中。
每个服务地域下最多仅支持添加10个OSS自有Bucket。
操作步骤
将需要迁移资源的OSS自有Bucket添加到视频点播中。
详细的操作步骤及参数解释,请参见添加OSS自有Bucket。
通过接口将OSS中的资源注册到视频点播中。
使用OSS的API/SDK,列举bucket下的所有文件,得到object列表。详情请参见列举文件。
调用RegisterMedia - 注册媒资信息接口注册媒资文件生成音/视频ID,其中,
RegisterMetadatas
中的FileURL
参数为OSS列举文件得到的object的完整路径,即必须加上OSS域名地址,例如:https://oss-cn-hangzhou.aliyuncs.com/video/example.mp4
上传服务搭建及代码示例
无论是第三方资源还是阿里云账号间资源迁移,都需要下载原视频再通过上传工具上传到视频点播。视频点播提供上传SDK及服务端接口两种上传工具。您的上传服务可通过上传SDK或服务端接口实现。使用上传SDK为同步上传,更具实效性,故推荐使用。使用服务端接口较为繁琐,故不推荐。
搭建上传服务步骤
上传SDK代码示例(推荐)
以下代码仅以Java上传SDK为例展示。更多语言的上传SDK及操作示例,请参考上传SDK。
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import java.io.*;
import java.net.URL;
/**
* 使用上传SDK进行视频文件上传
*/
public class UploadStreamDemo {
/**
* 流式上传接口
*
* @param accessKeyId
* @param accessKeySecret
* @param title
* @param fileName
* @param inputStream
*/
private static void testUploadStream(String accessKeyId, String accessKeySecret, String title, String fileName, InputStream inputStream) {
UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);
/* 自定义消息回调设置,参数说明请参见基本数据类型 */
//request.setUserData(""{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://example.aliyundoc.com\"}}"");
/* 视频分类ID(可选) */
//request.setCateId(0);
/* 视频标签,多个用逗号分隔(可选) */
//request.setTags("标签1,标签2");
/* 视频描述(可选) */
//request.setDescription("视频描述");
/* 封面图片(可选),如http://****.example.com/image_01.jpg*/
//request.setCoverURL("<Your CoverURL>");
/* 模板组ID(可选) */
//request.setTemplateGroupId("8c4792cbc8694e****fd5330e56a33d");
/* 工作流ID(可选) */
//request.setWorkflowId("d4430d07361f****1339577859b0177b");
/* 存储区域(可选) */
//request.setStorageLocation("outin-20170323****266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
/* 点播服务接入点 */
request.setApiRegionId("cn-shanghai");
/* ECS部署区域*/
// request.setEcsRegionId("cn-shanghai");
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); //请求视频点播服务的请求ID
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
public static void main(String[] args) {
/**
* 用户可自行添加url数据源,并传入视频媒资信息,上传视频资源
*/
InputStream inputStream = null;
//您的视频地址。如http://example.aliyundoc.com/video/****.mp4
String url = "<Your File URL>";
try {
inputStream = new URL(url).openStream();
} catch (IOException e) {
e.printStackTrace();
}
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
//以下参数中的AccessKey ID, AccessKey Secret为提前准备好的AccessKey信息。<Your Video Title>为视频标题。<Your Video with File Extension>为含文件扩展名的视频,如video-1.mp4。
testUploadStream(accessKeyId, accessKeySecret, "<Your Video Title>", "<Your Video with File Extension>", inputStream);
}
}
服务端API代码示例(不推荐)
集成服务端SDK并进行上传,需要开发者自行实现所有上传逻辑,包括在点播服务获取上传地址和凭证、Base64解码上传凭证和地址、以及调用OSS能力完成上传。此方式较为繁琐且出错率较高,因此不推荐使用。完整的上传逻辑请参见通过视频点播API上传媒资文件。