尚硅谷在线教育视频点播

文章目录

  • 1. 开通阿里云视频点播服务
  • 2.阿里云点播SDK实现
    • 2.1上传视频到阿里云视频点播服务
    • 2.2整合阿里云上传视频的接口
  • 3. 课程信息的完善(为每个课程的小节添加视频)
    • 3.1 添加上传视频
    • 3.2删除视频信息
      • 3.2.1后台
      • 3.2.2前端

1. 开通阿里云视频点播服务

  1. 选择视频服务下面的视频点播
    在这里插入图片描述
  2. 开通视频点播服务,选择按照流量计费
  3. 开通服务并进入控制台
    在这里插入图片描述
    查看文档&SDK有以下几个名称,下面进行解释
    服务端:后端接口
    客户端:浏览器、安卓、iOS
    API:阿里云提供固定的地址,只需要调用这个固定地址,向这个地址传参数,实现功能
    SDK:SDK对api进行封装,方便使用

2.阿里云点播SDK实现

将实现的功能:1. 获取视频播放地址(根据id获得) 2. 获得视频播放凭证(根据视频的id获取)3. 上传视频到阿里云视频点播服务
注意:因为上传视频时可以进行加密,而加密之后使用加密地址是不能进行播放的,在数据库中存储的不是地址而是视频的id

2.1上传视频到阿里云视频点播服务

  1. 在service模块下创建子模块service_vdo引入相关依赖
<dependencies><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId></dependency>
<!--        <dependency>-->
<!--            <groupId>com.aliyun</groupId>-->
<!--            <artifactId>aliyun-sdk-vod-upload</artifactId>-->
<!--            <version>1.4.12</version>-->
<!--        </dependency>--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>org.json</groupId><artifactId>json</artifactId></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
  1. 初始化操作,创建InitVideo对象
public class InitVideo {public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {String regionId = "cn-shanghai";  // 点播服务接入区域DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);return client;}
}
  1. 测试通过视频id获取视频地址
   public static void main(String[] args)  throws Exception{//根据视频id获取视频播放地址//创建初始化对象/*** @param accessKeyId* @param accessKeySecret* */DefaultAcsClient client = InitVideo.initVodClient("LTAI5tSiC9UUHdWQ7CjjRBVK", "RxUwtLh8NH2U1rDzVh4WTtMXHA3dk5");//获取视频地址的request和responseGetPlayInfoRequest request = new GetPlayInfoRequest();GetPlayInfoResponse response = new GetPlayInfoResponse();//向request中设置视频idrequest.setVideoId("b13d3f216fa84c6390bee467c9896c69");//调用初始化对象里面的方法,调用request获取数据response= client.getAcsResponse(request);List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();for(GetPlayInfoResponse.PlayInfo playInfo:playInfoList){System.out.println("url"+playInfo.getPlayURL());}//base信息System.out.println("base"+response.getVideoBase().getTitle());}
  1. 测试根据视频id获取视频凭证
   //根据id获取视频凭证@Testvoid getAuth() throws Exception{//创建初始化对象/*** @param accessKeyId* @param accessKeySecret* */DefaultAcsClient client = InitVideo.initVodClient("LTAI5tSiC9UUHdWQ7CjjRBVK", "RxUwtLh8NH2U1rDzVh4WTtMXHA3dk5");//获取视频凭证的request和responseGetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();//向request设置视频idrequest.setVideoId("b13d3f216fa84c6390bee467c9896c69");//调用初始化的方法得到凭证response = client.getAcsResponse(request);System.out.println("playAuth"+ response.getPlayAuth());}
  1. 本地视频上传
/*** 本地文件上传* @param accessKeyId* @param accessKeySecret* @param title 上传文件后的命名* @param fileName  本地文件的路径和名称*/private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);/* 可指定分片上传时每个分片的大小,默认为2M字节 */request.setPartSize(2 * 1024 * 1024L);/* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/request.setTaskNum(1);/* 是否开启断点续传, 默认断点续传功能关闭。当网络不稳定或者程序崩溃时,再次发起相同上传请求,可以继续未完成的上传任务,适用于超时3000秒仍不能上传完成的大文件。注意: 断点续传开启后,会在上传过程中将上传位置写入本地磁盘文件,影响文件上传速度,请您根据实际情况选择是否开启*///request.setEnableCheckpoint(false);/* OSS慢请求日志打印超时时间,是指每个分片上传时间超过该阈值时会打印debug日志,如果想屏蔽此日志,请调整该阈值。单位: 毫秒,默认为300000毫秒*///request.setSlowRequestsThreshold(300000L);/* 可指定每个分片慢请求时打印日志的时间阈值,默认为300s*///request.setSlowRequestsThreshold(300000L);/* 是否显示水印(可选),指定模板组ID时,根据模板组配置确定是否显示水印*///request.setIsShowWaterMark(true);/* 自定义消息回调设置(可选),参数说明参考文档 https://help.aliyun.com/document_detail/86952.html#UserData */// request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}");/* 视频分类ID(可选) *///request.setCateId(0);/* 视频标签,多个用逗号分隔(可选) *///request.setTags("标签1,标签2");/* 视频描述(可选) *///request.setDescription("视频描述");/* 封面图片(可选) *///request.setCoverURL("http://cover.sample.com/sample.jpg");/* 模板组ID(可选) *///request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");/* 工作流ID(可选) *///request.setWorkflowId("d4430d07361f0*be1339577859b0177b");/* 存储区域(可选) *///request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");/* 开启默认上传进度回调 *///request.setPrintProgress(false);/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) *///request.setProgressListener(new PutObjectProgressListener());/* 设置您实现的生成STS信息的接口实现类*/// request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());/* 设置应用ID*///request.setAppId("app-1000000");/* 点播服务接入点 *///request.setApiRegionId("cn-shanghai");/* ECS部署区域*/// request.setEcsRegionId("cn-shanghai");UploadVideoImpl uploader = new UploadVideoImpl();UploadVideoResponse response = uploader.uploadVideo(request);System.out.println(response);System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求IDif (response.isSuccess()) {System.out.print("VideoId=" + response.getVideoId() + "\n");} else {/* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */System.out.print("VideoId=" + response.getVideoId() + "\n");System.out.print("ErrorCode=" + response.getCode() + "\n");System.out.print("ErrorMessage=" + response.getMessage() + "\n");}}

2.2整合阿里云上传视频的接口

