当前位置: 首页 > 工具软件 > crmeb-zzff > 使用案例 >

为开源CRMEB知识付费系统,对接阿里云视频点播功能

於功
2023-12-01

为站点,对接阿里云视频点播功能

阿里云视频点播(VOD)是集音视频上传、自动化转码处理、媒体资源管理、分发加速于一体的全链路音视频点播服务。借助灵活、可伸缩的存储、处理及内容分发服务,帮助企业和开发者快速搭建安全、弹性、高可定制的点播平台和应用,提供端到端的完整解决方案。

安装

在页面上引入下面三个JS脚本,见 视频上传SDK下载。

<!--  IE需要es6-promise -->
<script src="../lib/es6-promise.min.js"></script>
<script src="../lib/aliyun-oss-sdk6.10.0.min.js"></script>
<script src="../aliyun-vod-upload-sdk1.5.2.min.js"></script>	

页面js上传代码

上传图片和上传视频获取上传地址和凭证所请求的API是不同的。

客户端上传视频:

需要请求向AppServer发送请求,AppServer通过OpenApi向阿里云点播服务发送CreateUploadVideo请求。请求成功将返回上传地址,上传凭证以及VideoIdAppServer需要将结果返回给客户端。

客户端上传图片:

需要请求向AppServer发送请求,AppServer通过OpenApi向阿里云点播服务发送CreateUploadImage请求。请求成功将返回上传地址,上传凭证以及ImageURLAppServer需要将结果返回给客户端,然后通过上传地址,上传凭证上传图片,后面流程和上传视频一样,不过不需要处理断点续传,因为图片没有续传功能。

上传地址和凭证方式(推荐使用)

首先请求获取的上传地址和凭证初始化时无需设置,而是在开始上传开始后触发的onUploadStarted回调中调用setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress,videoId);方法进行设置。 当token超时,会触发onUploadTokenExpired回调,需要调用resumeUploadWithAuth(uploadAuth)方法,设置新的上传凭证继续上传。

示例代码:

var uploader = new AliyunUpload.Vod({
    timeout: 60000,
    partSize:  1048576,
    parallel: 5,
    retryCount:3,
    retryDuration: 2,
    region: cn-shanghai,
    userId: ‘12232’,
// 添加文件成功
addFileSuccess: function (uploadInfo) {
},
// 开始上传
onUploadstarted: function (uploadInfo) {
  	// 如果是 UploadAuth 上传方式, 需要调用 uploader.setUploadAuthAndAddress 方法
  	// 如果是 UploadAuth 上传方式, 需要根据 uploadInfo.videoId是否有值,调用点播的不同接口获取uploadauth和uploadAddress
  	// 如果 uploadInfo.videoId 有值,调用刷新视频上传凭证接口,否则调用创建视频上传凭证接口
  	// 注意: 这里是测试 demo 所以直接调用了获取 UploadAuth 的测试接口, 用户在使用时需要判断 uploadInfo.videoId 存在与否从而调用 openApi
  	// 如果 uploadInfo.videoId 存在, 调用 刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)
	// 如果 uploadInfo.videoId 不存在,调用 获取视频上传地址和凭证接口(https://help.aliyun.com/document_detail/55407.html)
if (!uploadInfo.videoId) {
    var createUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateUploadVideo?Title=testvod1&FileName=aa.mp4&BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&VideoId=5bfcc7864fc14b96972842172207c9e6'
    $.get(createUrl, function (data) {
    var uploadAuth = data.UploadAuth
    var uploadAddress = data.UploadAddress
    var videoId = data.VideoId
    uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
}, 'json')
} else {
    // 如果videoId有值,根据videoId刷新上传凭证
    // https://help.aliyun.com/document_detail/55408.html?spm=a2c4g.11186623.6.630.BoYYcY
    var refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
    $.get(refreshUrl, function (data) {
    var uploadAuth = data.UploadAuth
    var uploadAddress = data.UploadAddress
    var videoId = data.VideoId
    uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
}, 'json')
}
},
// 文件上传成功
onUploadSucceed: function (uploadInfo) {
},
// 文件上传失败
onUploadFailed: function (uploadInfo, code, message) {
},
// 取消文件上传
onUploadCanceled: function (uploadInfo, code, message) {
},
// 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上
onUploadProgress: function (uploadInfo, totalSize, progress) {var progressPercent = Math.ceil(progress * 100)
},
// 上传凭证超时
onUploadTokenExpired: function (uploadInfo) {
// 上传大文件超时, 如果是上传方式一即根据 UploadAuth 上传时
// 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)重新获取 UploadAuth
// 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth
$('#status').text('文件上传超时!')

let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
$.get(refreshUrl, function (data) {
    var uploadAuth = data.UploadAuth
    uploader.resumeUploadWithAuth(uploadAuth)
    console.log('upload expired and resume upload with uploadauth ' + uploadAuth)
}, 'json')
},
// 全部文件上传结束
onUploadEnd: function (uploadInfo) {
    $('#status').text('文件上传完毕!')
    console.log("onUploadEnd: uploaded all the files")
}
})

获取视频上传地址和凭证

阿里云文档地址

https://help.aliyun.com/document_detail/55407.html?spm=a2c4g.11186623.6.717.4e217971q8IIKf

将提交的数据和公共参数以&符拼接,如:

http://vod.cn-shanghai.aliyuncs.com/?Action=CreateUploadVideo&Title=exampleTitle&FileName=example.avi&FileSize=10485760&Format=JSON&<公共参数>

使用js来完成上传:

ar createUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateUploadVideo?Title=testvod1&FileName=aa.mp4&BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&VideoId=5bfcc7864fc14b96972842172207c9e6'
$.get(createUrl, function (data) {
    var uploadAuth = data.UploadAuth
    var uploadAddress = data.UploadAddress
    var videoId = data.VideoId
    uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
}, 'json')

保存上传数据

保存上传时生成videold值,播放时会需要

播放链接

我们使用获取视频播放凭证,来在阿里云播放器播放;

阿里云文档连接:

https://help.aliyun.com/document_detail/52833.html?spm=a2c4g.11186623.6.728.392258fcAl0XGb

实例化播放器

new Aliplayer({
    id: 'player',
    vid: VideoId,
    playauth: PlayAuth,
    format: 'mp3',
    mediaType: 'audio',
    encryptType: 1,
    autoplay: false
});

这样就完成了阿里云视频点播的上传及播放!

开源CRMEB知识付费系统仓库:

https://gitee.com/ZhongBangKeJi/crmeb_zzff_class

感谢您的阅读,如果对您有帮助,欢迎关注"CRMEB"掘金号。码云上有我们开源的商城项目,知识付费项目,均是基于PHP开发,学习研究欢迎使用,关注我们保持联系!

 类似资料: