最近公司项目要求,需要调用腾讯会议api进行开会,并且要查看录制文件,会议记录等功能。研究了好一番,总算是搞定了,期间由于网上的实例太少,并且讲的不清楚,还特地询问了腾讯客服!不得不说,大公司的客服就是到位,解决问题的效率还是相当高的,甚至会加你微信,将你单独拉倒一个微信群中讨论这个问题。话不多说,下面上代码:

第一、你需要申请一个商业版或者企业版的腾讯会议账号,当然这是要花钱的。申请地址:申请地址,申请好了以后,会邮件发给你APPID,SecretId,SecretKey三个参数。

然后你就可以登录你的管理后台页面:https://meeting.tencent.com/msgcode-login.html?
创建一个管理用户(即主持人,初级商业版的应该只能够激活一个主持人),注意主持人的userid ,这里可以自定义,后面创建会议要用的。

第二、打开腾讯会议官方api文档;
下面我们先调用接口创建一个会议,然后会生成对应的会议url,点击加入后,主持人再进行录制操作,然后查询录制就可以了。

所有的接口调用,都需要分两步,第一要获取企业鉴权签名,第二步才是调用接口

获取鉴权签名,具体可以看api文档,这里直接上代码:

 private static  String SecretKey="自己的SecretKey";private static  String appId="自己的appId";private static  String SdkId="自己的SdkId";  //这个参数是非必填的 但是有就需要填private static  String MEETINGURL="https://api.meeting.qq.com/v1/meetings";  private static  String URI="/v1/meetings";private static  String YLZURI="/v1/addresses";private static  String RECORDSURI="/v1/records";public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, IOException {Date today=  new  Date();int createTime = getSecondTimestamp(today);//1小时后Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1);Date endtime=calendar.getTime();int endTime = getSecondTimestamp(endtime);//创建会议String result=doCreateMeetings("admin","admintest3",1,0,createTime,endTime);//查询会议录制地址列表//String result= getYlzPageList(10,1,"11566804716889678952","","admin",1621933200,1621935000);//查询会议录制地址String result=  GetYlzdz("1397122561082425344","admin");System.out.println("----------------"+result);}/**** 生成签名 执行创建会议*/public static String doCreateMeetings(String userid,String subject,Integer instanceid,Integer type, int createTime,int endTime) throws InvalidKeyException, NoSuchAlgorithmException, IOException {//body参数String req_body="{" +"\"userid\": \""+userid+"\"," +   /*腾讯会议用户唯一标识 不能为1--9内的数字*/"\"instanceid\": "+instanceid+"," +   /*用户的终端设备类型 1:PC*/"\"subject\": \""+subject+"\"," +  /*会议主题  不支持中文*/"\"type\": "+type+"," +   // 会议类型:0:预约会议 1:快速会议"\"hosts\":[{\"userid\": \""+userid+"\"}]," +   //会议指定主持人的用户 ID,如果无指定,主持人将被设定为参数 userid 的用户,即 API 调用者。"\"start_time\": \""+createTime+"\"," +  //会议开始时间戳(单位秒)。"\"end_time\": \""+endTime+"\"," +    //会议结束时间"\"settings \": {" +   //会议媒体参数配置。"\"mute_enable_join \": true," +   //入会时静音。"\"mute_all \": false" +  //全体静音。"}" +"}";//生成签名String signature = sign(SecretId, SecretKey, "POST", nonce, String.valueOf(createTime), URI, req_body);log.info("我是创建会议签名:------------"+signature);String  code=createMeetingPost(MEETINGURL,SdkId,SecretId,String.valueOf(createTime),nonce,appId,signature,req_body);log.info("创建会议result:------------"+signature);return code;}/*** @auther: 创建会议* @Description 发送post请求  参数String* @date:*/private static String createMeetingPost(String urlPath,String SdkId,String SecretId,String createTime,String nonce,String appId,String signature,String jsonParam) throws IOException {HttpClient client = HttpClients.createDefault();HttpPost request = new HttpPost(urlPath);// 设置文件类型:request.setHeader("Content-Type", "application/json;charset=UTF-8");request.setHeader("X-TC-Key",SecretId);request.setHeader("X-TC-Timestamp",createTime);request.setHeader("X-TC-Nonce",nonce);request.setHeader("AppId",appId);request.setHeader("SdkId",SdkId);request.setHeader("X-TC-Signature",signature);request.setHeader("X-TC-Registered","1"); //必填 否则录制的文件无法生成//传参StringEntity se = new StringEntity(jsonParam);se.setContentType("text/json");request.setEntity(se);HttpResponse response = client.execute(request);HttpEntity entity = response.getEntity();String result = EntityUtils.toString(entity, "UTF-8");return result;}/*******************会议云录制******************************************//***查询会议录制地址**/public static String getYlzPageList(Integer  page_size ,Integer page,String meeting_id,String meeting_code,String userid,int start_time,int end_time) throws InvalidKeyException, NoSuchAlgorithmException, IOException {log.info("查询会议录制地址,page_size:{}",page_size+",page="+page+",meeting_id="+meeting_id);//body参数Date today=  new  Date();int createTime = getSecondTimestamp(today);String Vuri= RECORDSURI+"?page_size="+page_size+"&page="+page+"&meeting_id="+meeting_id+"&meeting_code="+meeting_code+"&userid="+userid+"&start_time="+start_time+"&end_time="+end_time;//生成签名String signature = sign(SecretId, SecretKey, "GET", nonce, String.valueOf(createTime), Vuri, "");// 查询会议录制地址String requestUri = "https://api.meeting.qq.com/v1/records?page_size="+page_size+"&page="+page+"&meeting_id="+meeting_id+"&meeting_code="+meeting_code+"&userid="+userid+"&start_time="+start_time+"&end_time="+end_time;HttpGet request = new HttpGet(requestUri);// 设置文件类型:request.setHeader("Content-Type", "application/json;charset=UTF-8");request.setHeader("X-TC-Key",SecretId);request.setHeader("X-TC-Timestamp", String.valueOf(createTime));request.setHeader("X-TC-Nonce",nonce);request.setHeader("AppId",appId);request.setHeader("SdkId",SdkId);request.setHeader("X-TC-Signature",signature);request.setHeader("X-TC-Registered","1");//注意 必填1  否则查不到信息//传参HttpClient client = HttpClients.createDefault();HttpResponse response = client.execute(request);HttpEntity entity = response.getEntity();String result = EntityUtils.toString(entity, "UTF-8");return result;}/***查询会议录制地址**/public static String GetYlzdz(String  meeting_record_id ,String userid) throws InvalidKeyException, NoSuchAlgorithmException, IOException {log.info("查询会议录制地址,userId:{}",userid+",meeting_record_id="+meeting_record_id);//body参数Date today=  new  Date();int createTime = getSecondTimestamp(today);//生成签名String signature = sign(SecretId, SecretKey, "GET", nonce, String.valueOf(createTime), YLZURI+"?meeting_record_id="+meeting_record_id+"&userid="+userid, "");// 查询会议录制地址String requestUri = "https://api.meeting.qq.com/v1/addresses?meeting_record_id="+meeting_record_id+"&userid="+userid;HttpGet request = new HttpGet(requestUri);// 设置文件类型:request.setHeader("Content-Type", "application/json;charset=UTF-8");request.setHeader("X-TC-Key",SecretId);request.setHeader("X-TC-Timestamp", String.valueOf(createTime));request.setHeader("X-TC-Nonce",nonce);request.setHeader("AppId",appId);request.setHeader("SdkId",SdkId);request.setHeader("X-TC-Signature",signature);request.setHeader("X-TC-Registered","1");//必填//传参HttpClient client = HttpClients.createDefault();HttpResponse response = client.execute(request);HttpEntity entity = response.getEntity();String result = EntityUtils.toString(entity, "UTF-8");return result;}/**********************时间戳*******************************************/public static int getSecondTimestamp(Date date){if (null == date) {return 0;}String timestamp = String.valueOf(date.getTime());int length = timestamp.length();if (length > 3) {return Integer.valueOf(timestamp.substring(0,length-3));} else {return 0;}}/**************************生成签名*************************************/private static String HMAC_ALGORITHM = "HmacSHA256";private static char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};static String bytesToHex(byte[] bytes) {char[] buf = new char[bytes.length * 2];int index = 0;for (byte b : bytes) {buf[index++] = HEX_CHAR[b >>> 4 & 0xf];buf[index++] = HEX_CHAR[b & 0xf];}return new String(buf);}/*** 生成签名,开发版本oracle jdk 1.8.0_221** @param secretId        邮件下发的secret_id* @param secretKey       邮件下发的secret_key* @param httpMethod      http请求方法 GET/POST/PUT等* @param headerNonce     X-TC-Nonce请求头,随机数* @param headerTimestamp X-TC-Timestamp请求头,当前时间的秒级时间戳* @param requestUri      请求uri,eg:/v1/meetings* @param requestBody     请求体,没有的设为空串* @return 签名,需要设置在请求头X-TC-Signature中* @throws NoSuchAlgorithmException e* @throws InvalidKeyException      e*/static String sign(String secretId, String secretKey, String httpMethod, String headerNonce, String headerTimestamp, String requestUri, String requestBody)throws NoSuchAlgorithmException, InvalidKeyException {String tobeSig =httpMethod + "\nX-TC-Key="+ secretId + "&X-TC-Nonce="+ headerNonce + "&X-TC-Timestamp="+ headerTimestamp + "\n" + requestUri + "\n" + requestBody;Mac mac = Mac.getInstance(HMAC_ALGORITHM);SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), mac.getAlgorithm());mac.init(secretKeySpec);byte[] hash = mac.doFinal(tobeSig.getBytes(StandardCharsets.UTF_8));String hexHash = bytesToHex(hash);return new String(Base64.getEncoder().encode(hexHash.getBytes(StandardCharsets.UTF_8)));}

