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

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

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)

相关文章
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
|
17天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 05 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
17天前
|
API
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态。
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
|
5天前
|
NoSQL Java 数据库
优化基于阿里云的微服务架构下的数据库访问性能
在应对大型电商项目中数据库访问性能瓶颈问题时,团队通过阿里云工具分析发现高QPS、慢查询和不合理数据交互是关键。优化措施包括:1) 索引优化,针对慢查询添加或调整索引;2) 开启读写分离,使用RDS读写分离功能和DRDS进行水平拆分;3) 引入Redis缓存热点数据,减少直接数据库访问;4) 服务化数据访问,降低跨服务数据库调用;5) 使用Sentinel进行限流和熔断,保护数据库资源。这些改进显著提升了系统响应速度和用户体验。
|
1月前
|
Dubbo Cloud Native 应用服务中间件
【阿里云云原生专栏】云原生环境下的微服务治理:阿里云 Dubbo 与 Nacos 的深度整合
【5月更文挑战第25天】阿里云Dubbo和Nacos提供微服务治理的强大工具,整合后实现灵活高效的治理。Dubbo是高性能RPC框架,Nacos则负责服务发现和配置管理。整合示例显示,通过Nacos注册中心,服务能便捷注册发现,动态管理配置。简化部署,提升适应性,但也需注意服务稳定性和策略规划。这种整合为云原生环境的微服务架构带来强大支持,未来应用前景广阔。
218 2
|
1月前
|
监控 负载均衡 Java
【阿里云云原生专栏】微服务架构在阿里云云原生平台上的应用实例与优化策略
【5月更文挑战第20天】本文介绍了在阿里云云原生平台实现微服务架构的步骤,包括基于Spring Cloud的Docker化部署、使用ACK部署微服务,以及优化策略:服务发现与负载均衡(借助Istio)和监控日志管理。通过这种方式,企业能提升应用的可扩展性、可维护性和敏捷性。
219 5
|
1月前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态。
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 04 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 03 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。

热门文章

最新文章