• springboot + vue 整合 阿里云 视频点播 功能


    阿里云 视频播放操作

    1.1、找到视频点播

    在这里插入图片描述

    1.2、进入管理控制台

    在这里插入图片描述

    1.2、开通服务

    在这里插入图片描述

    1.3、选择“按使用流量计费”,开通服务

    在这里插入图片描述

    1.4、开通后,进入管理控制台

    在这里插入图片描述

    1.5、上传音 / 视频

    在这里插入图片描述

    1.6、启用存储地址

    在这里插入图片描述

    1.7、已启用

    在这里插入图片描述

    1.8、选择上传的音频,开始上传

    在这里插入图片描述

    1.9、上传成功

    在这里插入图片描述

    在这里插入图片描述

    1.10、分类管理

    在这里插入图片描述

    1.11、视频转码

    在这里插入图片描述

    1.12、再上传一个视频,添加转码,分类上传

    在这里插入图片描述

    1.13、上传后,显示转码中,需要一点时间

    在这里插入图片描述

    使用工具类进行视频上传

    2.1、引入依赖
    <dependencies>
         <dependency>
             <groupId>com.aliyungroupId>
             <artifactId>aliyun-java-sdk-coreartifactId>
         dependency>
         <dependency>
             <groupId>com.aliyun.ossgroupId>
             <artifactId>aliyun-sdk-ossartifactId>
         dependency>
         <dependency>
             <groupId>com.aliyungroupId>
             <artifactId>aliyun-java-sdk-vodartifactId>
         dependency>
         <dependency>
             <groupId>com.aliyungroupId>
             <artifactId>aliyun-sdk-vod-uploadartifactId>
         dependency>
         <dependency>
             <groupId>com.alibabagroupId>
             <artifactId>fastjsonartifactId>
         dependency>
         <dependency>
             <groupId>org.jsongroupId>
             <artifactId>jsonartifactId>
         dependency>
         <dependency>
             <groupId>com.google.code.gsongroupId>
             <artifactId>gsonartifactId>
         dependency>
    
         <dependency>
             <groupId>joda-timegroupId>
             <artifactId>joda-timeartifactId>
         dependency>
     dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    2.2、初始化类
    public class InitObject {
    
        public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
            String regionId = "cn-guangzhou";  // 点播服务接入区域
            DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);
            return client;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2.3、测试类
    public class TestVod {
    
        public static void main(String[] args) {
            String accessKeyId = "xxxx";
            String accessKeySecret = "xxxxx";
    
            String title = "6 - What If I Want to Move Faster - upload by sdk";   //上传之后文件名称
            String fileName = "E:\\aaaaa\\6 - What If I Want to Move Faster.mp4";  //本地文件路径和名称
            //上传视频的方法
            UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
            /* 可指定分片上传时每个分片的大小,默认为2M字节 */
            request.setPartSize(2 * 1024 * 1024L);
            /* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/
            request.setTaskNum(1);
    
            UploadVideoImpl uploader = new UploadVideoImpl();
            UploadVideoResponse response = uploader.uploadVideo(request);
    
            if (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");
            }
        }
    
        //1 根据视频iD获取视频播放凭证
        public static void getPlayAuth() throws Exception{
    
            DefaultAcsClient client = InitObject.initVodClient("xxxx", "xxxx");
    
            GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
            GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();
    
            request.setVideoId("990b13273e004b088da9a456ba425e28");
    
            response = client.getAcsResponse(request);
            System.out.println("playAuth:"+response.getPlayAuth());
        }
        //1 根据视频iD获取视频播放地址
        public static void getPlayUrl() throws Exception{
            //创建初始化对象
            DefaultAcsClient client = InitObject.initVodClient("xxxx", "xxxx");
    
            //创建获取视频地址request和response
            GetPlayInfoRequest request = new GetPlayInfoRequest();
            GetPlayInfoResponse response = new GetPlayInfoResponse();
    
            //向request对象里面设置视频id
            request.setVideoId("990b13273e004b088da9a456ba425e28");
    
            //调用初始化对象里面的方法,传递request,获取数据
            response = client.getAcsResponse(request);
    
            List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
            //播放地址
            for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
                System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");
            }
            //Base信息
            System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    2.4、运行

    在这里插入图片描述

    2.5、查看云服务器

    在这里插入图片描述

    使用springboot进行上传

    3.1、引入依赖(同上)
    3.2、配置application文件
    # 服务端口
    server.port=8003
    # 服务名
    spring.application.name=service-vod
    
    # 环境设置:dev、test、prod
    spring.profiles.active=dev
    
    #阿里云 vod
    #不同的服务器,地址不同
    aliyun.vod.file.keyid=xxxx
    aliyun.vod.file.keysecret=xxxx
    
    # 最大上传单个文件大小:默认1M
    spring.servlet.multipart.max-file-size=1024MB
    # 最大置总上传的数据大小 :默认10M
    spring.servlet.multipart.max-request-size=1024MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3.3、获取配置中的值的Bean
    @Component
    public class ConstantVodUtils implements InitializingBean {
    
        @Value("${aliyun.vod.file.keyid}")
        private String keyid;
    
        @Value("${aliyun.vod.file.keysecret}")
        private String keysecret;
    
        public static String ACCESS_KEY_SECRET;
        public static String ACCESS_KEY_ID;
    
        @Override
        public void afterPropertiesSet() throws Exception {
            ACCESS_KEY_ID = keyid;
            ACCESS_KEY_SECRET = keysecret;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    3.4、controller代码
    
    @RestController
    @RequestMapping("/eduvod/video")
    @CrossOrigin
    public class VodController {
    
        @Autowired
        private VodService vodService;
    
        //上传视频到阿里云
        @PostMapping("uploadAlyiVideo")
        public R uploadAlyiVideo(MultipartFile file) {
            //返回上传视频id
            String videoId = vodService.uploadVideoAly(file);
            return R.ok().data("videoId",videoId);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3.5、service代码
    @Service
    public class VodServiceImpl implements VodService {
    
        @Override
        public String uploadVideoAly(MultipartFile file) {
    
            try {
                //accessKeyId, accessKeySecret
                //fileName:上传文件原始名称
                // 01.03.09.mp4
                String fileName = file.getOriginalFilename();
                //title:上传之后显示名称
                String title = fileName.substring(0, fileName.lastIndexOf("."));
                //inputStream:上传文件输入流
                InputStream inputStream = file.getInputStream();
                UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET, title, fileName, inputStream);
    
                UploadVideoImpl uploader = new UploadVideoImpl();
                UploadStreamResponse response = uploader.uploadStream(request);
    
                String videoId = null;
                if (response.isSuccess()) {
                    videoId = response.getVideoId();
                } else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
                    videoId = response.getVideoId();
                }
                return videoId;
            }catch(Exception e) {
                e.printStackTrace();
                return null;
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    3.6、swagger测试

    在这里插入图片描述

    3.7、服务器查看

    在这里插入图片描述

    整合前端进行上传

    4.1 有nginx进行反向代理的设置
    4.1.1、设置请求转发地址
    location ~ /vod/ {           
        proxy_pass http://localhost:8003;
    }
    
    • 1
    • 2
    • 3
    4.1.2、设置上传文件的大小限制

    配置nginx上传文件大小,否则上传时会有 413 (Request Entity Too Large) 异常;
    打开nginx主配置文件nginx.conf,找到http{},添加

    client_max_body_size 1024m;
    
    • 1
    4.1.3、重启服务
    nginx -s reload
    
    • 1

    或者 先关闭再启动

    #关闭服务
    nginx.exe -s stop
    #启用
    nginx.exe
    
    • 1
    • 2
    • 3
    • 4
    4.2、前端实现-数据定义
    fileList: [],//上传文件列表
    BASE_API: process.env.BASE_API // 接口API地址
    
    • 1
    • 2
    4.3、整合上传组件
    <el-form-item label="上传视频">
         <el-upload
             :on-success="handleVodUploadSuccess"
             :on-remove="handleVodRemove"
             :before-remove="beforeVodRemove"
             :on-exceed="handleUploadExceed"
             :file-list="fileList"
             :action="BASE_API+'/eduvod/video/uploadAlyiVideo'"
             :limit="1"
             class="upload-demo">
         <el-button size="small" type="primary">上传视频</el-button>
         <el-tooltip placement="right-end">
             <div slot="content">最大支持1G,<br>
                 支持3GP、ASFAVIDATDVFLVF4V<br>
                 GIFM2TM4VMJ2MJPEGMKVMOVMP4<br>
                 MPEMPGMPEGMTSOGGQTRMRMVB<br>
                 SWFTSVOBWMVWEBM 等视频格式上传</div>
             <i class="el-icon-question"/>
         </el-tooltip>
         </el-upload>
     </el-form-item>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    4.4、方法回调
     //上传视频成功调用的方法
     handleVodUploadSuccess(response, file, fileList) {
         //上传视频id赋值
         this.video.videoSourceId = response.data.videoId
         //上传视频名称赋值
         this.video.videoOriginalName = file.name
     },
     handleUploadExceed() {
         this.$message.warning('想要重新上传视频,请先删除已上传的视频')
     },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4.5、页面上传文件

    在这里插入图片描述

    4.6、查看服务器

    在这里插入图片描述

    点击x删除上传

    5.1、初始化类
    public class InitVodCilent {
    
        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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    5.2、删除接口
    //根据视频id删除阿里云视频
     @DeleteMapping("removeAlyVideo/{id}")
     public R removeAlyVideo(@PathVariable String id) {
         try {
             //初始化对象
             DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
             //创建删除视频request对象
             DeleteVideoRequest request = new DeleteVideoRequest();
             //向request设置视频id
             request.setVideoIds(id);
             //调用初始化对象的方法实现删除
             client.getAcsResponse(request);
             return R.ok();
         }catch(Exception e) {
             e.printStackTrace();
             throw new GuliException(20001,"删除视频失败");
         }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    5.3、前端方法

    在这里插入图片描述

    5.4、点击x的事件,对应的方法

    在这里插入图片描述

     //点击确定调用的方法
     handleVodRemove() {
     //调用接口的删除视频的方法
     video.deleteAliyunvod(this.video.videoSourceId)
         .then(response => {
             //提示信息
             this.$message({
                 type: 'success',
                 message: '删除视频成功!'
             });
             //把文件列表清空
             this.fileList = []
             //把video视频id和视频名称值清空
             //上传视频id赋值
             this.video.videoSourceId = ''
             //上传视频名称赋值
             this.video.videoOriginalName = ''
         })
    },
    //点击×调用这个方法
    beforeVodRemove(file,fileList) {
     return this.$confirm(`确定移除 ${ file.name }`);
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    5.5、页面效果

    在这里插入图片描述在这里插入图片描述

    5.6、服务器查看,已经删除

    在这里插入图片描述

    结束!!!!


    		   如果你困在一个地方,每天都完全一样,做什么都改变不了状况,你会怎么办?
    
    • 1
  • 相关阅读:
    AUTOSAR-Fee模块
    「2024」预备研究生mem-分析推理强化:多对多画表格(下)
    ROS的调试经验
    dlhsoft:::Kanban Library for WPF:看板
    JAVA学习——day02
    处理过程与工具
    【无线图传】基于FPGA的简易无线图像传输系统verilog开发,matlab辅助验证
    yarn install:unable to get local issuer certificate
    科技连接美好未来 | 美格智能5G FWA解决方案持续推进
    CPU占用过高/内存占用过高分析
  • 原文地址:https://blog.csdn.net/weixin_49107940/article/details/126860968