具体接口的传参,调用方法等,大家可以自行查看api文档。
下面说明一些注意点:

第一、注意:文档中注明SdkId为非必填


但是如果你在后台管理中添加了子应用就需要填写

第二、所有调用涉及到的时间 都是时间戳的形式,精确到秒,千万不要毫秒如创建会议时的开始时间,结束时间

第三、注意接口说明中的类型,千万不要错了,否则会报API签名错误

**第四、创建会议时,如果你需要录制功能,调用获取签名的时候,要将请求头中的X-TC-Registered 设置为1,否则你在管理后台看不到录制的文件。查询会议录制的时候也是一样。**这点很坑,问了腾讯客服好久才解决。

第五、注意请求接口的请求方式,是get还是post。如果是get方式,调用获取签名认证的时候,需要将“”字符串带入。

第六、java代码中,调用腾讯会议api接口请求的时候,不能使用简单的HttpURLConnection 创建连接、要使用 HttpClient方式,否则会一直报400错误,应该是https请求被拦截的缘故。

以上就是全部,希望能帮到你!如果还是有问题,可以下载我写的demo,包含了常用功能https://download.csdn.net/download/weixin_43832166/19085203

java调用腾讯会议api,开会录制问题相关推荐

  1. Java调用腾讯会议Api示例

    最近疫情严重,公司准备出一个在线视频会议功能,需要调用腾讯会议的API,经过查看腾讯的api文档和与腾讯技术人员交流,终于能成功调用Api接口了! 腾讯会议官方API:https://cloud.te ...

  2. 调用腾讯会议API创建会议

    测了好久, 主要就是生成签名参数注意一些, 下面是我测试成功的案例, 如果还不成功, 可以找腾讯客服, 他们会很耐心的解决你的问题 import java.io.BufferedReader; imp ...

  3. Java腾讯会议api接口,创建会议、查询会议,取消会议调用实例,以及踩过的坑

    最近公司需要做一个腾讯会议API的对接,经过查看官方文档和腾讯相关技术人员周旋~~以及不断踩坑,终于在我的不懈努力下,成功将API接口调通了 腾讯会议API接口文档:https://cloud.ten ...

  4. Java集成腾讯云音视频录制功能

    Java集成腾讯云音视频录制功能 为什么要实现音视频录制功能 因为我们做的是一个医院的项目,医生和患者可能进行视频通话和语音通话,为了保证通话的质量以及后续的问题, 我们就需要进行音视频录制,以便后续 ...

  5. Java调用有道翻译API包括APPID/密钥地址注册

    Java调用有道翻译API 因为上次发的资源用的我的APPID 导致我的服务已经停用了-- 现在把地址也一并奉上 希望都可以自己注册. APPID/密钥 注册地址:http://ai.youdao.c ...

  6. html调用腾讯地图定位当前位置,vue web项目中调用腾讯地图API获取当前位置的经纬度...

    vue web项目中调用腾讯地图API获取当前位置的经纬度 vue web项目中调用腾讯地图API获取当前位置的经纬度 在main.js 中添加一下代码 import axios from 'axio ...

  7. 微信小程序调用腾讯地图API进行驾车路线规划

    微信小程序调用腾讯地图API进行驾车路线规划 申请key 下载sdk 实现代码 遇到的问题 申请key 微信小程序的地图api是非常有限的,所以部分功能实现需要调用地图api.使用腾讯地图api过程如 ...

  8. 调用腾讯地图API、高德地图API 获取当前地理位置、经纬度

    调用腾讯地图API.高德地图API 获取当前地理位置.经纬度 web开发中,很多情况下都会需要获取当前位置的经纬度,在网上找了几个不同的地图,最终找到兼容比较好的腾讯地图API 1.调用腾讯地图API ...

  9. 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知

    前言 提到短信接口,相信每一位程序猿都不会陌生,它可以来帮助我们实现短信验证码.短信通知等等功能,刚好最近在帮朋友开发一套会员管理系统,里面也集成了短信功能(短信接口平台选择的是腾讯云平台),借此机会 ...

