腾讯云视频上传问题总结

来源:互联网 发布:淘宝店铺ppt 编辑:程序博客网 时间:2024/06/08 17:42

使用腾讯云提供java sdk4.4
MultipartUploadVodFile使用此接口,分片上传,分片大小设置1024*1024*20会被腾讯服务器拒绝,无法上传,
目前设置为1024*1024*5
最小分片设置为1024*512


/**     * 域名:vod.qcloud.com     * 接口名: MultipartUploadVodFile     * @Description:本地上传至腾讯云     * @param     * @return     * @author zhiwei.yan     * @date 2017/8/16 0016 8:49     */    public static String localToTcCloud (UploadParam uploadParam) {        QcloudApiModuleCenter module = getModule("POST");        try{            System.out.println("starting...");            String fileName = uploadParam.getFileLocalPath();            //文件大小            long fileSize = new File(fileName).length();            //文件sha1值            String fileSHA1 = SHA1.fileNameToSHA(fileName);            //每次上传字节数,可自定义            int fixDataSize = 1024*1024*5;            //切片上传:最小片字节数(默认不变),如果:dataSize + offset > fileSize,把这个值变小即可            int firstDataSize = 1024*512;            //            int tmpDataSize = firstDataSize;            long remainderSize = fileSize;            int tmpOffset = 0;            int code, flag;            String fileId = null;            String result = null;            if(remainderSize<=0){                System.out.println("wrong file path...");            }            long startTime = System.currentTimeMillis();            while (remainderSize>0) {                TreeMap<String, Object> params = new TreeMap<String, Object>();                params.put("fileSha", fileSHA1);                params.put("fileType", uploadParam.getFileType());                params.put("fileName", uploadParam.getFileName());                params.put("fileSize", fileSize);                params.put("dataSize", tmpDataSize);                params.put("offset", tmpOffset);                params.put("file", fileName);                params.put("isTranscode", 0);                params.put("isScreenshot", 0);                params.put("isWatermark", 0);                result = module.call("MultipartUploadVodFile", params);                System.out.println(result);                JSONObject json_result = new JSONObject(result);                code = json_result.getInt("code");                if (code == -3002) {               //服务器异常返回,需要重试上传(offset=0, dataSize=10K,满足大多数视频的上传)                    tmpDataSize = firstDataSize;                    tmpOffset = 0;                    continue;                } else if (code != 0) {                    return null;                }                flag = json_result.getInt("flag");                if (flag == 1) {                    fileId = json_result.getString("fileId");                    break;                } else {                    tmpOffset = Integer.parseInt(json_result.getString("offset"));                }                remainderSize = fileSize - tmpOffset;                if (fixDataSize < remainderSize) {                    tmpDataSize = fixDataSize;                } else {                    tmpDataSize = (int) remainderSize;                }                long costTime = System.currentTimeMillis() - startTime;                LOG.info("-------this video cost time : " + costTime + "ms," + costTime / 1000 + "s");            }            long totalTime = System.currentTimeMillis() - startTime;            LOG.info("-------this video cost time : " + totalTime + "ms," + totalTime / 1000 + "s");            System.out.println("end...");            return result;        }        catch (Exception e) {            e.printStackTrace();            System.out.println("error..."+e.toString());        }        return null;    }

有一份测试完整的代码,抽时间整理到github上
完整代码地址:https://github.com/yanhua711/morefeels
仅供参考,有问题欢迎一起研究