阿里云视频点播微服务(三)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 阿里云视频点播微服务

3.3.2 定时添加


image.png

packagecom.czxy.zx.vod.schedule;
importcom.czxy.zx.vod.service.VodTemplateService;
importcom.czxy.zx.vod.utils.VideoUtils;
importcom.czxy.zx.vod.utils.VodTemplate;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.scheduling.annotation.Scheduled;
importorg.springframework.stereotype.Component;
importjavax.annotation.Resource;
importjava.util.List;
/*** @author 桐叔* @email liangtong@itcast.cn*/@ComponentpublicclassTemplateSchedule {
@ResourceprivateVideoUtilsvideoUtils;
@ResourceprivateVodTemplateServicevodTemplateService;
privateLoggerLOGGER=LoggerFactory.getLogger(TemplateSchedule.class);
/*** 每月1号零点更新*/@Scheduled(cron="0 0 0 1 * ?")
publicvoidhandlerTemplate() {
// 从阿里云获得所有的转码模板List<VodTemplate>transcodeList=videoUtils.getTranscodeList();
if(LOGGER.isInfoEnabled()) {
LOGGER.info("处理:"+transcodeList.size());
        }
// 保存数据for (VodTemplatevodTemplate : transcodeList) {
// 查询VodTemplatefindTemplate=vodTemplateService.getById(vodTemplate.getTemplateId());
if(findTemplate==null) {
vodTemplateService.save(vodTemplate);
if(LOGGER.isInfoEnabled()) {
LOGGER.info("添加:"+vodTemplate.getTemplateId());
                }
            } else {
// TODO 更新            }
        }
    }
}

3.3.3 查询所有转码模板


image.png

image.png

image.png

packagecom.czxy.zx.vod.controller;
importcom.czxy.zx.vo.BaseResult;
importcom.czxy.zx.vod.service.VodCategoryService;
importcom.czxy.zx.vod.service.VodTemplateService;
importcom.czxy.zx.vod.utils.VodCategory;
importcom.czxy.zx.vod.utils.VodTemplate;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importjavax.annotation.Resource;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
/*** @author 桐叔* @email liangtong@itcast.cn*/@RestController@RequestMapping("/vodtemplate")
publicclassVodTemplateController {
@ResourceprivateVodTemplateServicevodTemplateService;
@GetMappingpublicBaseResultfindAll() {
//1 查询所有List<VodTemplate>list=vodTemplateService.list();
//3 返回returnBaseResult.ok("查询成功", list);
    }
}

3.4 整合分类和转码模板


3.4.1 需求


  • 级联菜单支持选择任意项的功能

image.png

  • 转码模板,查询结果为“NoTranscode”,显示处理成“无加密”

3.4.2 ajax操作


  • 编写ajax

image.png

importaxiosfrom'@/utils/request'// 查询所有vod分类exportfunctionfindAllVodCate() {
returnaxios.get('/vod-service/vodcategory');
}
// 保存课程exportfunctionfindAllvodTemp(courseVo) {
returnaxios.get('/vod-service/vodtemplate');
}

image.png

import { findAllVodCate, findAllvodTemp } from '@/api/edu/vod'

调用ajax:编写函数声明变量data() {
return {
vodCategoryList: [],
vodTemplateList: [],
    }
}
编写函数asyncfindAllVodCategory() {
let { data } =awaitfindAllVodCate()
this.vodCategoryList=data    },
asyncfindAllvodTemplate() {
let { data } =awaitfindAllvodTemp()
this.vodTemplateList=data    }

image.png

asyncnextChapter() {
// 保存let { data,message } =awaitsaveCourse(this.course)
debuggerthis.$message.success(message)
// 保存idthis.course.id=datathis.active=2// 查询所有章节this.findAllChapter()
// 查询vod分类this.findAllVodCategory()
// 查询vod转码模板this.findAllvodTemplate()
    },

3.4.3 数据展示


  • 声明变量
