NDI入门教程一

前言:之前2023年基于rk3588 linux平台开发ndi直播设备。做的文档笔记。

一、 简介:

  NDI是Network Device Interface的简称,是一种IP网络设备接口协议;使视频兼容产品通过局域网进行视频共享的开放式协议。NDI协议能实时通过IP网络对多重广播级质量信号进行传输和接收,同时具有低延迟、精确帧视频、数据流相互识别和通信等特性。2016年发布第一版。
        在一个局域网内,NDI设备可以自动发现接收其他NDI协议流,可以灵活获取到任意的信号输入与输出,是一个完全创新的IP工作模式。普通网线或无线wifi连接即可,不必sdi,hdmi线连接,减少布线成本。国外很多电视台已经把传统SDI/HDMI的视频传输形式转为NDI网络传输。NDI是一种全新的网络应用领域,简化了系统的信号传输。
三代 ndi协议对比:


两种类型的NDI®
NDI®主要分为两种类型,高带宽 NDI®(High Bandwidth NDI®)和 NDI®丨HX。它们都可以通过IP传输高质量的视频。高带宽 NDI® 的特点是通过IP以低延迟实现高质量的视频传输,而 NDI®丨HX 的特点是支持在有限带宽下实现高效的视频传输。(wifi 电池产品使用这个版本)。WIKI: https://en.wikipedia.org/wiki/Network_Device_Interface
二、NDI应用场景:

NDI可以直接热靴摄像机,可将SDI或HDMI视频源编码成NDI协议流,通过有线网络或无线WIFI网络进行视频传输,通过有线网络或无线WIFI网络进行视频传输,减少布线成本和部署时间,很好地满足演播室、现场多机位视频制作等需求。
内置5G加强WIFI模块,可实现更加稳定的无线传输,同时支持USB扩充有线网络传输;
内置大容量锂电池供电,亦支持5-16v外置移动电源供电,无需考虑有线供电问题;
主动散热设计(内置风扇),适应高温工况,运行稳定可靠;
便携小巧,仅重380g,自带热靴,便于摄像机一体化安装;
支持使用手机/PAD端APP实现无线远程管理,操作便捷;
支持双码流输出,主码率支持1080p60Hz的视频编码,子码流支持720 p 60Hz的视频编码,可同时推流到两个平台;
自带SD/TF卡槽,支持本地录制,同时支持NAS网络存储;
支持1080p60Hz视频格式,输出分辨率可自定义;
采用进口芯片及H.264视频编码技术,同时结合视频动态降噪、图像增强等技术处理,可实现低码率编码并能保证高清画质;
直播领域:


三、技术原理:

NDI设计为在千兆以太网上运行,NDI编解码器将以通常约为100Mbit/s 的可变比特率传输1080i格式的高清视频。
默认情况下,NDI 使用 mDNS(Bonjour / Zeroconf)发现机制在局域网上登记源信息,这样NDI接收设备可以自动发现并提供其自身信息反馈给这些源。另外其他两种发现模式,NDI 访问和NDI 发现服务器,允许跨子网操作,而无需 mDNS。在创建NDI源时,会在NDI发送主机上的一系列端口中选择任意一个TCP端口来进行创建。当源被请求时,会在一个适当的端口上建立一个NDI接收器到NDI发送器的TCP连接。NDI 3.x版本采用带有FEC(前向纠错)功能的UDP组播或单播来代替TCP,并且可以在不使用链路聚合的情况下跨多个网络接口对流进行负载均衡。NDI 4.0 引入了multi- TCP 连接。
NDI 携带视频、多通道未压缩音频和元数据。 元数据信息可以双向发送,允许发送方和接收方通过NDI连接以任意XML 格式的元数据相互发送消息。这种定向元数据系统提供了如返送给NDI源TALLY信息等功能,使NDI源了解到它在直播中是否处于PGM(节目播出)或PVW(预览)状态。 NDI 还允许发送方确定连接的接收方数量,因此当没有连接 NDI 接收方客户端时,发送端可以跳过不必要的处理和网络带宽使用。 NDI 接收器可以选择连接到各种流组合,以支持不需要视频的纯音频或纯元数据连接。
与其他协议比较:

四、开发工具 & SDK:

