描述:

在做直播,社交类项目的时候,通常会用到一些im流监控的手段,来监控视频防止一些涉黄等不良东西出现,然后运营人员能直接监控,并且下线,警告等功能,比如直播的超管就能随时封禁直播间。今天我们就来对接声网的

接口,来实现监控的功能。

流程图


上面就是大概的业务逻辑,接下来就是看看声网的接口了。

视频录制监控

接口文档 : 云端录制文档

根据自己的业务来选择调用那个接口,我这里就先用视频截图,的接口了。

https://docs.agora.io/cn/cloud-recording/cloud_recording_screen_capture?platform=RESTful

请大家一定要先看好文档的没一个细节,避免入坑。

获取 resource ID

第一个接口,获取resource Id ,调用这个接口,成功后,会获取 resource Id ,然后再视频截图的接口中会需要用到。

这里是需要生成加密的一个认证,在其他的接口中,都会用到,所以我们弄成共用的方法来使用。

    public String getKey(){// 拼接客户 ID 和客户密钥并使用 base64 编码String plainCredentials = agoraToConfig.getAppKey() + ":" + agoraToConfig.getAppSecret();String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes()));// 创建 authorization headerString authorizationHeader = "Basic " + base64Credentials;return  authorizationHeader;}
    public String getAcquire(String cname,String uid) {JSONObject jsonObject = JSONUtil.createObj();JSONObject object = JSONUtil.createObj();object.set("resourceExpiredHour",24);object.set("scene",0);jsonObject.set("cname",cname);jsonObject.set("uid",uid);jsonObject.set("clientRequest",object);String authorization = HttpRequest.post(ACQUIRE.replaceAll("<yourappid>",agoraToConfig.getAppId())).header("Authorization", this.getKey()).header("Content-Type", "application/json;charset=utf-8").body(jsonObject.toString()).execute().body();JSONObject jsonObject1 = JSONUtil.parseObj(authorization);String resourceId = jsonObject1.getStr("resourceId");System.out.println(resourceId);return resourceId;}

代码中使用了hutool 工具类,大家都加入一下依赖。

       <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.6.5</version></dependency>

这里有一个小的细节,请大家注意,在官方给的文档参数中,这个参数是要在URL中替换的

https://api.agora.io/v1/apps/<yourappid>/cloud_recording/acquire

yourappid 替换成你的appid 这里注意了,不是请求参数,而是直接url上面替换参数。

开始录制

https://docs.agora.io/cn/cloud-recording/cloud_recording_api_rest?platform=RESTful#start

详细文档,请大家一定要注意观看,并且cname和uid都是保持一致的,不然就不能成功。

    public String modeStart() throws  Exception{String cname = RandomUtil.randomNumbers(6);String uid = RandomUtil.randomString("123456789",4);JSONObject jsonObject = JSONUtil.createObj();JSONObject clientRequest = JSONUtil.createObj();clientRequest.set("clientRequest",jsonObject);clientRequest.set("cname",cname);clientRequest.set("uid",uid);jsonObject.set("token",this.getChannelKey(cname,Long.valueOf(uid)).getData());JSONObject recordingConfig = JSONUtil.createObj();recordingConfig.set("channelType",0);recordingConfig.set("subscribeUidGroup",3);jsonObject.set("recordingConfig",recordingConfig);JSONObject snapshotConfig = JSONUtil.createObj();snapshotConfig.set("captureInterval",5);JSONArray array = JSONUtil.createArray();array.add("jpg");snapshotConfig.set("fileType",array.toArray());jsonObject.set("snapshotConfig",snapshotConfig);JSONObject storageConfig = JSONUtil.createObj();storageConfig.set("vendor",0);storageConfig.set("region",2);storageConfig.set("bucket",agoraToConfig.getBucket());storageConfig.set("accessKey",agoraToConfig.getAccessKey());storageConfig.set("secretKey",agoraToConfig.getSecretKey());JSONArray fileNamePrefix = JSONUtil.createArray();fileNamePrefix.add("monitor");storageConfig.set("fileNamePrefix",fileNamePrefix.toArray());jsonObject.set("storageConfig",storageConfig);String url = MODESTART.replaceAll("<yourappid>", agoraToConfig.getAppId()).replaceAll("<resourceid>", this.getAcquire(cname, uid));String authorization = HttpRequest.post(url).header("Authorization", this.getKey()).header("Content-Type", "application/json;charset=utf-8").body(clientRequest.toString()).execute().body();JSONObject object = JSONUtil.createObj();JSONObject parseObj = JSONUtil.parseObj(authorization);object.set("resourceId",parseObj.getStr("resourceId"));object.set("sid",parseObj.getStr("sid"));object.set("uid",uid);object.set("cname",cname);return object.toString();}

获取成功后,记得保持信息,在后续的stop 中会需要这几个信息。,resourceId ,sid ,uid,cname都需要

不保持,在后续的停止录制中,无法停止。调用视频截图后,当前接口就会一直监控着直播,然后每5秒截图上次到七牛云上面。

停止录制

看着官方文档的参数就知道了,在前面接口中的参数都需要保持起来,这里我就保持到redis中就行了。

    /*** 结束录制:* @return* @throws Exception*/public String modeStop(String authorization) throws Exception {JSONObject parseObj = JSONUtil.parseObj(authorization);JSONObject jsonObject = JSONUtil.createObj();JSONObject clientRequest = JSONUtil.createObj();jsonObject.set("cname",parseObj.getStr("cname"));jsonObject.set("uid",parseObj.getStr("uid"));jsonObject.set("clientRequest",clientRequest);System.out.println(authorization);String url = MODESTOP.replaceAll("<yourappid>", agoraToConfig.getAppId()).replaceAll("<resourceid>", parseObj.getStr("resourceId")).replaceAll("<sid>",parseObj.getStr("sid"));String body = HttpRequest.post(url).header("Authorization", this.getKey()).header("Content-Type", "application/json;charset=utf-8").body(jsonObject.toString()).execute().body();System.out.println(body);return body;}

目前为止,简单的视频直播监控就基本结束了,请大家注意,由于工作原因,我不可能把所有的代码都弄出来,这里的代码基本都实现了功能,还有一些业务方面的东西需要自己去弄,比如 key等东西。
实例代码在github上面需要的请自行拉取:spring-boot-integrate 然后后续会集成更多的模块进去,需要请点个star。后续会集成更多的接口实现,有需要的请保存。

如果这篇文章,有帮助到大家的,请给作者一个一键三连,谢谢

JAVA 对接 声网(agora) 屏幕截图功能实现直播监控相关推荐

  1. 声网Agora发布教育信息化解决方案 助力教育公平提效

    4月23日-25日,由中国教育装备行业协会主办的第79届教育装备展在厦门国际会展中心举办.作为赋能教育信息化的实时互动PaaS服务商,声网Agora应邀参会.展会现场,声网展示了基于实时音视频互动能力 ...

  2. 基于声网 Agora 信令 SDK 开发聊天室应用(一)

    文章作者:monkeyHi 本文是 声网 Agora 开发者的投稿.如有疑问,欢迎与作者交流. 社会高度发展的今天,大家都离不开社交和社交网络.近几年,直播行业的稳定高速发展,背后隐藏一个事实,大家需 ...

  3. 声网Agora 云端录制服务上线,30 分钟即可快速集成

    录制在很多实时音视频场景中都是必备功能,比如在线教育.金融双录.社交直播等.然而,对于很多不熟悉录制服务原理的人来讲,如果选错了录制服务,会遇到很多问题,例如录制文件丢失.维护与升级成本高等. 录制服 ...

  4. 声网Agora SDK支持50ms超低延时耳返 适配主流手机机型

    近年来,随着网络直播的火爆,直播唱歌成为了很多主播在直播间的必备技巧,同时全民K歌.唱吧等在线K歌软件的兴起,也让很多人足不出户也能享受K歌的乐趣,并成为越来越多人偏爱的在线娱乐方式.而不管是直播唱歌 ...

  5. 声网 Agora Share:从天到秒级效率提升,一切都为服务好 15 万+应用

    如今,实时音视频互动已成为生活中无处不在的场景,特别是疫情带来的"生活场景线上化",使亿万用户涌到线上,为线上应用带来了巨大流量.当实时音视频变成主流互动方式, 这项服务不仅仅是满 ...

  6. 从技术、服务到共创 声网 Agora 携手合作伙伴共建 RTC 生态

    10 月 24 日,实时音视频云服务开创者声网 Agora 在北京召开"未来·与声俱来"品牌发布会.作为品牌的首次正式对外发声,本次发布会展示了声网用 RTC 技术赋能全行业的战略 ...

  7. 【产业互联网周报】奇安信科创板IPO过会;声网Agora登陆纳斯达克;国产光刻机双工件台供应商华卓精科科创板IPO获受理...

     关注ITValue,看企业级最新鲜.最价值报道! 图片来源@视觉中国 | [产业互联网周报是由钛媒体TMTpost发布的特色产品,将整合本周最重要的企业级服务.云计算.大数据领域的前沿趋势.重磅政策 ...

  8. 声网 Agora 的 2019

    50+新增数据中心 300%全网带宽容量上涨 中国区支持百万大频道动态扩展能力 海外大频道扩容时间缩短50% 日分钟数超过6亿 支持 5G 网络下高清.大码率视频传输 移动端超分.感知视频编码.AI ...

  9. 4 分钟,快速了解声网 Agora SDK 3.0

    声网 Agora Native SDK 3.0 ,以及 Web SDK 3.0.2 ,已经正式发布上线一段时间了.如果大家没时间看文字,可以通过这个视频快速了解一下. 新版本 SDK 采用了全新的系统 ...

最新文章

  1. PHP Multipart/form-data remote dos Vulnerability
  2. 英特尔 AMT 漏洞比任何人想象的还要严重
  3. mysql 连接其他数据库_普通用户从其他主机连接MySQL数据库
  4. AndroidStudio安卓原生开发_activity之间复杂对象类型的数据传递---Android原生开发工作笔记92
  5. python注册登录+mysql_Flask+MySql实现用户登录注册
  6. 10深入Redis Cluster
  7. HyperLogLog设计和实战
  8. snb处理器hd3000显卡专用extra_最强i9-9900K处理器造就最强主机!华硕ROG GL12CX评测...
  9. 产品经理的自我修养—认知模式
  10. 张飞电子工程师速成视频教程百度云_张飞电子工程师速成视频教程第二部
  11. VM虚拟机下载安装步骤
  12. 安卓后门工具:backdoor-apk 教程
  13. omitting directory * 问题解决
  14. WIN2008R2修改远程桌面端口(不重启系统)
  15. HTTP:SSL证书简介!
  16. 么是形参?什么是实参?
  17. 潍坊学院计算机工程学院天一楼地址,计算机演讲稿的范文.doc
  18. android滴滴技术架构,滴滴乘客端Android架构解密_何斌斌.pdf
  19. PHP通过API获取手机号码归属地,手机号码
  20. php 5.2.17下载 64,php5.2.17

热门文章

  1. 电影版本名词解析(CAM,TS,TC,DVDSCR,DVDRIP,HR-HDTV)更新版
  2. STM32F407探索者(正点原子的资料)(百度链接)
  3. 开源云盘搭建部署 施工中~
  4. 【AIML系列-2】人工智能标记语言——初级标签教学
  5. php 怎么远程包含,利用PHP应用程序中的远程文件包含(RFI)并绕过远程URL包含限制...
  6. 《论语》原文及其全文翻译 学而篇8
  7. 按键精灵入门指引——应用导向学习
  8. FL Studio20.9中文补丁
  9. python怎么画地球_python画天空怎么画?
  10. C++ Windows Hook 消息钩子 详解