天天看點

spring boot 實作 阿裡雲視訊點播 功能 實作視訊上傳,視訊删除,視訊播放功能三:實作在浏覽器播放阿裡雲點播視訊一、後端擷取播放憑證二、前端播放器整合

1:開通視訊點播服務,并可以上傳視訊做一些設定,轉碼,分類等

spring boot 實作 阿裡雲視訊點播 功能 實作視訊上傳,視訊删除,視訊播放功能三:實作在浏覽器播放阿裡雲點播視訊一、後端擷取播放憑證二、前端播放器整合

2:根據官方提供sdk示例, 實作上傳視訊功能

spring boot 實作 阿裡雲視訊點播 功能 實作視訊上傳,視訊删除,視訊播放功能三:實作在浏覽器播放阿裡雲點播視訊一、後端擷取播放憑證二、前端播放器整合

3:代碼實作

引入依賴

<dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.1</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.10.2</version>
    </dependency>
     <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-vod</artifactId>
        <version>2.15.11</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.28</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20170516</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
    </dependency>
           

這個塊有個問題,使用上傳SDK aliyun-java-vod-upload-1.4.13.jar時,這個包下載下傳不下來,是由于這個包沒有開源,

那麼先解決這個問題,

1:先在官方文檔中下載下傳Java上傳SDK及示例代碼VODUploadDemo-java-1.4.13.zip

2:解壓後打開lib目錄,然後打開cmd視窗,執行如下指令,版本号根據自己的修改

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar
           

 3:根據下載下傳的aliyun-java-vod-upload-1.4.13.jar中的   UploadVideoDemo.java檔案參照,裡面都是上傳案例,我們用流的方式上傳,代碼如下

controller層

@PostMapping("uploadAlyiVideo")
    public R uploadAlyiVideo(MultipartFile file) {
        //傳回上傳視訊id
        String videoId = vodService.uploadVideoAly(file);
        return R.ok().data("videoId",videoId);
    }
           

service層

@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;
        }

    }
           

4:删除視訊案例:

controller層:

//根據視訊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 MyRuntimeException(20001,"删除視訊失敗");
        }
    }

    //删除多個阿裡雲視訊的方法
    //參數多個視訊id  List videoIdList
    @DeleteMapping("delete-batch")
    public R deleteBatch(@RequestParam("videoIdList") List<String> videoIdList) {
        vodService.removeMoreAlyVideo(videoIdList);
        return R.ok();
    }
           

service層

@Override
    public void removeMoreAlyVideo(List videoIdList) {
        try {
            //初始化對象
            DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
            //建立删除視訊request對象
            DeleteVideoRequest request = new DeleteVideoRequest();

            //videoIdList值轉換成 1,2,3
            String videoIds = StringUtils.join(videoIdList.toArray(), ",");

            //向request設定視訊id
            request.setVideoIds(videoIds);
            //調用初始化對象的方法實作删除
            client.getAcsResponse(request);
        }catch(Exception e) {
            e.printStackTrace();
            throw new MyRuntimeException(20001,"删除視訊失敗");
        }
    }

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("11");
        list.add("22");
        list.add("33");
        // 11,22,33
        String join = StringUtils.join(list.toArray(), ",");
        System.out.println(join);
    }
           

三:實作在浏覽器播放阿裡雲點播視訊

注意: 其中如果不是加密轉碼視訊,就直接用視訊位址播放就可以,但是如果是轉碼加密視訊,就需要擷取播放憑證後才能轉碼

參考文檔:https://help.aliyun.com/document_detail/61109.html

一、後端擷取播放憑證

//根據視訊id擷取視訊憑證
    @GetMapping("getPlayAuth/{id}")
    public R getPlayAuth(@PathVariable String id) {
        try {
            //建立初始化對象
            DefaultAcsClient client =
                    InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
            //建立擷取憑證request和response對象
            GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
            //向request設定視訊id
            request.setVideoId(id);
            //調用方法得到憑證
            GetVideoPlayAuthResponse response = client.getAcsResponse(request);
            String playAuth = response.getPlayAuth();
            return R.ok().data("playAuth",playAuth);
        }catch(Exception e) {
            throw new MyRuntimeException(20001,"擷取憑證失敗");
        }
    }
           

二、前端播放器整合

<template>
  <div>

    <!-- 阿裡雲視訊播放器樣式 -->
    <link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" target="_blank" rel="external nofollow"  >
    <!-- 阿裡雲視訊播放器腳本 -->
    <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js" />

    <!-- 定義播放器dom -->
    <div id="J_prismPlayer" class="prism-player" />
  </div>
</template>
<script>
import vod from '@/api/vod'

export default {
    layout: 'video',//應用video布局
    asyncData({ params, error }) {
        console.log(params)
        console.log(params.vid)
       return vod.getPlayAuth(params.vid)
        .then(response => {
            return { 
                playAuth: response.data.data.playAuth,
                vid: params.vid
            }
        })
    },
    mounted() { //頁面渲染之後  created
        new Aliplayer({
            id: 'J_prismPlayer',
            vid: this.vid, // 視訊id
            playauth: this.playAuth, // 播放憑證
            encryptType: '1', // 如果播放加密視訊,則需設定encryptType=1,非加密視訊無需設定此項
            width: '100%',
            height: '500px',
            // 以下可選設定
            cover: 'http://guli.shop/photo/banner/1525939573202.jpg', // 封面
            qualitySort: 'asc', // 清晰度排序

            mediaType: 'video', // 傳回音頻還是視訊
            autoplay: false, // 自動播放
            isLive: false, // 直播
            rePlay: false, // 循環播放
            preload: true,
            controlBarVisibility: 'hover', // 控制條的顯示方式:滑鼠懸停
            useH5Prism: true, // 播放器類型:html5
            
        }, function(player) {
            console.log('播放器建立成功')
        })
    }

}
</script>
           

可給視訊播放增加一些功能配置:

線上配置參考:https://player.alicdn.com/aliplayer/setting/setting.html

繼續閱讀