在切换不同的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 说明 |