必威体育Betway必威体育官网
当前位置:首页 > IT技术

JAVA对接CC视频的API

时间:2019-10-31 21:44:28来源:IT技术作者:seo实验室小编阅读:58次「手机版」
 

cc视频

java对接CC视频的API


点播的接口文档

直播的接口文档


对接流程:

1.HTTP通信加密实现:

CC视频接口的请求参数hash需要由其它请求参数和api key为盐值hash而成,首先要对普通的查询参数(包括当前时间戳)进行字典序的排序,然后再以key为盐值进行MD5得到hash值

实现代码如下:

    /**
     * 将参数按字典序排序
     *
     * @param queryString 查询的参数
     * @return 按字典序的参数
     */
    private String order(String queryString) {
        String[] list = queryString.split("&");
        return Arrays.stream(list)
                .sorted()
                .collect(Collectors.joining("&"));
    }

    /**
     * 日期格式字符串转换成时间戳
     *
     * @param dateStr 字符串日期
     * @param format  如:yyyy-MM-dd HH:mm:ss
     */
    private String DateToTimeStamp(String dateStr, String format) {
        try {
            simpledateformat sdf = new SimpleDateFormat(format);
            return String.valueOf(sdf.parse(dateStr).getTime() / 1000);
        } catch (Exception e) {
            e.printstacktrace();
        }
        return "";
    }

    /**
     * 生成md5
     */
    private String getMD5(String message) {
        String md5str = "";
        try {
            // 1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
            MessageDigest md = MessageDigest.getinstance("MD5");
            // 2 将消息变成byte数组
            byte[] input = message.getBytes();
            // 3 计算后获得字节数组,这就是那128位了
            byte[] buff = md.digest(input);
            // 4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
            md5str = bytesToHex(buff);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5str;
    }

    /**
     * 二进制转十六进制
     */
    private String bytesToHex(byte[] bytes) {
        StringBuffer md5str = new StringBuffer();
        // 把数组每一字节换成16进制连成md5字符串
        int digital;
        for (int i = 0; i < bytes.length; i++) {
            digital = bytes[i];
            if (digital < 0) {
                digital += 256;
            }
            if (digital < 16) {
                md5str.APPend("0");
            }
            md5str.append(integer.toHexString(digital));
        }
        return md5str.toString().toUpperCase();
    }

    /**
     * @param queryString 要求转化的参数
     * @param isVideo 是否调用点播,true为点播api,false为直播api
     * @return 有效的请求参数
     */
    private String decode(String queryString, boolean isVideo) {

        //获得当前时间
        Date now = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
        //最終的MD5后的結果除了&hash=以外的参数
        String hashedQueryString = order(queryString)
                + "&time=" + DateToTimeStamp(simpleDateFormat.format(now), dateFormat);
        //进行md5的参数
        String temp;
        if (isVideo) {
            temp = hashedQueryString + "&salt=" + key;
        } else {
            temp = hashedQueryString + "&salt=" + room_key;
        }
        return hashedQueryString + "&hash=" + getMD5(temp);
    }

注意点:点播的key和直播的key是不一样

2.HTTP请求实现

CC视频的接口均采用GET方式访问,博主使用的时JDK的HttpURLConnection这个类来进行请求。

实现如下:

    /**
     * 使用HttpURLConnection
     * 访问CC视频接口的函数
     * @param requestUri 調用的api的地址
     * @param isVideo 是否调用点播,true为点播api,false为直播api
     * @return 请求结果
     */
    private String request(String requestUri, String params, boolean isVideo) {
        URL url;
        HttpURLConnection conn;
        try {
            //url_prefix 为基本上所有api请求都有的参数userid以及format
            url = new URL(requestUri + decode(url_prefix + params, isVideo));
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.connect();
            InputStream inputStream = conn.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new inputstreamreader(inputStream, "UTF-8"));
            final StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuffer.append(line);
            }
            bufferedReader.close();
            inputStream.close();
            return stringBuffer.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

注意点:如果请求的参数存在中文,比如调用搜索视频的接口时,title的参数值需要进行转码URLEncoder.encode(title, "UTF-8"),注意特殊字符也需要装码,例如请求排序时&sort=CREATION_DATE:DESC要写成&sort=CREATION_DATE%3ADESC


最后附上博主github的样例代码,只实现了部分api功能的工具

文章最后发布于: 2018-05-19 11:57:22

相关阅读

曦力音视频转换专家-免费全能视频转换器(支持GPU加速)

曦力音视频转换专家英文名叫做Xilisoft Video Converter Ultimate,在国外是大名鼎鼎的需要购买的高级视频转换器,在进军中国市场之

多格视频动次APP会成为下一个抖音吗

尽管Spotify奋起直追,但最大的音乐流媒体平台依然是YouTube,YouTube上有很多音乐达人比如SteveTerreberry,deadmau5,风格也迥异,比如de

微信小视频无法播放是怎么回事?微信视频格式有哪些?

微信小视频的上线让微信富有更多更新的玩法,视频比图片和文字都更直接,视频能够更清楚的传达想要表达的信息,多用在公众号和朋友圈,一

不好用html5-api:fullscreen

为啥不好用?因为兼容性贼差,但是后续肯定会改动的,所以现在记录下来先:http://caniuse.com/#search=FullScreen <!DOCTYPE html>

高德地图API的调用

项目中需要调用一下第三方地图的API,因为自己一直用的是高德地图,所以优先采用高德地图。事实证明我也没选错,百度地图的API使用起来

分享到:

栏目导航

推荐阅读

热门阅读