最新文章

  1. python基础准备
  2. 分布式ID-数据库多主模式
  3. hot编码 字符one_用 PyTorch 实现基于字符的循环神经网络 | Linux 中国
  4. Honey Tree(超好用的样板代码管理工具)
  5. cart算法_机器学习十大算法之一——决策树CART算法
  6. redis介绍、主从配置
  7. 测试中常见bug总结
  8. Bailian3256 矩阵的乘法【数学计算】
  9. 飞客蠕虫病毒的介绍与处理办法
  10. matlab绘制二元一次函数图像_如何用matlab数据拟合函数?用matlab求解多元线性方程...
  11. IDEA下配置安卓环境
  12. FreeRTOS历史版本更新记录
  13. 超出ipc连接数范围_终端服务器超出了最大允许连接数的解决办法 (全文)
  14. mysql临键锁_innodb临键锁锁定范围
  15. 评量子论的两本科普书籍
  16. pyscripter与python的关系_我用过的最好的python编辑器PyScripter
  17. k8s dns 无法解析
  18. 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)
  19. java 上传文件-生成文件首页缩略图 生成pdf 抓取图片
  20. Python之父抛弃Python!现在学Python还有用吗?

热门文章

  1. 电脑系统维护 学习网站 开机检查磁盘
  2. C语言实现去除字符串前面的空格
  3. Surfer18 绘制等势线图基本操作
  4. html代码特效粒子,html5彩色方块粒子动画效果代码
  5. 科大讯飞语音集成,非常详细的使用讲解
  6. win7修复计算机无鼠标,win7鼠标不动了怎么修复_win7鼠标不动了的解决办法
  7. 次世代游戏制作工作流程
  8. 搜狗浏览器收藏夹恢复的办法
  9. 快手上市,最隐秘的富豪:一笔赚回百亿美元
  10. 常见字读音(粤语)---(4)