七牛云之 avthumb 视频转码

概述:

很多用户使用七牛的云存储服务,存放很多mp4文件到七牛的存储空间,但是通过复制外链,然后在浏览器中播放,经常会遇到“只有音频,没有视频”的情况;
其实这个不是七牛的存储有问题,而是视频的编码方式,浏览器不支持,如:MPEG-4 在googel Chrome 、IE这些浏览器中都是不支持视频播放的,但通过苹果的Safari浏览器是能正常播放的;

问题:

如何实现视频的转码操作?

思路:

1.上传一个视频到七牛的空间,然后再进行转码操作;(本文的方式)
  或者上传的同时指定预处理操作,上传成功后,进行转码处理;
2.查看七牛的avthumb接口说明和支持的编码说明,链接如下:
  http://developer.qiniu.com/code/v6/api/dora-api/av/avthumb.html
  https://support.qiniu.com/hc/kb/article/182142/?from=draft
3.coding

代码示例如下:

package com.qiniu.dora;

import com.qiniu.base.AccountMgr;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.processing.OperationManager;
import com.qiniu.storage.Configuration;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.qiniu.util.UrlSafeBase64;

/**
 * 很多浏览器不支持 MPEG-4编码的视频,所以上传到七牛,用类似google 这样的浏览器是不能正常播放的,只有音频,没有视频
 * 所以可以使用七牛的转码接口
 * 
 * @author xuhuanchao
 *
 */
public class AVthumbForMpeg4 {

    //获取授权对象
    Auth auth = Auth.create(AccountMgr.ACCESS_KEY, AccountMgr.SECRET_KEY);
    //执行操作的管理对象
    OperationManager operationMgr = new OperationManager(auth, new Configuration(Zone.zone0()));

    /**
     * Test Method
     * @param args
     */
    public static void main(String[] args) {
        new AVthumbForMpeg4().transcoding();
    }

    /**
     * 转码
     */
    void transcoding() {
        String bucket = "java-bucket";          //存储空间名称
        String key = "mpeg_4_type.mp4";         //存储空间中视频的文件名称
        String newKey = "H264_type.mp4";        //转码后,另存的文件名称
        String pipeline = "admin_merge_radio";  //处理队列

        String saveAs = UrlSafeBase64.encodeToString(bucket + ":" + newKey);        //saveas接口 参数
        String fops = "avthumb/mp4/vcodec/libx264|saveas/" + saveAs;                //处理命令 avthumb 和 saveas 通过管道符 |  进行连接

        try {
            //执行转码和另存 操作
            String persistentId = operationMgr.pfop(bucket, key, fops, new StringMap().put("persistentPipeline", pipeline));
            System.out.println(persistentId);
        } catch (QiniuException e) {
            String errorCode = String.valueOf(e.response.statusCode);
            System.out.println(errorCode);
            e.printStackTrace();
        }

    }

}

测试结果:

原视频:http://oalc4ly8m.bkt.clouddn.com/mpeg_4_type.mp4
转码后的视频:http://oalc4ly8m.bkt.clouddn.com/H264_type.mp4

你可能感兴趣的:(Qiniu)