MCF logo

MCF specification, technical part/streaming

This is subpage of MCF-specification.

MCF supports simple streaming (playing files while downloading) with no trouble. It also supports broadcasting, which means that data may be transferred over a single-way link, which can be satellite connection, TCP/IP, or anything. The nice thing here is that people listening it don't need to tell ANYTHING to the server, so it works over one-way links too. Also, this is good for privacy: servers have no way to know which clients are listening their broadcasts. It also reduces network and CPU bandwidth requirements on the server.

When a client starts listening to the stream, he first waits until ASCII "MCF - " (the identifier in Main Header) is received. Then it receives all headers, just like if those were read from a file. After that it starts receiving Clusters, just like it would in normal file. What differs from files, is that timecodes and stream position obviously don't start at zero.

Some (but not all) normal MCF files can be broadcasted. For this we have two Magic Blocks.

Headers rebroadcast

This means that headers are rebroadcasted, so that new listeners can catch up with the stream. Type of the Magic Block is 0x01. The Block contains Main Header and optionally some other headers, defined by that Main Header. Clusters Element position in that Main Header must point to the next Cluster.

Clients which already have headers can just skip these new headers silently and keep using old headers. It is still recommended to also partially parse these new headers - Extended Info might change.

Stream Reset

This Magic Block can be used for terminating the broadcast cleanly (maybe forwarding users to another server). Unlike normal MCF, in Broadcast it directly terminates the stream. There is no Main Footer or anything. It can also only be a marker for changing settings: a new Main Header and a set of other headers is broadcasted. This allows changing resolutions, formats, etc. during the stream.

WORK IN PROGRESS!

Magic Block type is 0xFF.

Saving broadcasts to disk

File MCF specification is more strict than broadcast specification. Few things you have to take care of: (not all things are listed here)