七牛通过Java获取直播在线观看人数

最近在使用七牛的直播服务,使用了一段时间,感觉还行,价格挺便宜的没有想象的那么贵。服务端的SDK也封装很好,使用起来很简单。但是在使用SpringBoot开发过程中还是遇到了一些坑,以后通过笔记将遇到的坑记录下来。


第一个坑:如何通过Java获取正在观看直播的人数?

七牛官方给出了不同版本获取在线人数的方式,有Go版本,PHP版本、shell版本和python版本的获取,详细代码请到官方链接。很奇怪,为啥就是没有Java版本的?使用Java开发的人应该不少才对(后面还是转Go开发服务段时间了,Java还是太重),不管这些,反正有Go版本和PHP版本对照写一下就行不难,代码如下:

    public static String doQiNiuGet(String hub){

        // http://pili.qiniuapi.com/v2/hubs/hubname/stat/play
        String url = "http://pili.qiniuapi.com/v2/hubs/"+ hub +"/stat/play";
        System.out.println(url);

         // header是七牛管理凭证中的signingStr
        String header = "GET /v2/hubs/"+hub+"/stat/play"+
                "\nHost: pili.qiniuapi.com" +
                "\nContent-Type: application/json" +
                "\n\n";

        System.out.println(header);

        //hmacSha1加密需要引入commons-codec(1.10版本)
        // sign secret key
        byte[] sign = HmacUtils.hmacSha1("secret key",header);
        //base64加密,用七牛直播SDK中给的base64就行
        String encodedSign = Base64.encodeToString(sign,0).replace('+','-').replace('/','_');

        System.out.println("Authorization: Qiniu rdEVMXWqVolcg58jL98fMDWTGw8rU2nVpjBLJVzS:"+encodedSign);

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Type", "application/json");
        httpHeaders.add("Host","pili.qiniuapi.com");

        // Authorization: Qiniu access key:+sign,
        //注意:base64 加密后字符超过76个以后会在最后加/n,要去除这个/n
        String authorization = ("Qiniu access key:" + encodedSign).replaceAll("\n","");
        httpHeaders.add("Authorization",authorization);

        System.out.println(httpHeaders);

        //使用RestTemplate放出get请求
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity requestEntity = new HttpEntity(null, httpHeaders);
        ResponseEntity results = restTemplate.exchange(url,HttpMethod.GET, requestEntity, String.class);

        String responseBody = results.getBody();

        System.out.println("get body:" + responseBody.toString());
        return responseBody;
    }

代码中唯一需要注意的是base64加密,当加密后的字符大于76个字符时会自动在后面加上换行符,需要除去这个换行符,这个问题我找了一个多小时。如果不去除这个换行符,则会报如下错误:

java.lang.IllegalArgumentException: Illegal character(s) in message header value: Qiniu access key:pnvO1w1xuNrGBgAJ8RcgjthaXxk=

你可能感兴趣的:(SpringBoot,七牛,直播,Java)