视频点播和媒体转码(后续简称 MTS )工作流服务均提供了音视频的点播服务,功能点上也存在相同之处,那么我们用户应该如何在两个产品中选择适合自己的产品呢?下面我们一起查看下它们的异同点。
产品功能
MTS 工作流服务是整合了对象存储(后续简称 OSS )的存储访问功能、 MTS 的转码功能、内容分发网络(后续简称 CDN )的资源加速功能、消息服务(后续简称 MNS )的消息通知功能和访问控制(后续简称 RAM )的权限管理功能的产品,提供整套视频点播解决方案,帮助用户完成从视频资源上传、视频资源转码、转码进度通知、媒体资源管理和访问加速整套功能。
同样的,视频点播产品也提供视频资源上传、转码、媒体资源管理和播放的功能。相比于 MTS 工作流服务有以下区别点:
1. 服务独立化
相比于 MTS 工作流服务集成多个产品提供解决方案的方式,视频点播提供了独立的产品封装了解决方案,用户仅需要一键开通视频点播产品即可以完整使用,无需在额外开通更多产品。
2. 白盒转黑盒
MTS 工作流服务提供了详细的输入、转码、截图、消息通知和发布状态的设置,用户可以根据业务要求自行配置并上线应用。该功能一方面提供了详细的配置项可以让用户匹配更细粒度的业务要求,同时也对客户的技术水平要求较高。而视频点播产品则将对应的功能黑盒化,用户仅需配置全局的转码和水印设置后上传视频即可直接播放使用,降低用户的使用难度。
3. 标准化模板
MTS 工作流中的转码任务中用户可以选择需要使用的转码模板,该模板可以使用 MTS 系统预置模板(包括智能模板和静态模板)和自定义模板,用户对转码任务的可控性更高。而视频点播则提供标准化转码模板,提供了原画的非转码流和流畅、标清、高清和超清四种转码流,分别对应了四种码率和分辨率级别,用户可以根据自己的要求配置后使用;同时可以设置 HLS 或者 MP4 的视频封装格式,让客户可以尽可能便捷操作。
图1. 视频点播转码模板设置截图
4. 媒体资源管理
MTS 工作流服务上传视频到用户自己的媒体 Bucket 中,因此用户可以直接获取该媒体资源地址并根据 Bucket 的权限和媒体的发布状态进行安全控制。而视频点播的媒体上传至视频点播产品的 Bucket 中,用户无法直接获取得到媒体播放 URL ,需要根据视频点播专门提供的播放器根据视频的 VID 播放。
5. 消息通知
MTS 工作流服务集成 MNS 可实现将工作流的执行状态回调给用户,让用户可以判断当前对视频的操作状态并执行不同的操作逻辑。工作流执行的过程中会在工作流触发和结束的时候分别会向 MNS 发送回调消息,用户可以设置队列或者通知两种不同的消息类别接收消息。而视频点播在开启回调开关并配置回调接收地址后,每个媒体在上传完成和转码完成后分别会接收到一条 POST 请求回调消息获取上传状态和转码状态(暂时仅有通知方式)。
图2. 视频点播回调设置截图
6. 访问控制
MTS 工作流服务支持使用 RAM 将其权限分配给子账号,以控制子账号的访问风险,提升安全控制粒度。可以分别控制 OSS 、MTS 、MNS 和 CDN 产品的权限以实现更高的安全防护。而视频点播暂时不支持 RAM 子账号控制视频点播。
产品使用
1. 视频资源上传
MTS 工作流服务的媒体资源是存储在用户账号自身的媒体 Bucket 中,因此其上传方式主要包括两大类 OSS 本身的上传方式和 MTS 的上传方式,具体请参考:工作流上传文件方法。其中 MTS 的上传方式其实是对 OSS 的 API 进行封装,用户根据账号的 AccessKeyId 和 AccessKeySeret 上传到媒体 Bucket 中并指定Object 的名称,如下面的JavaScript代码片段:
var accessKeyId = document.getElementById("accessKeyId").value;
var accessKeySecret = document.getElementById("accessKeySecret").value;
var secretToken = document.getElementById("secretToken").value;
var expireTime = document.getElementById("expireTime").value;
if (isSTSMode()) {
// OSS直接上传:STS方式,安全但是较为复杂,建议生产环境下使用。
// 临时账号过期时,在onUploadTokenExpired事件中,用resumeWithToken更新临时账号,上传会续传。
uploader.init(accessKeyId, accessKeySecret, secretToken, expireTime);
} else {
// OSS直接上传:AK方式,简单但是不够安全,建议测试环境下使用。
uploader.init(accessKeyId, accessKeySecret);
}
//上传文件,各参数分别表示文件数据、bucket Endpoint、bucket、object key和媒体属性
uploader.addFile(event.target.files[i], endpoint, bucket, objectPre + event.target.files[i].name, userData);
而视频点播的媒体则统一存储在华东2(cn-shanghai)数据中心,并且操作 Bucket 是视频点播统一的 Bucket ,而非用户的 Bucket ,因此用户是无法直接通过本身账号的 AccessKeyId 和 AccessKeySeret 调用 OSS SDK上传的。其上传操作包括两步:
1) 获取上传凭证和地址:用户需要先通过 createUploadVideo 接口获取上传凭证和地址。上传凭证 UploadAuth 和地址 Address 是根据文件名称、文件大小和标题随机生成的,并且该上传凭证是有过期时间的(凭证过期s时间为3600秒),当超过过期时间还需要通过 RefreshUploadVideo 接口重新获得 UploadAuth 。下面是Java SDK的示例代码:
public static void main(String[] args) throws ServerException,
com.aliyuncs.exceptions.ServerException, ClientException {
DefaultAcsClient aliyunClient;
aliyunClient = new DefaultAcsClient(DefaultProfile.getProfile(
"cn-shanghai", accessKeyId, accessKeySecret));
String videoId = createUploadVideo(aliyunClient, "1.mp4", 1000);
System.out.println("VideoId:" + videoId);
refreshUploadVideo(aliyunClient, videoId);
}
private static String createUploadVideo(DefaultAcsClient client,
String fileName, long fileSize)
throws com.aliyuncs.exceptions.ServerException, ClientException {
CreateUploadVideoRequest request = new CreateUploadVideoRequest();
CreateUploadVideoResponse response = null;
request.setFileName(fileName);
request.setFileSize(Long.valueOf(fileSize));
request.setTitle(fileName);
response = client.getAcsResponse(request);
System.out.println("UploadAuth:" + response.getUploadAuth());
System.out.println("Address:" + response.getUploadAddress());
return response.getVideoId();
}
private static void refreshUploadVideo(DefaultAcsClient client,
String videoId) throws ServerException,
com.aliyuncs.exceptions.ServerException, ClientException {
RefreshUploadVideoRequest request = new RefreshUploadVideoRequest();
RefreshUploadVideoResponse response = null;
request.setVideoId(videoId);
response = client.getAcsResponse(request);
System.out.println("UploadAuth:" + response.getUploadAuth());
}
2) 上传媒体资源:获取上传凭证和地址后即可使用对视频点播封装的 SDK 直接上传即可,如下面 JavaScript 代码片段:
//设置上传凭证和地址
uploader.setUploadAuthAndAddress(uploadAuth, uploadAddress);
// 点播上传。每次上传都是独立的鉴权,所以初始化时,不需要设置鉴权
uploader.init();
// 点播上传。每次上传都是独立的OSS object,所以添加文件时,不需要设置OSS的属性
uploader.addFile(event.target.files[i], null, null, null, userData);
2. 视频转码和截图
MTS 工作流服务是通过在工作流中添加转码和截图节点实现对输入媒体转码和截图的功能(如图3所示),详细请参考:媒体工作流的设置。其中转码节点可以配置转码模板、输出 Bucket 、路径还有水印使用情况(如图4所示),截图节点可以配置截图输出路径、时间点和图片基本信息(如图5所示)。
图3 MTS 工作流拓扑结构设置截图
图4 MTS 工作流转码节点的配置截图
图5 MTS 工作流截图节点的配置截图
其中转码模板可以是系统预置模板或者自定义模板,系统预置模板请参考:系统预置模板;而自定义模板用户可以根据详细的视频参数、音频参数和封包参数进行设置,设置方法请您参考:自定义转码模板设置,详细的参数意义请参考:自定义模板参数设置。水印模板则也可以根据用户自定义模板设置。在配置完成前述的设置后用户上传文件到工作流输入目录即会自动按照上述的转码任务进行转码后输出到输出路径中。
视频点播则提供了标准化模板进行转码(如上图1所示)。视频点播提供了四种清晰度和两种封装格式的模板,用户需要哪种模板的转码操作直接在全局设置中勾选即可,不需要设置转码模板的视频、音频和封包参数。这样所有上传到视频点播的视频即会自动按照全局的转码设置进行转码,而对应的媒体在点播系统即会转码为 MP4 或者 HLS 封装格式。而水印则可以设置水印位置、偏移量和水印图片(如图6所示)后并启用水印则直接生效。
图6 视频点播水印的配置截图
3. 视频资源管理
MTS 工作流服务当触发工作流执行实例就有对应的媒体存放在 MTS 媒体库中, MTS 媒体库详细内容请参考:MTS 媒体库。媒体库中的媒体资源均通过 MediaId 标识,如果同一个输入媒体对应于多次执行实例也会记录为同一个 MediaId ,而获取该媒体对应的输出地址请参考:媒体库获取输出地址。用户获取了该地址后即可根据自己的业务需要自行获取媒体资源数据。
视频点播则会将所有上传的视频放在“视频管理”页面中,点击“管理”后可以查看到视频的详细信息(如图7所示),包括视频ID、标题、描述和截图等详细的视频信息,但请注意对应视频并不提供具体的 URL 地址,用户仅能够通过视频点播的播放器输入鉴权和视频ID进行播放。这样可起到对视频资源的URL防护功能。
图7 视频点播媒体信息管理截图
4. 视频播放和加密
MTS 工作流服务的媒体资源由于存储在用户的媒体 Bucket 中,因此用户可以直接获取 OSS 中的 URL 或者通过 OSS 的 API/SDK 获取视频资源进行播放即可;如果有使用 CDN 加速访问 则也可以通过 CDN 加速的 URL 播放。对应的 URL 安全控制请参考: MTS 工作流输出文件的权限。同时 MTS 工作流服务提供了针对于 HLS 封装格式在 Flash 播放器端的内容加密,这样将实现对资源的内容加密,配置方法请参考: MTS 视频加密。
视频点播现则必须通过该产品提供的播放器以视频ID进行播放,并且在播放过程中可以根据不同的终端设备基于阿里云 AccessKeyId 和 AccessKeySeret 和 ApiKey 或者获取 playKey 的方式进行鉴权,以保证数据的安全性,其中 playKey 是临时获取的播放鉴权(有效时长为100秒,暂不支持修改),其获取方式请参考:获取播放鉴权;同时对于 Flash 和 Html5 形式的播放器视频点播提供了兼容性模式同时支持两种类型的终端,这时需要设置的播放器 ApiKey 需要同时有 Flash和 Html5 两种形式的,具体示例如下:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
//这里需要引入兼容模式的播放器资源
<link rel="stylesheet" href="http://g.alicdn.com/de/prismplayer/1.6.3/skins/default/index.css" />
<script type="text/javascript" src="http://g.alicdn.com/de/prismplayer/1.6.3/prism.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer"></div>
<script>
var player = new prismplayer(
{
id: "J_prismPlayer",
autoplay: true,
width: "1920px",
height: "1280px",
//播放方式一:推荐
vid : '1e067a2831b641db90d570b6480fbc40',
playauth : '',
//播放方式二
prismType:2, //固定参数
vid : '视频ID',
accId : '用户AK id,推荐子账号',
accSecret : '用户AK secret,推荐子账号',
apiKey : 'H5播放器对应的播放密钥',
flashApiKey : 'Flash播放器对应的播放密钥',
});
</script>
</body>
</html>
产品价格
MTS 工作流服务是结合了 OSS 、 CDN 、 MNS 和 MTS 四个产品进行服务的,因此其费用是四个产品费用使用额度累加的结果,请分别参考: OSS 计费、 CDN 计费、 MNS 计费和 MTS 计费。
而视频点播为独立的产品,采用单独计费的方式,计费项包括:流量、存储空间和视频转码,具体请参考:视频点播计费。
总结和建议
MTS 工作流针对于视频点播的解决方案提供了更加详备和丰富的功能供用户使用满足用户的多种业务场景,但是使用过程对于用户有较高的要求,需要深入理解工作流原理以及配置对应的回调服务器和调用 API/SDK 的应用配合使用。而视频点播则主要提供了更为简便的点播方案,帮助用户可以很便捷的创建自己的视频点播业务,其中帮助用户封装了细节处理思路降低用户的使用成本,但是可变性相对较低。