将SDK集成到AndroidStudio中

本章节主要介绍如何快速将SDK集成到AndroidStudio当中,编译通过,并且获取到直播数据。

准备工作


  1. AndroidStudio (本章节使用的版本为 3.6)
  2. Android SDK文件。
  • Jar
IvyIoSdkJni.jar
  • so文件

有3种架构(arm64-v8a / armeabi / armeabi-v7a),每种架构下含有以下文件

libcrypto.so
libfaac.so
libIOTCAPIs.so
libIvyIoSdkJni.so
libmi_decoder.so
libmp4v2.so
libopenal.so
libopenal_aec.so
libp2pJni.so
libRDTAPIs.so
libssl.so

开始集成SDK


  1. 新建一个项目

  1. 给工程命名

  2. MyAndroi位工程目录,在工程目录目录下app/src/main/ 创建 jniLibs文件夹

  3. 将 arm64-v8a / armeabi / armeabi-v7a 拷贝到jniLibs下

  4. 将IvyIoSdkJni.jar拷贝到app/libs下

  5. 返回左侧工程目录查看,IvyIoSdkJni.jar和arm64-v8a / armeabi / armeabi-v7a会显示出来

  6. 选择 File->Project Structure,准备设置导入jar

  7. 选择Dependencies - >app -> + -> 2 jar Dependency

  8. 选择Step1.下选择框种的libs\IvyIoSdkJni.jar

  1. 工程设置完毕,编译运行通过!

获取设备直播图像数据


  1. 搜索局域网内设备, 搜索到的每个设备节点包含IP/端口/MAC/UID等信息
    DiscoveryNode nodes[] = new DiscoveryNode[32];
    int count = IvyIoSdkJni.discovery(nodes, 32);
  1. 创建设备句柄

Url url = new Url();
url.url = nodes[0].ip;
url.port = nodes[0].port;

// 默认设备的用户名是"admin"
// 如果设备UID的第22位(从0开始)为'89ABCDEF'其中的任意一个字符,
// 设备的默认密码需要通过算法生成,具体参见本章后边 <生成默认密码> 章节
// 其他情况,默认密码为""(长度为0的字符串)
int handle = IvyIoSdkJni.create(url, nodes[0].uid, nodes[0].mac, "dev_username", "dev_password", P2PMode.P2P_MODE_UDP);
  1. 登录设备,如果设备在复位状态,需要修改密码后重新登录。

int rst = IvyIoSdkJni.login(handle, 1000 * 10); // 单位是毫秒
if (Result.OK == rst)
{
    // 登录设备成功。
}
else if (OK_ON_RESET_STATE == rst)
{
    // 设备处于复位状态需要,重新设置一个密码
    // 如果不重新设置密码,打开直播将会失败。
}
else
{
    // 其他错误
}
  1. 打开直播

OpenVideoArgsType0 open = new OpenVideoArgsType0();
open.streamType = 0;
rst = IvyIoSdkJni.openVideo(handle, open, 1000 * 5, 0);
  1. 获取直播数据

FrameData frame = new FrameData();
IvyIoInteger speed = new IvyIoInteger(0);

while (bRunning) {
    int rst = IvyIoSdkJni.getStreamData(handle, StreamType.STREAM_VIDEO, frame, speed, DecodeFormat.RGBA32, 0);
    if (rst == Result.OK && frame.dataLen > 0) {
    // 成功获取到解码后的视频数据,解码后的数据格式位RGBA32
    } else {
        SystemClock.sleep(10);
    }
}

更改设备密码



    // After login successful
    String cmdJsonData = String.format("{\"usr\":\"%s\", \"pwd\":\"%s\", \"newUsr\":\"%s\", \"newPwd\":\"%s\"}", "dev_username","dev_password","newUsername", "newPassword");

    Response rspJson = new Response();
    rst = IvyIoSdkJni.sendCommand(handle, 22023, cmdJsonData, rspJson, 1000 * 5);
    if (Result.OK == rst)
    {
        // rspJson.resp种的ret字段位0,表示更改成功。
        // 否则,失败
    }
    else
    {
        // failed!
    }

生成默认密码


注意:需要导入IvyCryptoJni.jar和libIvyCryptoJni.so两个文件到工程内(方法和导入SDK文件一致,libIvyCryptoJni.so也分别有3个平台的文件arm64-v8a / armeabi / armeabi-v7a,文件名字都一样),这个库用来生成设备默认密码的库


    String password = IvyCryptoJni.generatePassword(nodes[0].uid);
    // password 为生成的默认的密码
文档更新时间: 2024-01-10 17:02   作者:庄小婵