日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot+阿里云OSS實現在線視頻播放的示例

瀏覽:151日期:2023-04-05 17:52:26

阿里云 OSS 是一種云存儲技術,你可以理解為云盤,我們的目標是將視頻存儲到云端,然后在前端讀取并播放視頻。

OSS

首先登陸首頁,創建一個存儲桶:https://oss.console.aliyun.com

SpringBoot+阿里云OSS實現在線視頻播放的示例

然后找到讀寫權限:

SpringBoot+阿里云OSS實現在線視頻播放的示例

將讀寫權限設置為公共讀即可:

SpringBoot+阿里云OSS實現在線視頻播放的示例

在 RAM 中新建一個用戶:

SpringBoot+阿里云OSS實現在線視頻播放的示例

為其添加權限,選擇 OSS 的權限:

SpringBoot+阿里云OSS實現在線視頻播放的示例

然后點進去這個用戶,找到 AccessKey:

SpringBoot+阿里云OSS實現在線視頻播放的示例

創建之后記下來 secret ,因為他只出現一次,如果沒記住也沒事,可以重新創建新的 key。

下面開始編寫服務端代碼:

POM

<!-- 阿里云oss --><dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version></dependency>

package com.lsu.file.controller.admin;import com.alibaba.fastjson.JSONObject;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import com.aliyun.oss.model.AppendObjectRequest;import com.aliyun.oss.model.AppendObjectResult;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectRequest;import com.lsu.server.dto.FileDto;import com.lsu.server.dto.ResponseDto;import com.lsu.server.enums.FileUseEnum;import com.lsu.server.service.FileService;import com.lsu.server.util.Base64ToMultipartFile;import com.lsu.server.util.UuidUtil;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;import java.io.ByteArrayInputStream;/** * @author wsuo */@RestController@RequestMapping('/admin')public class OssController { private static final Logger LOG = LoggerFactory.getLogger(FileController.class); @Value('${oss.accessKeyId}') private String accessKeyId; @Value('${oss.accessKeySecret}') private String accessKeySecret; @Value('${oss.endpoint}') private String endpoint; @Value('${oss.bucket}') private String bucket; @Value('${oss.domain}') private String ossDomain; public static final String BUSINESS_NAME = 'OSS文件上傳'; @Resource private FileService fileService; @PostMapping('/oss-append') public ResponseDto<FileDto> fileUpload(@RequestBody FileDto fileDto) throws Exception { LOG.info('上傳文件開始'); String use = fileDto.getUse(); String key = fileDto.getKey(); String suffix = fileDto.getSuffix(); Integer shardIndex = fileDto.getShardIndex(); Integer shardSize = fileDto.getShardSize(); String shardBase64 = fileDto.getShard(); MultipartFile shard = Base64ToMultipartFile.base64ToMultipart(shardBase64); FileUseEnum useEnum = FileUseEnum.getByCode(use); String dir = useEnum.name().toLowerCase(); String path = dir +'/' +key +'.' +suffix; // 創建OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); ObjectMetadata meta = new ObjectMetadata(); // 指定上傳的內容類型。 meta.setContentType('text/plain'); // 通過AppendObjectRequest設置多個參數。 AppendObjectRequest appendObjectRequest = new AppendObjectRequest(bucket, path, new ByteArrayInputStream(shard.getBytes()), meta); appendObjectRequest.setPosition((long) ((shardIndex - 1) * shardSize)); AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest); // 文件的64位CRC值。此值根據ECMA-182標準計算得出。 System.out.println(appendObjectResult.getObjectCRC()); System.out.println(JSONObject.toJSONString(appendObjectResult)); ossClient.shutdown(); LOG.info('保存文件記錄開始'); fileDto.setPath(path); fileService.save(fileDto); ResponseDto<FileDto> responseDto = new ResponseDto<>(); fileDto.setPath(ossDomain + path); responseDto.setContent(fileDto); return responseDto; } @PostMapping('/oss-simple') public ResponseDto<FileDto> fileUpload(@RequestParam MultipartFile file, String use) throws Exception { LOG.info('上傳文件開始'); FileUseEnum useEnum = FileUseEnum.getByCode(use); String key = UuidUtil.getShortUuid(); String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase(); String dir = useEnum.name().toLowerCase(); String path = dir + '/' + key + '.' + suffix; // 創建OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, path, new ByteArrayInputStream(file.getBytes())); ossClient.putObject(putObjectRequest); ResponseDto<FileDto> responseDto = new ResponseDto<>(); FileDto fileDto = new FileDto(); fileDto.setPath(ossDomain + path); responseDto.setContent(fileDto); return responseDto; }}

這部分內容可以參考阿里云的幫助手冊:https://help.aliyun.com/document_detail/32011.html?spm=a2c4g.11174283.6.915.443b7da2mfhbKq

上面寫的是兩個接口:

追加上傳:/oss-append 簡單上傳:/oss-simple

注意這里的參數都已經在 yml 文件中定義了:

SpringBoot+阿里云OSS實現在線視頻播放的示例

上面的 KeyId 和 KeySecret 就是之前在創建用戶時給的那兩個,填上就行了。

在前端我們就可以發送請求獲取數據,注意這里的對象是我自定義的,大家可以根據項目需求自行設置。

_this.$ajax.post(process.env.VUE_APP_SERVER + ’/file/admin/oss-simple’, formData).then(response => { Loading.hide(); let resp = response.data; _this.afterUpload(resp); // 清空原來控件中的值 $('#' + _this.inputId + '-input').val('');})

視頻點播

VOD 是另一種視頻存儲的形式,它的功能更豐。阿里云視頻點播(VOD)是集音視頻上傳、自動化轉碼處理、媒體資源管理、分發加速于一體的全鏈路音視頻點播服務。

我們同樣需要一個 VOD 的用戶,給它賦予 VOD 的權限:

SpringBoot+阿里云OSS實現在線視頻播放的示例

SDK 的使用可以參考文檔:https://help.aliyun.com/document_detail/61063.html?spm=a2c4g.11186623.6.921.418f192bTDCIJN

我們可以在轉碼組設置自己的模板,然后通過 ID 在代碼中使用:

SpringBoot+阿里云OSS實現在線視頻播放的示例

上傳視頻比較簡單,和 OSS 很像,但是播放視頻要多一個條件,在獲取播放鏈接之前要先取得權限認證,所以下面單獨寫了一個 /get-auth/{vod} 接口,其中的參數就是 vod 的 ID,這個 ID 在我們上傳視頻之后會作為返回值返回的。

package com.lsu.file.controller.admin;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.aliyun.oss.OSSClient;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;import com.aliyuncs.vod.model.v20170321.GetMezzanineInfoResponse;import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthResponse;import com.lsu.server.dto.FileDto;import com.lsu.server.dto.ResponseDto;import com.lsu.server.enums.FileUseEnum;import com.lsu.server.service.FileService;import com.lsu.server.util.Base64ToMultipartFile;import com.lsu.server.util.VodUtil;import org.apache.commons.codec.binary.Base64;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;/** * @author wsuo */@RestController@RequestMapping('/admin')public class VodController { private static final Logger LOG = LoggerFactory.getLogger(FileController.class); @Value('${vod.accessKeyId}') private String accessKeyId; @Value('${vod.accessKeySecret}') private String accessKeySecret; public static final String BUSINESS_NAME = 'VOD視頻上傳'; @Resource private FileService fileService; @PostMapping('/vod') public ResponseDto<FileDto> fileUpload(@RequestBody FileDto fileDto) throws Exception { String use = fileDto.getUse(); String key = fileDto.getKey(); String suffix = fileDto.getSuffix(); Integer shardIndex = fileDto.getShardIndex(); Integer shardSize = fileDto.getShardSize(); String shardBase64 = fileDto.getShard(); MultipartFile shard = Base64ToMultipartFile.base64ToMultipart(shardBase64); FileUseEnum useEnum = FileUseEnum.getByCode(use); String dir = useEnum.name().toLowerCase(); String path = dir +'/' +key +'.' +suffix; //需要上傳到VOD的本地視頻文件的完整路徑,需要包含文件擴展名 String vod = ''; String fileUrl = ''; try { // 初始化VOD客戶端并獲取上傳地址和憑證 DefaultAcsClient vodClient = VodUtil.initVodClient(accessKeyId, accessKeySecret); CreateUploadVideoResponse createUploadVideoResponse = VodUtil.createUploadVideo(vodClient, path); // 執行成功會返回VideoId、UploadAddress和UploadAuth vod = createUploadVideoResponse.getVideoId(); JSONObject uploadAuth = JSONObject.parseObject( Base64.decodeBase64(createUploadVideoResponse.getUploadAuth()), JSONObject.class); JSONObject uploadAddress = JSONObject.parseObject( Base64.decodeBase64(createUploadVideoResponse.getUploadAddress()), JSONObject.class); // 使用UploadAuth和UploadAddress初始化OSS客戶端 OSSClient ossClient = VodUtil.initOssClient(uploadAuth, uploadAddress); // 上傳文件,注意是同步上傳會阻塞等待,耗時與文件大小和網絡上行帶寬有關 if (shard != null) {VodUtil.uploadLocalFile(ossClient, uploadAddress, shard.getInputStream()); } System.out.println('上傳視頻成功, vod : ' + vod); GetMezzanineInfoResponse response = VodUtil.getMezzanineInfoResponse(vodClient, vod); System.out.println('獲取視頻信息 response = ' + JSON.toJSONString(response)); fileUrl = response.getMezzanine().getFileURL(); ossClient.shutdown(); } catch (Exception e) { System.out.println('上傳視頻失敗, ErrorMessage : ' + e.getLocalizedMessage()); } fileDto.setPath(path); fileDto.setVod(vod); fileService.save(fileDto); ResponseDto<FileDto> responseDto = new ResponseDto<>(); fileDto.setPath(fileUrl); responseDto.setContent(fileDto); return responseDto; } @RequestMapping(value = '/get-auth/{vod}', method = RequestMethod.GET) public ResponseDto<String> getAuth(@PathVariable String vod) { LOG.info('獲取播放授權開始'); ResponseDto<String> responseDto = new ResponseDto<>(); DefaultAcsClient client = VodUtil.initVodClient(accessKeyId, accessKeySecret); GetVideoPlayAuthResponse response; try { response = VodUtil.getVideoPlayAuthResponse(client, vod); String playAuth = response.getPlayAuth(); //播放憑證 LOG.info('授權碼 = {}', playAuth); responseDto.setContent(playAuth); //VideoMeta信息 LOG.info('VideoMeta信息 = {}', response.getVideoMeta().getTitle()); } catch (Exception e) { System.out.print('ErrorMessage = ' + e.getLocalizedMessage()); } LOG.info('獲取播放授權結束'); return responseDto; }}

methods: { playUrl(url) { let _this = this; console.log('開始播放:', url); // 如果已經有播放器了 就將播放器刪除 if (_this.aliPlayer) { _this.aliPlayer = null; $('#' + _this.playerId + ’-player’).remove(); } // 初始化播放器 $('#' + _this.playerId).append('<div id='' + _this.playerId + '-player'></div>'); _this.aliPlayer = new Aliplayer({ id: _this.playerId + ’-player’, width: ’100%’, autoplay: true, //支持播放地址播放,此播放優先級最高 source: url, cover: ’http://liveroom-img.oss-cn-qingdao.aliyuncs.com/logo.png’ }, function (player) { console.log('播放器創建好了') }) }, playVod(vod) { let _this = this; Loading.show(); _this.$ajax.get(process.env.VUE_APP_SERVER + ’/file/admin/get-auth/’ + vod).then((response) => { Loading.hide(); let resp = response.data; if (resp.success) { //如果已經有播放器了,則將播放器div刪除 if (_this.aliPlayer) { _this.aliPlayer = null; $('#' + _this.playerId + ’-player’).remove(); } // 初始化播放器 $('#' + _this.playerId).append('<div id='' + _this.playerId + '-player'></div>'); _this.aliPlayer = new Aliplayer({ id: _this.playerId + ’-player’, width: ’100%’, autoplay: false, vid: vod, playauth: resp.content, cover: ’http://liveroom-img.oss-cn-qingdao.aliyuncs.com/logo.png’, encryptType: 1, //當播放私有加密流時需要設置。 }, function (player) { console.log(’播放器創建好了。’) }); } else { Toast.warning(’播放錯誤。’) } }); }},

上述的前端代碼只是一個例子,playVod 調用的是阿里的播放器。

到此這篇關于SpringBoot+阿里云OSS實現在線視頻播放的示例的文章就介紹到這了,更多相關SpringBoot阿里云OSS在線視頻內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲综合图色| 欧美 日韩 国产精品免费观看| 夜久久久久久| 伊人精品视频| 99国产精品| 一区二区三区四区日韩| 亚洲精品进入| 日韩精品免费一区二区夜夜嗨| 99在线|亚洲一区二区| 99精品在线观看| 亚洲二区在线| 国产一区二区高清| 最新国产精品视频| 欧美日一区二区在线观看| 国产美女久久| 成人亚洲一区| 国内精品福利| 亚洲一区二区三区免费在线观看| 午夜在线视频观看日韩17c| 亚洲一区二区三区四区电影| 91精品麻豆| 国产suv精品一区二区四区视频| 亚洲黄色中文字幕| 黄色免费成人| 久久国产精品亚洲77777| 中文字幕一区二区三区日韩精品 | 在线手机中文字幕| 亚洲91视频| 麻豆精品91| 国产精品密蕾丝视频下载| 国产+成+人+亚洲欧洲在线| 中文在线а√在线8| 欧美 日韩 国产精品免费观看| 一区二区三区四区在线观看国产日韩 | 精品九九久久| 久久麻豆精品| 日韩一区中文| 国产一区2区| 91久久亚洲| 国产毛片精品久久| 精品日韩毛片| 国产亚洲精品美女久久久久久久久久| 日韩1区2区| 美女国产精品| 国产高清日韩| 极品日韩av| 日本色综合中文字幕| 在线精品亚洲欧美日韩国产| 狠狠干成人综合网| 国产日韩一区二区三免费高清| sm捆绑调教国产免费网站在线观看| 五月天久久777| 7777精品| 香蕉久久99| 国产欧美一区| 日韩黄色av| 久久高清精品| 国产欧美亚洲精品a| 亚洲国内精品| 国产剧情一区| 黄色不卡一区| 久久精品网址| 中文视频一区| 成人va天堂| 国产欧美在线| 国产亚洲高清视频| 电影91久久久| 日韩黄色在线观看| 五月天激情综合网| 久久久久黄色| 伊人www22综合色| 久久久久99| 国产精品a久久久久| 亚洲免费影院| 中文字幕在线视频网站| 欧美一区二区三区久久| 国产综合激情| 精品视频网站| 日韩中出av| 欧美日韩国产综合网| 成人在线超碰| 国产一卡不卡| 午夜亚洲精品| 欧美aa一级| 免费日韩成人| 日本一区二区三区视频在线看| 九色精品91| 91欧美国产| 国产精品一页| 亚洲欧洲专区| 亚洲精品a级片| 成人日韩在线观看| 久久亚洲黄色| 国产麻豆精品久久| 免费不卡在线视频| 一区免费在线| 久久久蜜桃一区二区人| 麻豆精品在线视频| 日韩精品一区二区三区免费视频 | 福利在线免费视频| 国产极品模特精品一二| 日韩国产成人精品| 蜜桃av一区二区| 999国产精品视频| 精品91福利视频| 国产欧美成人| 视频在线在亚洲| 亚洲欧美日韩国产| 亚洲免费观看| 亚洲精品午夜av福利久久蜜桃| 在线天堂中文资源最新版| 精品一区二区男人吃奶| 欧美激情日韩| 国产精品蜜月aⅴ在线| 欧美日本久久| 亚洲精选成人| 日韩精品视频在线看| 婷婷成人av| 亚洲2区在线| 日韩视频一二区| 日韩高清在线一区| 青草av.久久免费一区| 日韩精品视频网站| 日韩av网站在线免费观看| 日本va欧美va欧美va精品| 91av一区| 欧美1区二区| 国产一区二区三区精品在线观看| 精品视频高潮| 亚洲国产福利| 99久久99久久精品国产片果冰 | 91精品一区二区三区综合| 亚洲网站视频| 99国产一区| 色狠狠一区二区三区| 午夜性色一区二区三区免费视频| 日韩高清一级| 国产精品1区| 国产精选在线| 久久久噜噜噜| 亚洲一区区二区| 亚洲狼人精品一区二区三区| 日本精品国产| 国产成年精品| 亚洲一级特黄| 蜜桃av一区二区在线观看| 亚洲欧美网站在线观看| 欧美日韩精品一区二区三区在线观看| 美女视频免费精品| 亚洲人成在线网站| 中文亚洲欧美| 青青草国产成人99久久| 久久精品一区二区国产| 日本久久成人网| 视频在线观看一区| 国产欧美日韩视频在线| 国产拍在线视频| 99视频一区| 国产精品久久亚洲不卡| 亚洲伦乱视频| 蜜桃一区二区三区在线观看| 久久国产人妖系列| 成人美女视频| 免费久久精品视频| 久久成人高清| 婷婷色综合网| 欧美亚洲色图校园春色| 新版的欧美在线视频| 先锋影音久久久| 麻豆精品视频在线观看| 一本一道久久a久久精品蜜桃| 日本色综合中文字幕| 欧美三级网址| 日韩**一区毛片| 日韩久久一区二区三区| 综合亚洲视频| 精品国产欧美日韩一区二区三区| 欧美~级网站不卡| 欧美亚洲福利| 精品欧美久久| 国产亚洲一区二区三区啪| 日韩大片免费观看| 亚洲影视一区二区三区| 色爱综合网欧美| 亚洲字幕久久| 电影亚洲精品噜噜在线观看 | 日韩高清在线一区| 99久久99视频只有精品| 国产一区 二区| 久久久久久久久99精品大| 日韩一区二区三区在线看| 日本少妇一区| 国产日产精品_国产精品毛片| 亚洲福利专区| 麻豆一区二区99久久久久| 国产亚洲网站| 98精品视频| 91精品国产自产观看在线 | 日韩福利视频网| 亚洲成人一区|