SpringBoot+阿里云OSS实现在线视频播放的示例

SpringBoot+阿里云OSS实现在线视频播放的示例

这篇文章主要介绍了跳羚阿里云战略情报局实现在线视频播放的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

阿里云战略情报局是一种云存储技术,你可以理解为云盘,我们的目标是将视频存储到云端,然后在前端读取并播放视频。

OSS

首先登陆首页,创建一个存储桶:https://oss.console.aliyun.com

然后找到读写权限:

将读写权限设置为公共读即可:

在随机存取存储中新建一个用户:

为其添加权限,选择战略情报局的权限:

然后点进去这个用户,找到访问键:

创建之后记下来秘密,因为他只出现一次,如果没记住也没事,可以重新创建新的钥匙。

下面开始编写服务端代码:

POM

!-阿里云oss -

属国

groupIdcom.aliyun.oss/groupId

artifactIdaliyun-SDK-OSS/artifactId

版本3 .10 .2/版本

/依赖关系

包com。LSU。文件。控制器。admin

导入com。阿里巴巴。快速JSON。JSON对象;

导入com。阿里云。战略情报局。OSS

导入com。阿里云。战略情报局。OSS客户端生成器;

导入com。阿里云。战略情报局。模型。appendobjectrequest

导入com。阿里云。战略情报局。模型。appendobjectresult

导入com。阿里云。战略情报局。模型。对象元数据;

导入com。阿里云。战略情报局。模型。putobjectrequest

导入com。LSU。服务器。dto。filedo

导入com。LSU。服务器。dto。响应dto

导入com。LSU。服务器。伊努斯。文件使用枚举;

导入com。LSU。服务器。服务。文件服务;

导入com。LSU。服务器。util。base64到多部分文件;

导入com。LSU。服务器。util。uuidutil

导入org。slf4j。记录者;

导入org。SLF 4j。伐木工厂;

导入org。spring框架。豆子。工厂。注释。价值;

导入org。spring框架。网络。绑定。注释。*;

导入org。spring框架。网络。多部分。多部分文件;

导入javax。注释。资源;

导入Java。io。bytearray inputstream

/**

* @作者wsuo

*/

@RestController

@RequestMapping(/admin )

公共类OssController {

私有静态最终记录器日志=记录器工厂。获取记录器(文件控制器。类);

@Value(${oss.accessKeyId} )

私有字符串accessKeyId

@Value(${oss.accessKeySecret} )

私有字符串accessKeySecret

@Value(${oss.endpoint} )

私有字符串终结点;

@Value(${oss.bucket} )

私串桶;

@Value(${oss.domain} )

私有字符串ossDomain

公共静态最终字符串商务名称=OSS文件上传;

@资源

私有文件服务;

@PostMapping(/oss-append )

公共ResponseDtoFileDto文件上传(@请求正文文件Dto文件dto)引发异常{

LOG.info(上传文件开始);

字符串使用=文件dto。getuse();

string key=file dto。getkey();

字符串后缀=文件dto。get后缀();

整数分片索引=文件dto。getshard index();

integer shardSize=文件dto。getshardsize();

字符串分片base 64=文件dto。getshard();

多部分文件碎片=base 64到多部分文件。基底64到多部分(碎片基底64);

文件使用枚举使用枚举=文件使用枚举。按代码获取(使用);

String dir=useEnum.name().toLowerCase();

字符串路径=目录

/

.

后缀;

//创建OSSClient实例。

OSS OSS client=新OSS client builder().build(endpoint,accessKeyId,access key secret);

对象元数据meta=新对象元数据();

//指定上传的内容类型。

meta。设置内容类型(“文本/普通”);

//通过AppendObjectRequest设置多个参数。

AppendObjectRequest AppendObjectRequest=new AppendObjectRequest(bucket,path,new bytearray inputstream(shard。getbytes()),meta);

appendobjectrequest。设置位置((long)((shard index-1)* shardSize));

AppendObjectResult AppendObjectResult=OSS客户端。appendobject(appendObjectRequest);

//文件的64位循环冗余检验值。此值根据ECMA-182标准计算得出。

系统。出去。println(appendobjectresult。getobject CRC());

系统。出去。println(JSON对象。tojsonstring(appendObjectResult));

OSS客户端。关闭();

LOG.info(保存文件记录开始);

fileDto.setPath(路径);

文件服务。保存(filedo);

ResponseDtoFileDto responseDto=new responseDto();

filedo . set path(OSS domain路径);

响应dto。设置内容(文件dto);

返回responseDto

}

@PostMapping(/oss-simple )

public ResponseDtoFileDto文件上载(@ request param多部分文件file,String use)引发异常{

LOG.info(上传文件开始);

文件使用枚举使用枚举=文件使用枚举。按代码获取(使用);

string key=uuid util。getshortuuid();

字符串fileName=file。getoriginalfilename();

字符串后缀=文件名。子字符串(文件名。lastindexof( . )) 1).toLowerCase();

String dir=useEnum.name().toLowerCase();

String path=dir / key . 后缀;

//创建OSSClient实例。

OSS OSS client=新OSS client builder().build(endpoint,accessKeyId,access key secret);

PutObjectRequest PutObjectRequest=new PutObjectRequest(bucket,path,new bytearrayiputstream(file。getbytes()));

OSS客户端。putobject(putObjectRequest);

ResponseDtoFileDto responseDto=new responseDto();

filedo filedo=new filedo();

filedo . set path(OSS domain路径);

响应dto。设置内容(文件dto);

返回responseDto

}

}

