将iOS SDK集成到XCode中
本章节主要介绍如何快速将SDK集成到XCode当中,编译通过,并且将图像显示在APP上。
准备工作
- XCode (本章节使用的版本为 12.4)
- iOS SDK文件。
- 所有头文件
Cmd.h |
---|
IvyIoApi.h |
IvyIoApi_Internal.h |
IvyIoDef.h |
IvyIoDef_Internal.h |
- 所有库文件
libavcodec.a |
---|
libavformat.a |
libavutil.a |
libcrypto.a |
libFosDuoSdk.a |
libIvyIoSdk.a |
libIvySdk.a |
libp2p.a |
libssl.a |
libswscale.a |
libx265.a |
libIOTCAPIs_ALL.a |
开始集成SDK
- 新建一个项目
- 给工程命名,使用oc开发语言
- 工程下新建一个SDK目录,将头文件和库文件都拷贝进去
- IDE工程左侧增加一个SDK目录(不创建实际文件夹),将所有.h和.a添加到此目录下
- 再增加一个libc++.1.tbd库
- 将bitcode设置为no
- 引入头文件,调用初始化SDK接口 (IVYIO_Init接口必须要调用一次)
- 点击编译按钮,编译通过!
获取设备直播图像数据
- 搜索局域网内设备, 搜索到的每个设备节点包含IP/端口/MAC/UID等信息
IVYIO_DEV_NODE nodes[32] = {0};
int count = sizeof(nodes) / sizeof(IVYIO_DEV_NODE);
IVYIO_Discovery(nodes, &count);
- 创建设备句柄
IVYIO_URL url;
memset(&url, 0, sizeof(IVYIO_URL));
struct in_addr addr;
addr.s_addr = m_nodes[0].uIP;
char *szIP = inet_ntoa(addr);
strcpy(url.szUrl, szIP);
url.usPort = your_dev_pot;
// 设备的用户名是"admin"
// 如果设备UID的第22位(从0开始)为'89ABCDEF'其中的任意一个字符,
// 设备的默认密码需要通过算法生成,具体参见本章后边 <生成默认密码> 章节
// 其他情况,默认密码为""(长度为0的字符串)
IVYIO_HANDLE handle = IVYIO_CreateEx_1(&url, nodes[0].szUid, nodes[0].szMac, dev_username, dev_password, IVYIO_P2P_MODE_UDP, nodes[0].uType, 0);
- 登录设备,如果设备在复位状态,需要修改密码后重新登录。
IVYIO_RESULT rst = IVYIO_Login(handle, 1000 * 5); // 单位是毫秒
if (IVYIO_RESULT_OK == rst)
{
// 登录设备成功。
}
else if (IVYIO_RESULT_OK_ON_RESET_STATE == rst)
{
// 设备处于复位状态需要,重新设置一个密码
// 如果不重新设置密码,打开直播将会失败。
}
else
{
// 其他错误
}
- 打开直播
if (IVYIO_DEV_IPC == nodes[0].uType || IVYIO_DEV_NVR == nodes[0].uType ||
IVYIO_DEV_FOS_IPC == nodes[0].uType || IVYIO_DEV_FOS_DOORBELL nodes[0].uType)
{
IVYIO_OPEN_VIDEO_ARGS_TYPE0 iovat;
iovat.openVideoArgsType = 0;
iovat.streamType = 0;
IVYIO_RESULT rst = IVYIO_OpenVideo(handle, &iovat, 1000 * 5, 0);
if (IVYIO_RESULT_OK == rst)
{
// 打开直播成功
}
}
- 获取直播数据
while (bRunning)
{
IVYIO_FRAME *frame = NULL;
int outlen = 0;
int speed = 0;
IVYIO_RESULT rst = IVYIO_GetStreamData(pDlg->m_handle, IVYIO_STREAM_VIDEO, (unsigned char **)&frame, &outlen, &speed, IVYIO_DECODE_ARGB32, 0);
if (IVYIO_RESULT_OK == rst && frame->len > 0)
{
// 获取到直播数据
// 利用你的视频绘制模块展示直播数据
}
else
{
// 休眠10ms
}
}
更改设备密码
// After login successful
char szResponse[1024] = {0}
char szCmdJson[256] = {0};
int lenOfResponse = sizeof(szResponse);
sprintf(szCmdJson, "{\"usr\":\"%s\", \"pwd\":\"%s\", \"newUsr\":\"%s\", \"newPwd\":\"%s\"}",
dev_username, dev_password, newUsername, newPassword);
IVYIO_RESULT rst = IVYIO_SendCommand(handle, 22023, (unsigned char *)szCmdJson, (unsigned char *)szResponse, &lenOfResponse, 1000 * 5);
if (IVYIO_RESULT_OK == rst)
{
// 如果szResponse中的ret字段为0,表示更改成功。
// 否则,失败
}
else
{
// failed!
}
生成默认密码
注意:需要导入iCryptoApi.h和libIvyCrypto.a两个文件到工程内,这个库用来生成设备默认密码的库
char szPassword[64] = {0};
if (GeneratePassword(nodes[0].szUid, szPassword) < 0)
{
// Generate password fail
}
else
{
// Success
// szPassword为生成的密码
}
文档更新时间: 2024-01-10 17:02 作者:庄小婵