We use multiple platform independent libraries, such as c-ares for DNS lookups, so the bulk of the code we write is not for any particular platform. By blending multiple connections (cell radio & wifi which could be connected to a personal hotspot for a second cell radio) the iPhone can transmit low latency, 720p/1080p video, and the quality of the iPhone camera is so good that most people don't notice the live video is coming from an iPhone and not a traditional broadcast TV camera.Īll of our networking code from interface discovery, dns lookups, reachability, bandwidth/latency/congestion prediction and data transmission is done at a low level API (in the case of the iPhone, BSD sockets). Our customers love it and the iPhone is used for quick breaking news when camera crews haven't arrived yet.
Since our software is platform independent we have ported the software to the iOS platform.
Our product is used by all major TV broadcasters to get live video from the field back to the TV station for on air broadcasts. By blending the connectivity of all the connections we can use the aggregate bandwidth while maintaining a low latency (as low as 800ms) and quality (congestion avoidance). The product we make is an appliance (we make both the hardware and software) that encodes broadcast quality video and transmits live video across multiple internet connections (up to 6 cell radios, ethernet, wifi, satellite). Thanks for replying, please allow me to clarify, with a little more preamble: This wasn't really too important when we were dealing with all the interfaces having IPv4 addresses, but now with IPv6 this changes everything. The only thing missing is to supply the dns servers for each interface. The product we have running on the iPhone is written in C++ and is multiplatform (runs on Windows, Linux, BSD, iOS, MacOS, Android, etc.) Our existing code handles all the dns lookups, source IP routing, etc. If the cell radio has an IPv6 dns server, I'll need to use that DNS server to resolve the IP address (to use the NAT64 provided by the cell company). however the function nw_path_get_dns_servers is not available, but looks like it could offer up the dns servers for the path/interface. nw_path_t has a bunch of exposed functions - nw_path_has_dns, nw_path_has_ipv6, etc.
An update handler would be called with a nw_path_t object. It would seem that getting the DNS servers for each interface would be a matter of creating a nw_path_monitor_t object to monitor network changes. There seems to be a function that is not documented in the header file It would seem that the new Network API in iOS12 looks promising. I couldn't find any API on iOS that does this, (if I'm wrong please let me know - that would be awesome!) So if WiFi is connected, I will not get the DNS servers for the cellular interface. Currently I am using libresolv, however this only returns the DNS server of the default route. I would like to get the DNS servers for each interface on an iOS device.