oss视频转码处理(解决部分浏览器无法正常播放问题)

本文详细介绍了如何在阿里云上进行视频转码的步骤,包括设置OSS上传属性,使用SDK上传视频,创建转码模板和管道,以及调用API进行视频转码,最终实现从H.264格式转换为MP4的过程。通过这个过程,可以确保转码后的视频正常播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿里云视频转码(媒体处理)

有的视频上传后只有声音 没有视频 如下图
在这里插入图片描述

实现步骤

1. 设置oss上传的基础属性

endPoint 等信息从阿里云控制台获取然后保存到application.yml中

在这里插入图片描述

2.导入依赖

		<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.5.0</version>
        </dependency>

3. 先上传一个视频

	/**
     * 视频转码 只能对已经上传到阿里云oss中的视频进行转码处理 故不考虑将视频保存到相对路径临时文件中
     */
    @Test
    void testTranFromH264Vide(){

        //上传视频
        File file = new File(videoUrl);
        System.out.println(file.getName());
        String uploadUrl = objectName + file.getName();
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, uploadUrl, new ByteArrayInputStream(FileUtils.file2Byte(file)));
        // 关闭OSSClient。
        ossClient.shutdown();
        //返回文件的路径
        System.out.println("https://"+bucketName+"."+endPoint+"/"+uploadUrl);

    }

上传成功
在这里插入图片描述

4. 创建转码模板和管道

进入媒体管理控制台 (如果未开通服务需开通)
在这里插入图片描述

5. 将模板的id和管道的id加入配置文件

在这里插入图片描述

6. 添加转码的依赖

		<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-mts</artifactId>
            <version>2.5.2</version>
        </dependency>

7. 上传视频及转码实现

先删除刚刚上传的视频 然后执行下面的代码

	/**
     * 视频转码 只能对已经上传到阿里云oss中的视频进行转码处理 故不考虑将视频保存到相对路径临时文件中
     */
    @Test
    void testTranFromH264Vide() {

        //上传视频
        File file = new File(videoUrl);
        System.out.println(file.getName());
        String uploadUrl = objectName + file.getName();
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, uploadUrl, new ByteArrayInputStream(FileUtils.file2Byte(file)));
        // 关闭OSSClient。
        ossClient.shutdown();
        //返回文件的路径
        String saveOssUrl = "https://" + bucketName + "." + endPoint + "/" + uploadUrl;
        System.out.println(saveOssUrl);

        // ------------------------------------------------------------------------------------------------------------

        //转码后的文件储存路径
        String tranUploadVideoUrl = objectName+"(转码)"+file.getName();

        // 创建DefaultAcsClient实例并初始化
        DefaultProfile profile = DefaultProfile.getProfile(
                endPoint.substring(4, endPoint.lastIndexOf(".aliyuncs")),      //
                accessKeyId,      //
                accessKeySecret); //

        String ossLocation = endPoint.substring(0, endPoint.indexOf(".aliyuncs"));

        IAcsClient client = new DefaultAcsClient(profile);
        // 创建API请求并设置参数
        SubmitJobsRequest request = new SubmitJobsRequest();

        // Input
        JSONObject input = new JSONObject();
        input.put("Location", ossLocation);
        input.put("Bucket", bucketName);
        try {
            input.put("Object", URLEncoder.encode(uploadUrl, "utf-8"));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("input URL encode failed");
        }
        request.setInput(input.toJSONString());
        // Output
        String outputOSSObject;
        try {
            outputOSSObject = URLEncoder.encode(tranUploadVideoUrl, "utf-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("output URL encode failed");
        }
        JSONObject output = new JSONObject();
        output.put("OutputObject", outputOSSObject);
        // Ouput->Container
        JSONObject container = new JSONObject();
        container.put("Format", "mp4");
        output.put("Container", container.toJSONString());
        // Ouput->Video
        JSONObject video = new JSONObject();
        video.put("Codec", "H.264");
        video.put("Bitrate", "1500");
        video.put("Width", "1280");
        video.put("Fps", "25");
        output.put("Video", video.toJSONString());
        // Ouput->Audio
        JSONObject audio = new JSONObject();
        audio.put("Codec", "AAC");
        audio.put("Bitrate", "128");
        audio.put("Channels", "2");
        audio.put("Samplerate", "44100");
        output.put("Audio", audio.toJSONString());
        // Ouput->TemplateId
        output.put("TemplateId", templateId);
        JSONArray outputs = new JSONArray();
        outputs.add(output);
        request.setOutputs(outputs.toJSONString());
        request.setOutputBucket(bucketName);
        request.setOutputLocation(ossLocation);
        // PipelineId
        request.setPipelineId(pipelineId);
        // 发起请求并处理应答或异常
        SubmitJobsResponse response;

        try {
            response = client.getAcsResponse(request);
            if (response.getJobResultList().get(0).getSuccess()) {
                log.info("transform to H264 success");
            } else {
                log.error("transform to H264 fail");
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }

        //todo 删除原来的未转码文件 或手动删除

        //返回转码成功后的url
        System.out.println("转码后的url:"+"https://" + bucketName + "." + endPoint + "/"+tranUploadVideoUrl);

    }

得到的返回的图片的url
在这里插入图片描述

8. 转码后的视频可正常播放

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值