On Sun, Nov 05, 2006 at 12:05:30PM -0500, Rich Felker wrote:
Ogg's problem with streaming is that the only way it avoids massive overhead is by packing large numbers of frames into a single Ogg "page". The page cannot be transmitted until it's complete, adding an extra senseless stage of latency to the stream.
To be a bit more explicit, Ogg fragments and/or packs individual data packets (I guess those are "frames" in NUT terminology?) into data chunks called "pages". So Mr. Felker is correct that one must buffer at least one page (one page from each stream in the general multiplexed case). Each Ogg page as a 27-byte header which includes a sync magic, timestamp, and crc. Additionally, the length of the packets (or fragments) in the page body are encoded in a series of bit counts, with counts less than 255 marking packet divisions. For a sequence of packets (frames) < 255 bytes each, where the length encoding requires one byte per packet (frame). The case mentioned above, where one puts one packet per page to minimize latency, that's an overhead of 28 bytes per packet. NUT appears to use variable length coding (a la utf-8) and table lookup (and delta coding for timestamps?) for most headers and the docs claim a 2 byte-per-packet overhead for a single-stream audio case, and that one can send the packets one-at-a-time, but I'm not clear how this interacts with the CRC field. Maybe that's assuming you write it for a group of frames at the end? In practice we've never cared about the latency. For interactive applications Ogg is not appropriate, and RTP over UDP is the already existing solution for low-latency work. For unicast delivery (what we mean when we say ogg was designed for streaming) the latency is not significant. For the more typical case (4k pages, 10 packets/page) the Ogg overhead works out to 4.8 bytes per packet (frame) or 1.2% vs 0.5% for NUT. So NUT is better by about a factor of two there, but both are very low. Ogg has bounded overhead as packets get bigger as well, but I don't understand NUT well enough to compare that case (say 17k video frames, where Ogg is 28+17k/255 bytes or 0.5%). Could you do a sketch there? So NUT seems to be intended for TCP streaming and file storage, much like Ogg. It uses a more complicated framing scheme to save a fraction of a percent of bitrate. Technically I think the more significant difference is that metadata and codec-independent muxing is embedded within the format rather than layered on top. IMO, -r