  1. application.properties
# 服务端口
server.port=8003
# 服务名
spring.application.name=service-vod# 环境设置:dev、test、prod
spring.profiles.active=dev#阿里云 vod
#不同的服务器,地址不同
aliyun.vod.file.keyid=your accessKeyId
aliyun.vod.file.keysecret=your accessKeySecret
# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB
  1. 主启动
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class ServiceVdoApplication {public static void main(String[] args) {SpringApplication.run(ServiceVdoApplication.class, args);}}
  1. 创建常量类
@Component
public class VideoUtils implements InitializingBean {@Value("${aliyun.vod.file.keyid}")private String keyId;@Value("${aliyun.vod.file.keysecret}")private String keySecret;public static  String ACCESS_KEY_ID;public static String ACCESS_KEY_SECRET;@Overridepublic void afterPropertiesSet() throws Exception {ACCESS_KEY_ID=keyId;ACCESS_KEY_SECRET=keySecret;}
}
  1. controller
@RestController
@RequestMapping("/eduvod/video")
@CrossOrigin
@Api(tags = "视频相关的接口")
public class VodController {@Autowiredprivate VodService vodService;//上传视频到阿里云@ApiOperation("上传视频到阿里云")@PostMapping("/uploadVideo")public Res uploadVideo(MultipartFile file){//返回上传视频idString id =vodService.uploadVideo(file);HashMap<String, Object> hashMap = new HashMap<>();hashMap.put("id",id);return Res.ok().data(hashMap);}}
  1. service
@Service
public class VodServiceImpl implements VodService {@Overridepublic String uploadVideo(MultipartFile file) {try {//title 上传后显示的名称String title = "";//filename 上传视频的原始名称String fileName = file.getOriginalFilename();title=fileName.substring(0,fileName.lastIndexOf("."));//inputStream 上传流InputStream inputStream = file.getInputStream();UploadStreamRequest request = new UploadStreamRequest(VideoUtils.ACCESS_KEY_ID, VideoUtils.ACCESS_KEY_SECRET, title, fileName, inputStream);UploadVideoImpl uploader = new UploadVideoImpl();UploadStreamResponse response = uploader.uploadStream(request);System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求IDString videoId = null;if (response.isSuccess()) {videoId = response.getVideoId();} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因videoId = response.getVideoId();}return videoId;}catch (Exception e){e.printStackTrace();return null;}}
}

3. 课程信息的完善(为每个课程的小节添加视频)

3.1 添加上传视频

在edu\cousre\chapter.vue中添加下面的前端信息

<el-form-item label="上传视频"><el-upload:on-success="handleVodUploadSuccess" :on-remove="handleVodRemove":before-remove="beforeVodRemove":on-exceed="handleUploadExceed":file-list="fileList":action="BASE_API+'/eduvideo/video/uploadVideo'":limit="1"class="upload-demo"><el-button size="small" type="primary">上传视频</el-button><el-tooltip placement="right-end"><div slot="content">最大支持1G,<br>支持3GP、ASF、AVI、DAT、DV、FLV、F4V、<br>GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、<br>MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、<br>SWF、TS、VOB、WMV、WEBM 等视频格式上传</div><i class="el-icon-question"/></el-tooltip></el-upload>
</el-form-item>

并在vue的data中添加上传文件列表和接口API地址
在这里插入图片描述

