阿里雲視頻點播功能


httpclient技術可以調用api地址http://vod.cn-shanghai.aliyunes.com/Action=GetPlayInfo&VideoId=1223

API: 阿里雲提供固定的地址,只需要調用這個固定的地址,向地址傳遞參數,實現功能。

SDK:sdk對api方式進行封裝,更方便使用,之前使用EasyExcel調用阿里雲提供類或者接口里面的方法實現視頻功能。

1.引入maven依賴

     <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>
        </dependency>

2.由於aliyun-java-vod-upload-1.4.9.jar還未正式開源,需要直接引入jar包到項目中,這個依賴不能直接在maven中央倉庫下載到,手動把依賴安裝到本地倉庫里面。使用maven命令進行安裝。 進入lib 目錄執行下面命令

 

 

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. application.properties

# 服務端口
server.port=8003
# 服務名
spring.application.name=service-vod

# 環境設置:dev、test、prod
spring.profiles.active=dev

# nacos服務地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

#阿里雲 vod
#不同的服務器,地址不同
aliyun.vod.file.keyid=LTAI4GDTqjJkxrB353q44ejE
aliyun.vod.file.keysecret=rdy8GeTHEYeKOGrY1EJ8pKGdQodMSv

# 最大上傳單個文件大小:默認1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置總上傳的數據大小 :默認10M
spring.servlet.multipart.max-request-size=1024MB

 4.utils

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

5.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);
    }

    //根據視頻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,"刪除視頻失敗");
        }
    }

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

6.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;
        }

    }

    @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 GuliException(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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM