在NewTek开发NDI时,NDI就已经被当作一种每个人都可以使用的、版权免费的技术,并且已被广播电视设备供应商广泛采用,包括一些有时被视为NewTek自有产品竞争对手的厂商。 NewTek提供了可用于Windows、Linux和MacOS平台的免费的NDI代码库和示例。NDI同时支持iOS,Android,Raspberry Pi和FPGA平台的开发应用。
与其他专业IP视频协议不同,例如运动图像和电视工程师协会(the Society of Motion Picture & Television Engineers)的SMPTE2110、SMPTE2022-6,还有自适应样本图像封装(ASPEN),这些协议都需要万兆网络环境。NDI设计为在千兆网络上运行,是使用现有网络基础设施就可以采用的协议。这是通过使用NDI编解码器进行视频数据压缩来实现的,该编解码器以平均约为100Mbit / s 的VBR(可变比特率)数据速率提供1080格式的全高清视频。
NDI使用mDNS(Bonjour /零配置网络)发现机制在局域网上登记源信息,使NDI接收设备可以自动发现并提供其自身信息反馈给这些源。在创建NDI源时,会在NDI发送主机上的一系列端口中选择任意一个TCP端口来进行创建。当源被请求时,会在一个适当的端口上建立一个NDI接收器到NDI发送器的TCP连接。NDI 3.x版本采用带有FEC(前向纠错)功能的UDP组播或单播来代替TCP,并且可以跨多个千兆网卡,传输负载均衡组播流,而无需链路聚合。
NDI携带视频、多通道无压缩音频和元数据。元数据信息可以在两个方向上发送,允许发送者和接收者通过NDI连接以XML形式的任意元数据相互发送消息。该方向性的元数据系统,提供了如返送给NDI源TALLY信息等功能,使NDI源了解到它在直播中是否处于PGM(节目播出)或PVW(预览)状态。 NDI还允许发送者确定其连接的接收器的数量,因此当没有NDI接收器客户端连接时,它们可以略过不必要的处理和网络带宽利用。
mDNS原理的简单理解——每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少
mDNS multicast DNS , 使用5353端口,组播地址 224.0.0.251。在一个没有常规DNS服务器的小型网络内,可以使用mDNS来实现类似DNS的编程接口、包格式和操作语义。MDNS协议的报文与DNS的报文结构相同,但有些字段对于MDNS来说有新的含义。
每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少。mDNS的域名与普通DNS的域名是通过后缀.local区分开来的。如果一台终端需要访问一个mDNS域名,他就会向局域网内发送组播,询问该域名的IP是多少。
例如:
一个设备接入网络,首先查询名称是否冲突,并通告当前服务器信息
冲突检测结束后,发送MDNS通告,通知其它设备更新DNS缓存
其它设备对该域名访问时,会发起MDNS查询;
首先,在 IP 协议里规定了一些保留地址,其中有一个是 224.0.0.251,对应的 IPv6 地址是 [FF02::FB]。
mDNS 协议规定了一个端口,5353。
mDNS 基于 UDP 协议。
每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少。当然,具体实现要比这个复杂点。
比如,A主机进入局域网,开启了 mDNS 服务,并向 mDNS 服务注册以下信息:我提供 FTP 服务,我的IP是 192.168.1.101,端口是 21。当B主机进入局域网,并向 B 主机的 mDNS 服务请求,我要找局域网内 FTP 服务器,B主机的 mDNS 就会去局域网内向其他的 mDNS 询问,并且最终告诉你,有一个IP地址为 192.168.1.101,端口号是 21 的主机,也就是 A 主机提供 FTP 服务,所以 B 主机就知道了 A 主机的 IP 地址和端口号了。
大概的原理就是这样子,mDNS提供的服务要远远多于这个,当然服务多但并不复杂。
在Apple 的设备上(电脑,笔记本,iphone,ipad等设备)都提供了这个服务。很多Linux设备也提供这个服务。Windows的设备可能没有提供,但是如果安装了iTunes之类的软件的话,也提供了这个服务。
这样就可以利用这个服务开发一些局域网内的自动发现,然后提供一些局域网内交互的应用了。
关于组播地址的分类: 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet; 224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效; 239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效;
这篇文章详细介绍IP组播的工作原理及其应用:
https://blog.csdn.net/kaoa000/article/details/78891775