  return {saveBtnDisabled: false, // 保存按钮是否禁用chapterVideoList:[],courseId:' ',dialogChapterFormVisible:false,//章节弹框dialogVideoFormVisible:false,//小节弹框fileList:[],//上传文件列表BASE_API:process.env.BASE_API,//接口API地址// BASE_API:'"localhost:8003"',chapter:{//章节信息title:'',sort:0,ju:0},video:{title: '',sort: 0,free: 0,videoSourceId: '',ju:0,id:''}}}

视频上传成功是调用的方法

 //上传视频成功调用的方法handleVodUploadSuccess(response,file,fileList){this.video.videoSourceId=response.data.videoId},handleUploadExceed(){this.$message.warning('上传视频之前,删除已上传的视频')},

3.2删除视频信息

3.2.1后台

  1. 创建一个视频点播工具类
public class InitVideo {public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {String regionId = "cn-shanghai";  // 点播服务接入区域DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);return client;}
}
  1. 在VodController下创建删除视频的接口
  //根据id删除阿里云视频public Res removeVideo(@PathVariable String id){try{//初始化对象DefaultAcsClient client = InitVideo.initVodClient(VideoUtils.ACCESS_KEY_ID, VideoUtils.ACCESS_KEY_SECRET);//创建删除视频request对象DeleteVideoRequest request = new DeleteVideoRequest();//向request设置视频idrequest.setVideoIds(id);//调用初始化对象的方法实现删除client.getAcsResponse(request);return Res.ok();}catch (Exception e){e.printStackTrace();throw new GuliException(20001,"视频删除失败");}}

3.2.2前端

  1. 定义api接口
    在api/edu/video.js中加上路由信息
  //通过id删除视频信息deleteAliyunVideo(id){return request({url:"/eduvideo/video/deleteVideo/"+id,method:"delete"})}
  1. 页面调用api
    在edu/course/chapter.vue中加入调用方法
    在这里插入图片描述
  //确定调用的方法handleVodRemove(file,fileList){//调用删除视频的方法video1.deleteAliyunVideo(this.video.videoSourceId).then(response=>{this.$message({type:"success",message:"删除视频成功"});//把文件列表情况this.fileList=[]})},

chapter.vue的总体代码

<template><div class="app-container"><h2 style="text-align: center;">发布新课程</h2><el-steps :active="2" process-status="wait" align-center style="margin-bottom: 40px;"><el-step title="填写课程基本信息"/><el-step title="创建课程大纲"/><el-step title="提交审核"/></el-steps>
<el-button type="text" @click="openChapterDiglog()">添加章节</el-button><!-- 章节 -->
<!-- 章节 -->
<ul class="chanpterList"><liv-for="chapter in chapterVideoList":key="chapter.id"><p>{{ chapter.title }}<span class="acts"><el-button type="text" @click="openVideo(chapter.id)">添加课时</el-button><el-button style="" type="text" @click="openEditChapter(chapter.id)">编辑</el-button><el-button type="text" @click="removechapter(chapter.id)">删除</el-button></span></p><!-- 视频 --><ul class="chanpterList videoList"><liv-for="video in chapter.children":key="video.id"><p>{{ video.title }}<span class="acts"><el-button type="text"  @click="openEditVideo(video.id)">编辑</el-button><el-button type="text" @click="removeVideo(video.id)">删除</el-button></span></p></li></ul></li>
</ul>
<div><el-button @click="previous">上一步</el-button><el-button :disabled="saveBtnDisabled" type="primary" @click="next">下一步</el-button>
</div><!-- 添加和修改章节表单 -->
<el-dialog :visible.sync="dialogChapterFormVisible" title="添加章节"><el-form :model="chapter" label-width="120px"><el-form-item label="章节标题"><el-input v-model="chapter.title"/></el-form-item><el-form-item label="章节排序"><el-input-number v-model="chapter.sort" :min="0" controls-position="right"/></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogChapterFormVisible = false">取 消</el-button><el-button type="primary" @click="saveOrUpdate">确 定</el-button></div>
</el-dialog>
<!-- 添加和修改课时表单 -->
<el-dialog :visible.sync="dialogVideoFormVisible" title="添加课时"><el-form :model="video" label-width="120px"><el-form-item label="课时标题"><el-input v-model="video.title"/></el-form-item><el-form-item label="课时排序"><el-input-number v-model="video.sort" :min="0" controls-position="right"/></el-form-item><el-form-item label="是否免费"><el-radio-group v-model="video.free"><el-radio :label="true">免费</el-radio><el-radio :label="false">默认</el-radio></el-radio-group></el-form-item><el-form-item label="上传视频"><el-upload:on-success="handleVodUploadSuccess" :on-remove="handleVodRemove":before-remove="beforeVodRemove":on-exceed="handleUploadExceed":file-list="fileList":action="BASE_API+'/eduvideo/video/uploadVideo'":limit="1"class="upload-demo"><el-button size="small" type="primary">上传视频</el-button><el-tooltip placement="right-end"><div slot="content">最大支持1G,<br>支持3GP、ASF、AVI、DAT、DV、FLV、F4V、<br>GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、<br>MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、<br>SWF、TS、VOB、WMV、WEBM 等视频格式上传</div><i class="el-icon-question"/></el-tooltip></el-upload>
</el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogVideoFormVisible = false">取 消</el-button><el-button :disabled="saveVideoBtnDisabled" type="primary" @click="saveOrUpdateVideo">确 定</el-button></div>
</el-dialog><!-- <el-form label-width="120px"><el-form-item><el-button @click="previous">上一步</el-button><el-button :disabled="saveBtnDisabled" type="primary" @click="next">下一步</el-button></el-form-item></el-form> --></div>
</template>
<script>
import chapter1 from '@/api/edu/chapter.js'
import video1 from '@/api/edu/video.js'
export default {data() {return {saveBtnDisabled: false, // 保存按钮是否禁用chapterVideoList:[],courseId:' ',dialogChapterFormVisible:false,//章节弹框dialogVideoFormVisible:false,//小节弹框fileList:[],//上传文件列表BASE_API:process.env.BASE_API,//接口API地址// BASE_API:'"localhost:8003"',chapter:{//章节信息title:'',sort:0,ju:0},video:{title: '',sort: 0,free: 0,videoSourceId: '',videoOriginalName:'',ju:0,id:''}}},created() {if(this.$route.params && this.$route.params.id){this.courseId = this.$route.params.id//根据id查询所有的章节和小节this.getChapterVideos()}},methods: {//点击X调用的方法beforeVodRemove(){return this.$confirm('确定移除${file.name}?')},//点击确定调用的方法handleVodRemove(file,fileList){//调用删除视频的方法video1.deleteAliyunVideo(this.video.videoSourceId).then(response=>{this.$message({type:"success",message:"删除视频成功"});//把文件列表情况this.fileList=[]//把vide中视频id和视频名称id情况this.video.videoSourceId=''this.video.videoOriginalName=''})},//上传视频成功调用的方法handleVodUploadSuccess(response,file,fileList){this.video.videoSourceId=response.data.videoIdthis.video.videoOriginalName=file.name},handleUploadExceed(){this.$message.warning('上传视频之前,删除已上传的视频')},//==========添加小节的操作=========================openEditVideo(id){//弹框this.dialogVideoFormVisible=true//调用接口video1.getVideoById(id).then(response =>{this.video=response.data.videothis.video.ju=1})// this.dialogChapterFormVisible=true},//添加小节的弹框openVideo(chapterId){this.video.title='',this.video.sort=0,this.video.free==0,this.video.videoSourceId=''//弹框this.dialogVideoFormVisible=true//设置章节idthis.video.chapterId=chapterId},//添加小节信息addVideo(){//设置课程idthis.video.courseId=this.courseIdthis.video.id=""video1.addVideo(this.video).then(response=>{//关闭弹框this.dialogVideoFormVisible=false//提示信息this.$message({type:"success",message:"添加小节成功"});this.getChapterVideos() })this.getChapterVideos()},updateVideo(){video1.updateVideo(this.video).then(response=>{//关闭弹框this.dialogVideoFormVisible=false//提示信息this.$message({type:"success",message:"修改小节成功"});this.getChapterVideos() })},saveOrUpdateVideo(){if(this.video.ju==1)this.updateVideo()elsethis.addVideo()this.video.ju=0},//删除小节removeVideo(id) {this.$confirm('此操作将永久删除该小节的记录, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => { //点击确定执行then方法//调用删除方法video1.deleteVideo(id).then(response=>{  //删除成功this.$message({type: 'success',message: '删除成功!'});this.getChapterVideos()})//回到列表页面this.getChapterVideos()})},    //==========添加章节的操作====================//修改章节弹框数据回显openEditChapter(chapterId){//弹框this.dialogChapterFormVisible=true//调用接口chapter1.getChapterById(chapterId).then(response=>{this.chapter=response.data.chapterthis.chapter.ju=1})},//弹出添加章节openChapterDiglog(){//弹框this.dialogChapterFormVisible=true//表单数据清空this.chapter.title=' 'this.chapter.sort=0this.chapter.ju=2this.chapter.id=' '},saveOrUpdate(){if(this.chapter.ju==2){this.addChapter()}else{this.updateChapter()}},//修改章节信息updateChapter(){chapter1.updateChapter(this.chapter).then(response=>{//关闭弹框this.dialogChapterFormVisible=false//提示this.$message({type: "success",message:"修改章节成功"})//刷新页面this.getChapterVideos()})},//添加章节信息addChapter(){//设置课程idthis.chapter.courseId=this.courseIdchapter1.addChapter(this.chapter).then(response=>{//关闭弹框this.dialogChapterFormVisible=false//提示this.$message({type: "success",message:"添加章节成功"})//刷新页面this.getChapterVideos()})},//根据ID查询章节和小结getChapterVideos() {chapter1.getChapterVideo(this.courseId).then(response=>{this.chapterVideoList=response.data.chapterList})},//删除章节removechapter(chapterId){this.$confirm('此操作将永久删除该章节的记录, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => { //点击确定执行then方法//调用删除方法chapter1.deleteChapter(chapterId).then(response=>{  //删除成功this.$message({type: 'success',message: '删除成功!'});this.getChapterVideos()})//回到列表页面this.getChapterVideos()})},previous() {console.log('previous')this.$router.push({ path: '/course/info/'+this.courseId })},next() {console.log('next')this.$router.push({ path: '/course/publish/'+this.courseId})}}
}
</script>
<style scoped>
.chanpterList{position: relative;list-style: none;margin: 0;padding: 0;
}
.chanpterList li{position: relative;
}
.chanpterList p{float: left;font-size: 20px;margin: 10px 0;padding: 10px;height: 70px;line-height: 50px;width: 100%;border: 1px solid #DDD;
}
.chanpterList .acts {float: right;font-size: 14px;
}
.videoList{padding-left: 50px;
}
.videoList p{float: left;font-size: 14px;margin: 10px 0;padding: 10px;height: 50px;line-height: 30px;width: 100%;border: 1px dotted #DDD;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253575.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云视频点播的使用

1.简介&#xff1a;视频点播&#xff08;ApsaraVideo for VoD&#xff09;是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。 2.视频点播的使用&#xff1a; 2.1引入相关依赖&#xff1a;阿里云上有也可以进行直接使用 …

java red5 点播_树莓派实用RED5搭建流媒体服务器实现点播功能

1&#xff0c;搭建流媒体服务器一直是自己想玩的一个东西&#xff0c;在高中玩workerman框架时有人就做过nginx通过rtmp模块搭建流媒体服务器&#xff0c;nginx的特性就是高并发&#xff0c;轻量级&#xff0c;一般大型企业都会采用这个服务器&#xff0c;但是由于&#xff0c;…

Nginx 搭建RTMP视频点播 直播 HLS服务器

安装Nginx --下载nginx-rtmp-module模块 git clone https://github.com/arut/nginx-rtmp-module.git--安装依赖 yum install -y wget gcc gcc-c make pcre pcre-deve zilib zlib-devel openssl-devel--下载Nginx源码包并解压 wget http://nginx.org/download/nginx-1.18.0.tar…

阿里云视频点播

目录 1.控制台介绍 2.环境准备 3.视频上传 4.视频删除 5.获取播放地址 6.获取播放凭证 1.控制台介绍 存储小于50G免费的&#xff0c;转码、流量都是需要付费的 视频存储 需要配置域名 2.环境准备 需要拿到这个key和secret&#xff0c;配置在项目中 3.视频上传 /*** 上传…

陕西发布!陕西省重点实验室申报条件类别、认定程序要求

本文整理了陕西省重点实验室申报条件&#xff0c;认定材料等相关内容&#xff0c;感兴趣的朋友快跟小编一起来看看吧&#xff01; 一、总体思路 本次省重点实验室布局建设工作以填补我省优势学科领域下无省级及以上科学与工程研究类科技创新基地的空白为主,同时兼顾前沿、新兴、…

腾讯云点播视频播放器使用步骤 uniapp

微信开发后台 首先需要微信小程序的账号&#xff0c;各种认证&#xff0c;信息填写完整&#xff0c; 然后–>设置–>第三方设置–>插件管理–>添加插件–>搜索云点播短视频播放器–>添加插件 项目开发 在page.json文件中的globalStyle下面加入 "usin…

用Python实现腾讯云点播VOD

腾讯云点播VOD主要用于视频资源的上传和在线播放&#xff0c;腾讯云官方文档也有许多相关操作的介绍&#xff0c;但是关于Python的文档相对较少&#xff0c;这里我想分享一下在Python方面自己对腾讯云VOD的研究&#xff08;记得看注释&#xff09;。 必备知识基础&#xff1a;…

阿里云视频点播-记录

1.开通视频点播 开通服务 点击立即开通 找到存储管理 启用存储地址 视频加密要设置转码并将其设置为默认 修改模板-点击编辑 上传视频测试 此时已经有了默认存储地址和默认转码配置域名加速【域名已备案】 输入域名点击提交即可配置DNS 点击眼睛并复制CNAME&#xff0c;前…

使用阿里云视频点播上传视频

目录 前言一、目的二、实现步骤1.准备操作2.主要使用模块2.1. 上传音频2.2. 添加转码设置 3.搭建视频点播环境3.1.配置Maven仓库3.2.添加jar依赖3.3.上传视频3.4.初始化点播服务3.5.根据视频ID获取视频地址3.6.根据视频ID删除阿里云中视频3.7.根据视频ID集合删除 三、问题1.阿里…

什么是视频点播(VOD)?

点击上方“LiveVideoStack”关注我们 翻译 | Alex 技术审校 | 赵军 本文来自OTTVerse&#xff0c;作者为Krishna Rao Vijayanagar。 点播 Easy Tech #012# VOD代表Video on Demand&#xff08;视频点播&#xff09;&#xff0c;这种视频流化和交付技术使人们可以随时随地在任何…

php视频点播系统,PHPvod 视频点播系统 v3.1 for php5.4.x

PHPvod是一款免费开源&#xff0c;基于PHPMysql开发的视频点播系统&#xff0c;系统拥有众多的优秀功能和特性&#xff0c;在社区成员的积极参与下&#xff0c;在易用性、扩展性和性能方面不断优化和改进&#xff0c;使得PHPvod可以在极为繁忙的服务器环境下快速稳定运行&#…

开源的在线视频点播系统,值得分享!

平时做一些商业的项目。大家都知道&#xff0c;github是程序员的天堂&#xff0c;大家要好好利用。 今天给大家推荐的这个开源项目来自于读者的投稿&#xff0c;我感觉非常不错&#xff0c;就在这里推荐给大家&#xff0c;如果你也有好的开源项目&#xff0c;我也可以帮你推荐…

uniapp - 腾讯云点播小程序插件

欢迎关注微信公众号&#xff1a;FSA全栈行动 &#x1f44b; 一、简介 微信小程序播放教育类视频要求具备有相关资质&#xff0c;但这些资质一般公司很难短时间申请下来&#xff08;甚至有的公司压根就申请不了&#xff09;&#xff0c;而【短视频播放器小程序插件】含有《信息…

免费视频直播、点播H5播放器SkeyeWebPlayer适配移动端

免费视频直播、点播H5播放器SkeyeWebPlayer适配排除&#xff0c;移动端&#xff0c;常见移动端Web页面问题及解决方案 SkeyeVSS其独创的ws-rtsp流媒体直播技术&#xff0c;兼容传统安防流媒体的同时&#xff0c;不需要安装浏览器插件&#xff0c;解决互联网接入安防监控延迟高…

JAVA在线教育视频点播学习系统毕业设计 开题报告

本文给出的java毕业设计开题报告&#xff0c;仅供参考&#xff01;&#xff08;具体模板和要求按照自己学校给的要求修改&#xff09; 选题目的和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于java的视频点播系统&#xff0c;系统整体使用了基于浏览的javaMy…

如何搭建视频点播服务

要搭建一套高效、稳定、可靠的视频点播服务&#xff0c;通常考虑视频资源的数量、视频资源的格式、用户量和并发量等方面因素&#xff0c;具体包括&#xff1a; 1)视频资源的数量和格式&#xff0c;以及增量情况&#xff1b; 2)播放终端的适配&#xff1b; 3)播放并发量、访问鉴…

直播和点播的区别

先总述直播和点播的不同点&#xff1a; 一、时效性要求不同 二、内容存在形式不同 三、运作流程不同 四、常见场景 五、技术架构 很多时候&#xff0c;大家对直播和点播的区别还是很模糊&#xff0c;仅仅停留在一种感觉上&#xff0c;如果视频画面是实时的就是直播&#…

服务器点播直播系统,服务器点播直播系统

服务器点播直播系统 内容精选 换一换 当保护组的生产站点发生故障时&#xff0c;将保护组的生产站点切到当前的容灾站点&#xff0c;即另一端AZ&#xff0c;启用当前容灾站点的云硬盘以及云服务器等资源。故障切换完成之后&#xff0c;保护组的当前生产站点变成故障切换发生之前…

电影服务器点播系统,网上电影注册点播系统

内容提要&#xff1a;【编号&#xff1a;001】电影网站&#xff0c;灵活运用了JSP技术和sqlserver数据库开发&#xff0c;实现了在线电影的播放和注册用户免费体验的功能。 功能模块图如下&#xff1a; 权限模块分为&#xff1a; 管理员&#xff1a; (1) 影片管理&#xff1a;管…

使用HTTP协议在k780网站上获取天气-----天气预报

文章目录 项目介绍一、项目任务二、项目流程规划以及代码实现1.总流程2.引入库3.总体流程相关函数 三、功能函数的实现1. TCP函数2. 输入城市信息3. 查询今天天气4. 查询未来一周天气5. 查询历史天气6. 退出 总结 项目介绍 本期主要使用TCP网络编程实现天气预报的功能&#xff…