web网站实现实时在线视频通话 七牛云实时音视频

七牛云实时音视频 相关配置(直播空间创建,推流域名绑定)生成视频播放文件

  • 1.创建连麦应用(创建一个音视频会话的应用)
    在这里插入图片描述
    直播空间可以先不关联 ,等一切配置好后 再回过头配置。

  • 2.创建一个直播空间进行推流操作,

    需要一个必须在中国大陆地区完成 ICP 备案和 公安部备案 的域名。

    并且会给你生成一些列的推流需要用到的二级域名,你需要创建出来 并且配置cname。
    在这里插入图片描述
    再进行直播空间配置,设置推流文件的储存空间,
    在这里插入图片描述
    配置直播空间需要一个存储空间位置,那就在七牛云的对象储存再创建一个储存空间即刻。
    在这里插入图片描述

  • 3.储存空间的文件想要有一个外网访问链接,则需要配置一个外链域名(二级域名即刻)。并解析好cname。
    在这里插入图片描述
    此时 空间即可使用,上传一个文件。再用外链访问测试。

  • 4.配置实时音视频应用直播空间。
    在这里插入图片描述

    配置推流
    在这里插入图片描述
    ${roomName}为魔法变量,也就是说 你进行客户端推流时,会自动以房间名称作为流名称创建一个直播流进行推流操作。

    • 5.具体操作

      5.1生成视频会话房间

      accessKey,secretKey:你创建好你的七牛云账号后在个人中心 密钥管理里面可以获取到

      appId:你创建的实时音视频的连麦应用名称

      //生成申请方和会诊方的roomToken
      Auth auth = Auth.create(accessKey, secretKey);
      RtcRoomManager rmanager = new RtcRoomManager(auth);
      String applyRoomToken = "";
      String diaRoomToken = "";
      String pushStreamToken1 = "";
      String pushStreamToken2 = "";
      String roomName = "";
      //获取今天已经存在会诊房间数量
      try {
         String format = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
         roomName = "hzRoom-" + format;//房间名称
         applyRoomToken = rmanager.getRoomToken(appId,roomName,"user1",remoteDiagnoseRequest.getValidTime().getTime(), "user");
         diaRoomToken = rmanager.getRoomToken(appId, roomName, "user2", remoteDiagnoseRequest.getValidTime().getTime(), "user");
         } catch (Exception e) {
            e.printStackTrace();
             throw new PublicException("新增失败,生成会诊房间令牌异常!");
         }
      

      5.2 前端接入,通过roomToken 加入视频会话

      推流以客户端为主

      官方文档:https://doc.qnsdk.com/rtn/web/docs/merge_stream_track

      5.3 推流后是在你配置好的储存空间生成一些列的**.ts**切片文件。

      你需要调用官方提供的api,地址:https://developer.qiniu.com/pili/api/2777/save-the-live-playback

      示例:

      hubName :是你实时音视频云关联的直播空间名称

      /**
       * 
       * @param startTime 视频开始的时间
       * @param endTime 视频结束的时间
       * @param roomName 你创建的视频会话房间名称
       * @return 返回一个视频外链访问地址
       * @throws Exception
      */
      private String uploadDiaVideo(Date startTime, Date endTime, String roomName)      throws Exception {
         CloseableHttpClient client = null;
         CloseableHttpResponse response = null;
         String fname = hubName + "." + roomName + "/" + StringUtil.getUUID() + ".m3u8";
         String roomNameBase64=Base64.getEncoder().encodeToString(roomName.getBytes());
         String url = "http://pili.qiniuapi.com/v2/hubs/" + hubName + "/streams/" + roomNameBase64 + "/saveas";
         Auth auth = Auth.create(accessKey, secretKey);
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = new HashMap<String, Object>();
         data.put("start", startTime.getTime() / 1000); 
         data.put("end", endTime.getTime() / 1000);
      // data.put("expireDays", 2);
         data.put("fname", fname);
         String accToken = (String) auth.authorizationV2(url, "POST", JSON.toJSONString(data).getBytes(), "application/json").get("Authorization");
         System.out.println("accToken------------------->" + accToken);
         try {
            HttpPost httpPost = new HttpPost(url);
             httpPost.setHeader(HTTP.CONTENT_TYPE, "application/json");
             httpPost.setHeader("Authorization", accToken);
             httpPost.setEntity(new StringEntity(JSON.toJSONString(data),        ContentType.create("text/json", "UTF-8")));
             client = HttpClients.createDefault();
             response = client.execute(httpPost);
             HttpEntity entity = response.getEntity();
             String result = EntityUtils.toString(entity);
             } finally {
              if (response != null) {
                 response.close();
               }
              if (client != null) {
                   client.close();
                }
              }
              return videos2AccessUrl + fname;
          }生成视频封面图片
          
      

其他:生成视频封面文件

    /**
     * 
     * @param startTime
     * @param roomName
     * @return
     * @throws Exception
     */
    private String uploadDiaVideoCover(Date startTime, String roomName) throws Exception {
        CloseableHttpClient client = null;
        CloseableHttpResponse response = null;
        String roomNameBase64 = Base64.getEncoder().encodeToString(roomName.getBytes());
        String url = "http://pili.qiniuapi.com/v2/hubs/" + hubName + "/streams/" + roomNameBase64 + "/snapshot";
        String fname = hubName + "." + roomName + "/" + StringUtil.getUUID() + ".jpg";
        Auth auth = Auth.create(accessKey, secretKey);
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> data = new HashMap<String, Object>();
        data.put("time", startTime.getTime() / 1000);
        data.put("deleteAfterDays", 0);
        data.put("fname", fname);
        String accToken = (String) auth.authorizationV2(url, "POST", JSON.toJSONString(data).getBytes(), "application/json").get("Authorization");
        System.out.println("accToken------------------->" + accToken);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader(HTTP.CONTENT_TYPE, "application/json");
        httpPost.setHeader("Authorization", accToken);
        try {
            httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(data), ContentType.create("text/json", "UTF-8")));

            client = HttpClients.createDefault();
            response = client.execute(httpPost);
            HttpEntity entity = response.getEntity();

        } finally {
            if (response != null) {
                response.close();
            }
            if (client != null) {
                client.close();
            }
        }
        return videos2AccessUrl + fname;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

54hake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值