这部分内容可以参考阿里云的帮助手册:https://help.aliyun.com/document_detail/32011.html?SPM=a2c4g。11174283 .6 .915 .443 b 7 da 2 mfh bkq

上面写的是两个接口:

追加上传:/OSS-附加

简单上传:/OSS-简单

注意这里的参数都已经在yml文件中定义了:

上面的KeyId和密钥保密就是之前在创建用户时给的那两个,填上就行了。

在前端我们就可以发送请求获取数据,注意这里的对象是我自定义的,大家可以根据项目需求自行设置。

_这个Ajax。岗位(流程。环境。vue _ APP _ SERVER /文件/管理/OSS-简单,表单数据).然后(响应={

正在加载。hide();

let resp=response.data

_这个。上传后(resp);

//清空原来控件中的值

$(# _this.inputId -input ).val(" ");

})

视频点播

同视频点播是另一种视频存储的形式,它的功能更丰。阿里云视频点播(视频点播)是集音视频上传、自动化转码处理、媒体资源管理、分发加速于一体的全链路音视频点播服务。

我们同样需要一个同视频点播的用户,给它赋予同视频点播的权限:

软件开发工具包(软件开发工具包)的使用可以参考文档:https://help.aliyun.com/document_detail/61063.html?SPM=a2c4g。11186623 .6 .921 .418 f 192 btdcijn

我们可以在转码组设置自己的模板,然后通过身份证明在代码中使用:

上传视频比较简单,和战略情报局很像,但是播放视频要多一个条件,在获取播放链接之前要先取得权限认证,所以下面单独写了一个/get-auth/{vod}接口,其中的参数就是视频点播的ID,这个身份证明在我们上传视频之后会作为返回值返回的。

包com。LSU。文件。控制器。admin

导入com。阿里巴巴。快速JSON。JSON

导入com。阿里巴巴。快速JSON。JSON对象;

导入com。阿里云。战略情报局。OSS客户端;

导入com。阿里云。defaultacsclient

导入com。阿里云。视频点播。模型。五2017 03 21。createuploadvideoresponse

导入com。阿里云。视频点播。模型。五2017 03 21。getmezzanineinforresponse

导入com。阿里云。视频点播。模型。五2017 03 21。getvideoplayauthresponse

导入com。LSU。服务器。dto。filedo

导入com。LSU。服务器。dto。响应dto

导入com。LSU。服务器。伊努斯。文件使用枚举;

导入com。LSU。服务器。服务。文件服务;

导入com。LSU。服务器。util。base64到多部分文件;

导入com。LSU。服务器。util。VOD util

导入org。阿帕奇。公地。编解码器。二进制。base64

导入org。slf4j。记录者;

导入org。SLF 4j。伐木工厂;

导入org。spring框架。豆子。工厂。注释。价值;

导入org。spring框架。网络。绑定。注释。*;

导入org。spring框架。网络。多部分。多部分文件;

导入javax。注释。资源;

/**

* @作者wsuo

*/

@RestController

@RequestMapping(/admin )

公共类VodController {

私有静态最终记录器日志=记录器工厂。获取记录器(文件控制器。类);

@Value(${vod.accessKeyId} )

私有字符串accessKeyId

@Value(${vod.accessKeySecret} )

私有字符串accessKeySecret

公共静态最终字符串BUSINESS_NAME=VOD视频上传;

@资源

私有文件服务;

@PostMapping(/vod )

公共ResponseDtoFileDto文件上传(@请求正文文件Dto文件dto)引发异常{

字符串使用=文件dto。getuse();

string key=file dto。getkey();

字符串后缀=文件dto。get后缀();

整数分片索引=文件dto。getshard index();

integer shardSize=文件dto。getshardsize();

字符串分片base 64=文件dto。getshard();

多部分文件碎片=base 64到多部分文件。基底64到多部分(碎片基底64);

文件使用枚举使用枚举=文件使用枚举。按代码获取(使用);

String dir=useEnum.name().toLowerCase();

字符串路径=目录

/

.

后缀;

//需要上传到同视频点播的本地视频文件的完整路径,需要包含文件扩展名

字符串VOD=

字符串文件URL=

尝试{

//初始化同视频点播客户端并获取上传地址和凭证

DefaultAcsClient VOD client=VOD util。init VOD客户端(accessKeyId,accessKeySecret);

createuploadvideo response createuploadvideo response=VOD util。createuploadvideo(VOD客户端,路径);

//执行成功会返回视频身份证,上传地址和上传授权

VOD=createuploadvideosresponse。getvideoid();

JSON对象上传auth=JSON对象。解析对象(

base64。解码base 64(createuploadvideoresponse。getuploadauth()),JSON对象。类);

JSON对象上传地址=JSON对象。解析对象(

base64。解码base 64(createuploadvideosresponse。getuploadaddress()),JSON对象。类);

//使用上传授权和上传地址初始化战略情报局客户端

OSS客户端OSS客户端=vodutil。initossclient(上传授权,上传地址);

//上传文件,注意是同步上传会阻塞等待,耗时与文件大小和网络上行带宽有关

如果(碎片!=null) {

VOD util。uploadlocalfile(OSS客户端,uploadAddress,shard。getinputstream());

}

System.out.println(上传视频成功,VOD:‘VOD);

getmezzanineinforresponse=VOD util。getmezzanineinforresponse(视频点播客户端,VOD);

System.out.println(获取视频信息响应= JSON。tojsonstring(response));

fileUrl=response.getMezzanine().getFileURL();

OSS客户端。关闭();

} catch(异常e) {

System.out.println(上传视频失败,错误消息: e . get localized message());

}

fileDto.setPath(路径);

fileDto.setVod(视频点播);

文件服务。保存(filedo);

ResponseDtoFileDto responseDto=new responseDto();

文件dto。设置路径(文件URL);

响应dto。设置内容(文件dto);

返回responseDto

}

@ request mapping(value=/get-auth/{ VOD } ,method=RequestMethod .获取)

公共响应的字符串获取验证(@ path变量字符串VOD){

LOG.info(获取播放授权开始);

response dto string response dto=new response dto();

DefaultAcsClient client=vodutil。initvodclient(accessKeyId,accessKeySecret);

GetVideoPlayAuthResponse响应;

尝试{

响应=VOD util。getvideoplayauthresponse(客户端,VOD);

字符串播放auth=response。getplayauth();

//播放凭证

LOG.info(授权码={} ,play auth);

响应dto。设置内容(play auth);

//VideoMeta信息

LOG.info(VideoMeta信息={} ,response.getVideoMeta().getTitle());

} catch(异常e) {

系统。出去。print( error message= e . get localized message());

}

LOG.info(获取播放授权结束);

返回responseDto

}

}

方法:{

播放Url(url) {

让这个=这个

console.log(开始播放:,网址);

//如果已经有播放器了就将播放器删除

if (_this.aliPlayer) {

_ this.aliPlayer=null

$(# _this.playerId -player ).移除();

}

//初始化播放器

$(# _this.playerId).追加( div class= prism-player id= _ this。playerid -player /div );

_this.aliPlayer=new Aliplayer({

id: _this.playerId -player ,

宽度:"100%",

自动播放:没错,

//支持播放地址播放,此播放优先级最高

来源:网址,

封面: http://利弗莫尔-img。中国青岛OSS-。阿里云。com/logo。巴布亚新几内亚

},函数(播放器){

console.log(播放器创建好了)

})

},

播放视频点播(视频点播){

让这个=这个

正在加载。show();

_这个Ajax。获取(过程。环境。vue _ APP _ SERVER /file/admin/get-auth/ VOD).然后((响应)={

正在加载。hide();

let resp=response.data

如果(成功){

//如果已经有播放器了,则将播放器差异删除

if (_this.aliPlayer) {

_ this.aliPlayer=null

$(# _this.playerId -player ).移除();

}

//初始化播放器

$(# _this.playerId).追加( div class= prism-player id= _ this。playerid -player /div );

_this.aliPlayer=new Aliplayer({

id: _this.playerId -player ,

宽度:"100%",

自动播放:假,

视频点播,

playauth: resp.content,

封面: http://liveroom-img . OSS-cn-Qingdao . aliyuncs . com/logo . png ,

encryptType: 1,//当播放私有加密流时需要设置。

},函数(播放器){

console.log(播放器创建好了。)

});

}否则{

Toast.warning(播放错误。)

}

});

}

},

上述的前端代码只是一个例子,播放视频调用的是阿里的播放器。

到此这篇关于跳羚阿里云战略情报局实现在线视频播放的示例的文章就介绍到这了,更多相关跳羚阿里云战略情报局在线视频内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

SpringBoot+阿里云OSS实现在线视频播放的示例