# 硅基直播安卓端SDK 1.0使⽤⽂档

更新时间:2023年7月21日

本文介绍了如何使用硅基数字人服务提供的livesdk,包括下载安装、关键接口及代码示例。

# 物料准备

  1. 下载live_demo_android.zip (opens new window)
  2. 解压zip包,在LiveSdkDemo/app/libs目录下获取AAR格式的SDK包,将AAR包集成到您的工程项目中进行依赖。

# Gradle配置

工程下app模块添加如下配置:

dependencies {
    api "org.webrtc:google-webrtc:1.0.32006"
    //MQTT
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'

    ...
}

# 权限处理

在SDK中manifest已经添加网络、音频、蓝牙等权限申请,如果需要开启摄像头需要添加camera权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

# SDK关键接口

  1. AudioConvert: 音频文件重采样相关。
   /**
   * @param uri  需要重采样的uri
   * @Return 重采样输出文件路径
   */
   String audioResample4Uri(Context context, Uri uri)
   /**
   * @param srcPath  需要重采样的文件路径
   * @Return 重采样输出文件路径
   */
   String audioResample4Path(Context context, String srcPath)
  1. FFmpegCmd: 生成ffmpeg相关命令行参数。
   /**
   * 音频文件转换成指定采样率的wav
   * @param inputPath  输入wav路径
   * @param outputPath  输出wav路径
   * @return 0成功
   */
   int transformWav(String inputPath, String outPath)
  1. FFmpegUtil:生成ffmpeg相关命令行参数

  2. MQTTClient: 客户端服务器通信相关

   /**
   * 初始化
   *
   * @param imOptions   连接mqtt相关参数
   * @param callback  消息回调
   */
   public MQTTClient(Context context, LiveOptions.IMOptions imOptions, MQTTCallback callback)

   /**
   * 订阅服务器消息
   */
   public void subscribe()

   /**
   * 尝试链接后台服务器
   * @param sessionId  连接session
   * @param 发送topic
   * @param 接收消息topic
   */
   connect(String sessionId, String topicPub, String topicSub)

   /**
   *判断连接状态
   */
   boolean isConnected()

   /**
   *向服务器发送消息
   */
   void sendMessage(String msg)

   /**
   *释放资源
   */
   void release()
  1. interface MQTTCallback:mqtt回调
  {
    //连接完成
    void onConnectComplete();
    //连接失败
    void onConnectFail(String msg);
    //连接断开
    void onConnectLost(String msg);
    //收到消息
    void onMessage(String message);
  }
  1. RtcEngine:rtc相关
/**
*@param context 上下文对象
*@param eglBaseContext gl对象
*@param sessionOptions 存储音频文件对象
*@param rtcOptions rtc连接参数
*@param peerObserver rtc回调
*@param sdpObserver sdp回调
*/
public RtcEngine(Context context, EglBase.Context eglBaseContext, LiveOptions.SessionOptions sessionOptions, LiveOptions.RTCOptions rtcOptions,PeerConnection.Observer peerObserver, SdpObserver sdpObserver)
  1. LiveOptions:rtc和mqtt相关配置
class SessionOptions 会话相关配置
class IMOptions 即时通信业务相关配置
class RTCOptions rtc相关配置
  1. LiveCore:rtc相关类
/**
*@param context 上下文对象
*@param eglBaseContext gl对象
*@param sessionOptions 存储音频文件对象
*@param imOptions mqtt连接参数
*@param rtcOptions rtc连接参数
*@param callback 回调
*/
public LiveCore(@NotNull Context context, @NotNull EglBase.Context eglBaseContext,
                  @NotNull LiveOptions.SessionOptions sessionOptions,
                  @NotNull LiveOptions.IMOptions imOptions,
                  @NotNull LiveOptions.RTCOptions rtcOptions,
                  @NotNull LiveCallback callback)

/**
*连接rtc
*/                  
public void connect()

/**
*向后台发起关闭回话请求,会在onStop中回调关闭成功,注意要处理超时或IM信息丢失时强制关闭。
* 强制关闭连接可能会导致资源一段时间内无法释放。需要等会儿重试。
*/                  
public void sendStop()

/**
*请求推送rtmp流
*/                  
public void requestPush()

/**
*释放会话以及IM资源
*/                  
public void release()

/**
*创建连接
*/                  
public void createSession()

# 调用步骤

  1. xml创建SurfaceViewRenderer对象
  2. 创建SessionOptions对象并配置参数
  3. 创建IMOptions对象并配置参数
  4. 创建RTCOptions对象并配置参数
  5. 创建LiveCore对象并配置参数
  6. 调用LiveCore对象的connect函数
  7. 在LiveCore对象onShow回调,调用requestPush请求开始推流
  8. 在LiveCore对象onAddTrack回调,调用addSink将音频和视频通道加入render

# Proguard配置

如果代码使用了混淆,请在proguard-rules.pro中配置:

-keep public class ai.guiji.live.sdk.**{*;}

# 注意事项

RTC模块需要使用麦克风,需要动态申请权限。