1. 主页
  2. 文档
  3. NDI 设备 HTTP API(Version 1.0)
  4. 5. NDI Sources发现

5. NDI Sources发现

Module name: decoder/discovery

Basic URL: /api/v1/decoder/discovery/

注意:本模块的APIs仅当设备工作于Decoder模式下才有效。

获取网络中发现的NDI Sources


API URL

**/api/v1/decoder/discovery/get**

Request

Method: **GET/POST**
Parameter Value 说明
force [ANY], Optional 如果您指定了Force参数,无论它是什么值,代表要求NDI Device强制重新扫描网络。

Response

Example:

{
    "result": "ok",
    "data": [
        {
            "group": "public",
            "name": "Spark_IO-1916001002 (Channel 1)",
            "device_name": "Spark_IO-1916001002",
            "channel_name": "Channel 1",
            "url": "192.168.100.168:5961"
        },
        /* ... Each discovered items in the array ... */
    ],
    "data_size": 10
}

Data字段说明:

"data"是一个JSON数组,"data_size"是一个辅助描述"data"数组大小的字段(也许你用不上它)。

数组中的每一个item代表一个网络中发现的NDI Source:

Field Value 说明
group [STRING] NDI Source所在的NDI Group。如果您得到的Group是空字符串"",按照NDI的规则,它表示默认public group。
name [STRING] NDI Source Name。这是NDI Source原始的名称。如果您想获得设备名称、通道名称,请参考 device_name 和 channel_name。
device_name [STRING] 从 name 中解析出来的NDI Device Name,通常它也代表了NDI Source的host name。
channel_name [STRING] 从 name 中解析出来的NDI Channel Name
url [STRING] NDI Source URL。请注意:目前URL的格式为 \<IP>:\<port>,但是建议您不要认为它就是事实,NDI SDK并不担保这一点。在使用时,请保留url的原始值,不要尝试改变它。

TIPS:

A. NDI Discovery基于mDNS机制,在默认情况下,它只能发现与NDI Device在同一子网之内的NDI Sources。

B. 考虑到您的网络中可能存在大量的NDI Sources,由于NDI Discovery的速度不如您想象的那么快,所以NDI Device会cache之前发现的sources,并尽可能快地把结果返回给您。与此同时,NDI Device会持续在后台扫描并更新cache。所以,您得到的结果或许不完全是最新的(但是绝大多数情况下是)。您可以通过周期性地调用这个API来获得更新。

手动发现:指定IP和/或NDI Groups


大多数时候,我们可以通过网络自动发现NDI Sources。但有一些特殊情况:

  • NDI自动发现无法发现不在同一Subnet之内的NDI Sources;
  • NDI有逻辑分组,默认情况下,NDI自动发现只发现NDI分组为public的设备;
  • 其它因为网络策略而限制了网络组播(Multicast)的情况。

在这些情况下,我们可能需要手动指定NDI发现的目标IP地址和/或NDI Groups。

API URL

**/api/v1/decoder/discovery/set_manual_targets**

Request

Method: **POST** (请注意本API只能使用POST方法,且提交的参数需要使用JSON格式)

Parameters (example):
{
    "ip": ["192.168.100.3", "172.16.10.5" /*, ...*/],
    "group_name": ["public", "private_group", "my-group" /*,...*/]
}
参数 Value 说明
ip [ARRAY(STRING)] , Optional 通过数组的方式,指定一个或多个手动发现NDI Sources的目标IP地址。指定的IP地址可以与当前NDI Device不在同一Subnet之中。
该参数可选。如果没有指定,将清除之前指定的Manual IPs。
group_name [ARRAY(STRING)] , Optional 通过数组的方式,指定一个或多个手动发现NDI Sources的NDI Group Names。
该参数可选。如果没有指定,将清除之前指定的Group Names。

请注意

A) 您手动指定的IP和NDI Groups将会被设备记录和保存。因此,即使是您重新启动了设备,这些手动指定的IP和NDI Groups都会起作用。

B) 手动指定IP和NDI Groups,不会影响自动发现功能。因此,在发现结果列表中,您将看到所有自动发现的NDI Sources以及手动指定的Sources(如果目标存在的话)。

C) 如参数说明中所提示的,如果您不指定 "ip" 或 "group_name",意味着它会清除之前的设置。如果您需要保留之前的设置,请务必将原先的值作为参数传递。您可以通过 API /api/v1/decoder/discovery/get_manual_targets 获取之前设置的值 。

Response

Example:

{
    "result": "ok"
}

如果设置成功,将返回 result = "ok" 的消息;否则请参见 HTTP响应和错误处理 的标准错误消息描述。

5.3 获得指定的手动发现IP和NDI Groups


API URL

**/api/v1/decoder/discovery/get_manual_targets**

Request

Method: **GET/POST** 

Parameter: NONE

Response

Example:

{
    "result": "ok",
    "data": {
        "ip": ["192.168.100.3", "172.16.10.5" /*, ...*/],
        "group_name": ["public", "private_group", "my-group" /*,...*/]
    }
}

Data字段说明:

Field Value 说明
ip [ARRAY(STRING)] 通过数组返回所有手动指定的IP地址列表。
group_name [ARRAY(STRING)] 通过数组返回所有手动指定的NDI Groups。

我们要如何帮助您?