NDI软件开发工具包(SDK)可用于Windows、Linux和MacOS,还可以移植到iOS、TVOS、Android、Raspberry PI和FPGA平台。标准NDI SDK为免费的专利许但是只能传rgb数据和pcm裸数据,NDI 高级SDK为设备制造商提供对于压缩数据(h264+aac)和其他功能的直接访问,需要商业许可。未授权只能使用30分钟,30分钟后只能传输音频流无法传输视频流。
windows上位机:
https://ndi.tv/tools/#download-tools
下载双击安装即可。
ndi linux sdk下载:
https://www.ndi.tv/sdk/
我们下载 Advanced Developer Kit版本,这个版本才支持发送h264+aac。


五、sdk介绍:

下载sdk后解压后得到一个脚本Install_NDI_Advanced_SDK_v5_Linux.sh,运行安装即可得到源码和使用文档。目录结构:
bin //存放各个cpu平台的编译链工具
documentation //官方使用文档主要看NDI Advanced SDK.pdf
examples // 各种测试程序代码
include // 头文件
lib // 各个cpu平台编译好的ndi so库。所有nid的api都在 libndi.so.5.5.2
并没有ndi的实现源码,只有头文件和so库。以后出问题只能找官方分析。但是目前我们没有联系渠道。
Ubuntu:进入example目录直接执行make即可编译出所有测试程序。
arm:
declare -x CROSS_COMPILE="aarch64-linux-gnu-"
declare -x ARCH="arm64"
make NDILIB=aarch64-rockchip-linux-gnu CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++ -j8
支持的平台:
xxxx@xxxx-VirtualBox:~/work/rk3588/NDI_Advanced_SDK_v5_Linux/bin$ ls
aarch64-himix100-linux    aarch64-rockchip-linux-gnu  arm-hisiv300-linux  arm-histbv310-linux           arm-rpi3-linux-gnueabihf
aarch64-himix200-linux    aarch64-rpi4-linux-gnueabi  arm-hisiv400-linux  arm-newtek-linux-gnueabihf    arm-rpi4-linux-gnueabihf
aarch64-mix210-linux      arm-himix100-linux          arm-hisiv500-linux  arm-rockchip-linux-gnueabihf  arm-sigmastar-linux-gnueabihf
aarch64-mix410-linux      arm-himix200-linux          arm-hisiv510-linux  arm-rpi1-linux-gnueabihf      i686-linux-gnu
aarch64-newtek-linux-gnu  arm-himix410-linux          arm-hisiv600-linux  arm-rpi2-linux-gnueabihf      x86_64-linux-gnu
理论上只有使用上面的编译器的平台才能跑ndi so库。理论上aarch64-newtek-linux-gnu可以用于arm64平台。

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
安装NDI SDK的教程如下: 1. 首先,你需要前往NDI SDK的官方网站下载完整的SDK。你可以在https://www.newtek.com/ndi/sdk/找到下载链接。点击下载链接,然后选择适合你操作系统的版本进行下载。 2. 下载完成后,解压缩SDK文件到你想要安装的目录。 3. 打开你的开发环境,比如Visual Studio等。 4. 在你的项目中,找到你的main函数所在的文件。 5. 在main函数的开头,添加以下代码来初始化NDI库: ```c++ if (!NDIlib_initialize()) return 0; ``` 这段代码会初始化NDI库,确保你的程序可以正常使用NDI功能。 6. 如果你需要使用NDI的发现功能,你可以在main函数中添加以下代码来创建一个NDI发现实例: ```c++ NDIlib_find_instance_t pNDI_find = NDIlib_find_create_v2(); if (!pNDI_find) return 0; ``` 这段代码会创建一个NDI发现实例,用于搜索和连接到NDI设备。 7. 如果你需要使用NDI的发送功能,你可以在main函数中添加以下代码来创建一个NDI发送实例: ```c++ NDIlib_send_instance_t pNDI_send = NDIlib_send_create(); if (!pNDI_send) return 0; ``` 这段代码会创建一个NDI发送实例,用于发送视频和音频数据。 8. 现在,你可以根据你的需求在main函数中继续编写你的代码,使用NDI SDK提供的功能。 请注意,以上代码只是示例,你需要根据你的具体情况进行适当的修改和调整。此外,为了正确使用NDI SDK,你还需要阅读SDK文档,并遵守SDK许可条款。 希望这个教程对你有帮助!如果你有任何其他问题,请随时提问。 #### 引用[.reference_title] - *1* [NDI技术实践与应用](https://blog.csdn.net/u014162133/article/details/103309780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ndi 推流拉流](https://blog.csdn.net/wangbuji/article/details/123012285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值