【Agora 本地录制最全总结- 基于Java SDK】

本地服务端录制

背景

作为一名最近加入 Agora 的技术人员,看到大家在使用该产品的过程中会遇到各种各样的问题,决定写一篇本地服务端录制相关的文章,方便后续有用到该产品的开发者能够更快的,更丝滑的跑起来;
在这里插入图片描述

当然了如果想省事省力,最推荐你们去使用Agora 的 云录制服务,通过四个 (start, stop,update, acquire) Restful 请求就可以实现录制功能了;
在这里插入图片描述

废话不多说,我们开始吧!

跑通SDK

开通服务

如果没有声网账户,需要去控制台注册一个 ,然后新建项目,拿到一个 AppID 和 临时Token , 用于后续调用 API 对用户进行鉴权; 参考官方文章

搭建环境

  1. 前提条件

    一台有公网IP 的 Linux 服务器
    在这里插入图片描述

  2. 下载SDK
    本文以Java SDK V3.0.7 举例,下载地址为 资源获取
    下载完成后,软件包结构如下:
    在这里插入图片描述

  3. 搭建开发环境(重要) 参考官方文档

    1. 安装编译器: gcc 4.4+

    2. 配置好 jdk 环境,并确保包含 jni.h。
      eg:

      export JAVA_HOME=/usr/lib/java/jdk1.8.0_381	 		//这里是你获取的jdk绝对路径
      export JRE_HOME=$JAVA_HOME/jre			//配置jre路径
      
    3. 配置好 Java 的 CLASSPATH 和 Linux 的 LD_LIBRARY_PATH 环境变量。
      eg:

      vim /etc/profile
      
      export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar 
      //classpath是javac编译器专用的一个环境变量,作用是告诉Java执行环境,
      //在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。
      export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin      //定义环境变量
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/Agora_Recording_SDK_for_Linux_FULL/samples/java/bin/io/agora/recording/
      
      source /etc/profile
      
    4. 如果你的网络环境设置了防火墙限制外网访问,请使用云代理服务。

    5. 打开所有的录制进程所使用的 UDP 端口,端口为在 RecordingConfig 中指定的 lowUdpPort 和 highUdpPort 范围之间的端口。

  4. 运行测试

    1. 打开命令行工具,在 samples/java 路径下执行如下命令进行环境预设置。其中 jni_path 请填入 jni.h 文件绝对路径,例如 /usr/java8u161/jdk1.8.0_161/include/:

      source build.sh pre_set jni_path
      
    2. 在 samples/java 下执行编译脚本:编译完成,在本目录下生成一个 bin 文件夹,其中的子目录 io/agora/recording 下会包含一个 librecording.so 文件,如图所示。

      ./build.sh build
      

      在这里插入图片描述

录制启动

打开命令行工具,在 /samples/java/bin 目录下执行 java RecordingSample 加上必要的参数设置, 即可快速开始录制,例如:

java RecordingSample --appId appID --channel channelName --uid 0 --channelProfile 1 --appliteDir Agora_Recording_SDK_for_Linux_FULL/bin

运行成功,控制台会有打印 RecordingSDK joinChannel success, channelId:XXX, uid:XXX 等信息
在这里插入图片描述

录制结束

  • 在默认情况下,当频道空闲(无用户)超过 300 秒(在 RecordingConfig 中的 idleLimitSec 可以设置该时间)后,录制实例会自动退出频道停止录制;
  • 录制完成后,调用 leaveChannel 方法离开频道,停止录制。录制结束后如果需要再次开始录制,必须重新创建并加入频道

编译运行SDK失败问题汇总

本地录制相关参数查看:

onLeaveCode: Agora On-Premise Recording SDK Java API Reference - 本地服务端录制 - 文档中心 - 声网Agora

onError: https://docs-legacy.agora.io/cn/Recording/API%20Reference/recording_java/interfaceio_1_1agora_1_1recording_1_1_recording_event_handler.html?platform=Linux#ab6562c4957b4db231fb538aa2f43b9d6

onError Native Error code: Java API Reference for Android - 互动直播 (Legacy) - 文档中心 - 声网Agora (shengwang.cn)

  • 问题一: /usr/bin/ld: cannot find -lstdc++
    在这里插入图片描述

    centos 8 以前解决方案:

    yum install glibc-static

    yum install libstdc+±static

    centos 8 解决方案:

    dnf --enablerepo=powertools install libstdc±static

  • 问题二: 集成时报错 java.land.UnsatisfiedLinkError: no recording in java.library.path
    在这里插入图片描述
    参考官方文档 正确配置LD_LIBRARY_PATH:如何处理录制 SDK 集成问题

  • 问题三:录制指令报错 RecordingSDK onError,error:2,stat code:3
    jni layer stopped!AgoraJniProxySdk destructor begin
    AgoraJniProxySdk destructor end
    jni layer has been exited…

    原因: error 2: API 调用了无效的参数。例如指定的频道名含有非法字符,或者 参数–appliteDir设置有误,该参数值为录制进程AgoraCoreService所在的目录,找不到录制子进程,可以打开对应时间的文件夹中的 recordingsys.log 确认具体原因
    在这里插入图片描述

  • 问题四 录制指令报错 Error: 13,with stat_code:3
    日志错误提示:Failed to call execvp(…/…/bin/AgoraCoreService): Permission denied

    原因:录制子进程AgoraCoreService没有执行权限,需要加上执行权限 chmod a+x AgoraCoreService

  • 问题五 录制指令报错 error: 5 和Error in mediasdk: 101

    原因: error: 5,APPID异常,可能因为token传入错误导致没能正确的解析出AppId。即:录制参数–channelKey 传入的数据有误

JavaWeb-Backend-Demo

背景

当涉及到后端开发时,javaweb-backend-demo 成为了大多数开发者的选择。我将 Java SDK 整合至后端,为前端开发人员提供了便捷的接口调用,使得开发流程更加高效。

项目介绍

  • 源码地址Agora-Local-Recording-JavaWeb-demo
    -

  • 接口说明:

    EndpointHTTP MethodRequest TypeRequest BodyResponse Status CodesResponse Body
    /record/getPropGET-None200 - 5XXDefault recording configuration information
    /record/testGET-None200 - 5XX“test ok”
    /record/startPOSTJSON{ "appId": "string", "channel": "string", "uid": "string" }200 - 5XX“Recording started successfully” or Error message
    /record/stopPOSTQuery ParameterNone200 - 5XX“Recording stop successfully” or Error message
    /record/helpGET-None-Help message with available commands
  • 集成 JavaWeb 注意事项

    如果有小伙伴自己集成SDK,可能会在运行项目时遇到如下错误:
    错误描述: java.lang.UnsatisfiedLinkError: com.douyu.wsd.record.sdk.RecordingSDK.createChannel(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/douyu/wsd/record/sdk/common/RecordingConfig;)Z在这里插入图片描述
    原因: 集成java sdk时,不要更改java文件存放目录,需要按照demo中的包名放置
    在这里插入图片描述

最后

GitHub 项目 javaweb-backend-demo 的开发经过了不小的努力。如果这个项目对你有所帮助,请别忘了给点一颗星星,将不胜感激。
在这里插入图片描述

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值