1. 主页
  2. 文档
  3. NDI 设备 HTTP API(Version 1.0)
  4. 8. 解码输出和切换的高级选项

8. 解码输出和切换的高级选项

在切换不同的NDI Source用于解码输出的时候,我们相信您一定希望这个切换是十分平滑和顺畅的,不能有任何的视频停滞、屏幕闪烁或其它不好的现象发生。

然而,我们要从技术的角度上告诉您一些事实:

  • 从发起一个NDI Source的连接,到我们真正得到视频/音频数据,这个过程需要一些时间,也许需要0.1秒、0.2秒或者更长,这取决于您的网络环境。
  • 如果切换到新的NDI Source,它的视频分辨率/帧率发生了变化,我们需要重新配置HDMI/SDI的输出格式。非常糟糕,这时候屏幕可能会短暂地没有输出或闪烁。

上面的情况,都会带给我们不好的体验。

我们尽最大的努力帮助您解决这些问题,在可能的情况下,我们会提供一些可设置的选项帮助您解决画面停滞、闪烁等问题。当然,NDI Decoder由于硬件能力的限制,目前的版本可能会有一些仍然无法解决的问题。

在以下情况下,NDI Decoder可以很好地解决画面停滞、闪烁的问题:

  • 因为NDI连接需要等待时间而造成的停滞:通过 8.1 /api/v1/decoder/output/set_smoothness 设置平滑切换的等待超时可以解决;
  • 在分辨率没有变化而只是帧率变化的情况下:通过 8.3 /api/v1/decoder/output/set 强制指定输出的帧率可以解决;
  • 通过8.3 /api/v1/decoder/output/set指定输出格式为deinterlace,可以将interlaced视频转换为progressive输出,以防止interlaced/progressive视频的变化而造成的显示问题。

在以下情况下,由于硬件能力的限制,目前还可能出现输出闪烁的情况:

  • 分辨率发生改变

Module name: decoder/output

Basic URL: /api/v1/decoder/output/

设置平滑切换的等待超时

为解决NDI连接需要等待时间而造成的画面停滞问题,我们采取了这样的策略:

当您发起新的NDI Source切换请求时,NDI Decoder会保持当前的解码不停止,同时尝试连接您指定的新的NDI Source。如果新的Source连接成功并得到了视频/音频数据,NDI Decoder会立即停止老的NDI Source解码、切换到新的NDI Source上。这样,可以让您的切换“如丝滑般顺畅”。

当然,真实的世界总是不尽如人意。有这么几种情况:

  • 您的网络确实太糟糕了。新的NDI Source连接需要待很久很久的时间才能成功。如果NDI Decoder按照上面的方法一直输出老的NDI Source的内容,也许您会产生错觉,觉得您发起的NDI Source切换请求根本没有成功。
  • 新的NDI Source完全无法连接。

为了应对这些情况,我们的策略是:您可以指定一个等待新的NDI Source连接成功的超时时间,如果Source在这个超时时间之内完成了连接,那么很好、这就是您所期望的;而如果在超时时间之内新的Source仍然无法连接,那么很不幸,我们需要强制停止当前的NDI Source解码输出,然后一直等待新的Source就绪。

如果您将这个超时设置为0,聪明的你一定想到了会发生什么——它会立即停止老的NDI Source,然后再重新连接新的Source。这将会导致出现画面停滞的现象。

API URL

**/api/v1/decoder/output/set_smoothness**

Request

Method: **GET/POST**
Parameter Value 说明
timeout [INT], Required 指定平滑切换的等待超时。单位:ms。
如果指定为0,表示不处理平滑切换。

Response

Example:

{
    "result": "ok"
}

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

获取平滑切换的等待超时

API URL

**/api/v1/decoder/output/get_smoothness**

Request

Method: **GET/POST**

Parameters: **NONE**

Response

Example:

{
    "result": "ok",
    "data": {
        "timeout": 200
    }
}

Data字段说明:

Field Value 说明
timeout [INT] 当前的平滑切换等待超时,单位:ms

设置视频/音频输出的高级选项

NDI Decoder输出视频/音频的默认规则是跟随NDI Source的格式,即输出的视频分辨率/帧率、音频的采样率/声道数和NDI Source保持一致。

但是您可以指定视频输出分辨率、帧率、音频采样率的高级选项。

API URL

**/api/v1/decoder/output/set**

Request

Method: **GET/POST**
Parameter Value 说明
resolution [STRING], Optional 目前您可以设置以下选项值:
auto: 默认,跟随NDI Source的分辨率
deint: 如果NDI Source的分辨率是interlaced格式,将自动deinterlace到progressive格式(1080i -> 1080p转换)。如果Source的视频格式本身就是progressive,则不受任何影响。
frame_rate [INT], Optional 指定视频输出的帧率。可选的值包括:
23.98, 24, 25, 29.97, 30, 50, 59.94, 60 以及一个特殊的值: 0
0表示使用NDI Source相同的帧率。
如果指定一个有效的帧率值,NDI Decoder会自动执行帧率转换。例如,NDI Source的原始视频格式是1920x1080p 60Hz,但如果指定frame_rate为29.97,NDI Decoder会自动转换为 1920x1080p 29.97Hz输出。
sample_rate [INT], Optional 指音频的输出采样率。
注意: 由于当前版本硬件的能力限制,sample_rate只允许设置为48000。所以,目前请忽略该参数。

Response

Example:

{
    "result": "ok"
}

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

获取视频/音频输出的高级选项


API URL

**/api/v1/decoder/output/get**

Request

Method: **GET/POST**

Parameters: **NONE**

Response

Example:

{
    "result": "ok",
    "data": {
        "resolution": "auto",
        "frame_rate": 59.94,
        "sample_rate": 48000
    }
}
Field Value 说明
resolution [STRING] 参见 设置视频/音频输出的高级选项/api/v1/decoder/output/set 说明
frame_rate [INT] 参见 设置视频/音频输出的高级选项/api/v1/decoder/output/set 说明
sample_rate [INT] 参见 设置视频/音频输出的高级选项/api/v1/decoder/output/set 说明

我们要如何帮助您?