data() {
return {
vodCategoryProps: {     // vod分类与级联选择对应关系value: 'cateId',
label: 'cateName',
checkStrictly: true      },
vodVideo: {           // vod数据封装对象      }
    }
}
展示数据<el-form-itemlabel="上传视频"label-width="80px"><!--分类级联--><el-row><el-col :span="4"style="text-align:right">分类:</el-col><el-col :span="20"><el-cascaderv-model="vodVideo.categoryId" :options="vodCategoryList" :props="vodCategoryProps"style="width:300px"></el-cascader></el-col></el-row><!--转码模板单选按钮组--><el-row><el-col :span="4"style="text-align:right">转码模板:</el-col><el-col :span="20"><el-radio-group><el-radiov-for="(temp,index) in vodTemplateList" :key="index"v-model="vodVideo.templateId" :label="temp.templateId">            {{temp.name=='NoTranscode'?'无加密' : temp.name}} {{temp.isDefault=='Default'?'(默认)' : ''}}
</el-radio></el-radio-group></el-col></el-row><!--上传视频--><el-row><el-col :span="4"style="text-align:right">选择视频:</el-col><el-col :span="20"><!--上传组件--></el-col></el-row></el-form-item>

3.5 视频上传


3.5.1 需求


image.png

3.5.2 后端实现


  • 上传视频,并返回视频信息
  • 问题:视频上传成功后,阿里云需要一个处理视频的视频,随意不能实时观看。
  • 采取的方案:先上传,再查询视频信息
packagecom.czxy.zx.vod.controller;
importcom.czxy.zx.vo.BaseResult;
importcom.czxy.zx.vod.utils.VideoUtils;
importcom.czxy.zx.vod.utils.VodVideoInfo;
importorg.springframework.web.bind.annotation.*;
importorg.springframework.web.multipart.MultipartFile;
importjavax.annotation.Resource;
/*** @author 桐叔* @email liangtong@itcast.cn*/@RestController@RequestMapping("/vodvideo")
publicclassVodVideoController {
@ResourceprivateVideoUtilsvideoUtils;
/*** 上传视频* @param categoryId* @param templateId* @param file* @return*/@PostMapping("/upload/{categoryId}/{templateId}")
publicBaseResultupload(
@PathVariable("categoryId") LongcategoryId,
@PathVariable("templateId") StringtemplateId,
MultipartFilefile) {
// 1 上传StringvideoId=videoUtils.uploadVideo(categoryId, templateId, file);
returnBaseResult.ok("上传成功", videoId);
    }
/*** 查询视频信息* @param videoId* @return*/@GetMapping("/{videoId}")
publicBaseResultgetInfo(@PathVariable("videoId") StringvideoId) {
// 2 获得商品信息VodVideoInfoplayInfo=videoUtils.getPlayInfo(videoId);
//returnBaseResult.ok("查询成功", playInfo);
    }
}

3.5.3 前端实现


  • 编写ajax

image.png

image.png

编写上传组件<el-col :span="20"><!--上传组件--><el-uploadclass="upload-demo"      :action="uploadUrl"      :before-upload="beforeVideoUpload"      :on-success="videoUploadSuccess"      :file-list="videoFileList"      :limit="1"><el-buttonsize="small"type="primary">点击上传</el-button><divslot="tip"class="el-upload__tip">只能上传视频文件</div></el-upload><el-buttontype="primary"@click="findVodVideoInfo">同步数据</el-button><el-avatarshape="square" :size="50" :src="video.coverURL"></el-avatar><br/>    {{video}}
</el-col>声明变量data() {
return {
videoFileList: [],    // 上传文件列表videoId: '0fc9c1413b334b21b1ea48413c4ab35b',          // 视频id    }
}
声明函数methods() {
beforeVideoUpload() {
if(!this.vodVideo.categoryId) {
this.$message.warning('必须选择分类')
returnfalse      }
if(!this.vodVideo.templateId) {
this.$message.warning('必须选择模板')
returnfalse      }
    },
videoUploadSuccess(response, file, fileList) {
if(response.code==0) {
this.$message.error(response.message)
this.videoFileList= []
return      }
// 成功this.$message.success(response.message)
// 查询详情this.videoId=response.datasetTimeout(async ()=> {
this.findVodVideoInfo()
      } , 1000)
    },
asyncfindVodVideoInfo() {
let { data } =awaitfindVideoInfo(this.videoId)
// 设置视频信息this.video.coverURL=data.coverURLthis.video.videoSourceId=data.playURLthis.video.videoOriginalName=data.titleconsole.info(this.video)
    }
}
动态设置上传路径computed: {
uploadUrl() { // 上传路径// 如果是数组if(Array.isArray(this.vodVideo.categoryId)) {
// 处理id 获取最后一个分类letcategoryId=this.vodVideo.categoryId[this.vodVideo.categoryId.length-1]
// 拼凑上传地址return`${process.env.VUE_APP_BASE_API}/vod-service/vodvideo/upload/${categoryId}/${this.vodVideo.templateId}`      }
return""    }
}
  • 视频上传成功后,保存video信息时异常,video_source_id长度太短

ALTER TABLE edu_video MODIFY COLUMN video_source_id VARCHAR(500)

相关文章
|
14天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 12 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
103 12
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
80 2
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
3月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 09 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
5月前
|
API
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态。
196 20
|
4月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
6月前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 6 月产品动态
阿里云微服务引擎及 API 网关 2024 年 6 月产品动态
167 24
|
5月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 07 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
6月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 06 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要