# README.oc file for dsmcc-mhp-tools/src/dsmcc-oc dsmcc-oc: create an ObjectCarousel. If you want to include stream- or stream-event objects in the stream, then you have to mark them accordingly. Stream-objects are recognized by the execute-bit which has to be set in the bitmask of the executing user, while stream-events are recognized by the write+execute bits, which both have to be set. First, Stream- and Stream-Event objects include a description which can be provided by the broadcaster, e.g. a short textual description about e.g. what the object is for. After that, some information about the referenced streams follow, i.e. a component-tag identifying the elementary stream associated with an MPEG-Program, then a component-tag associated with the elementary stream where NPT-descriptors are broadcasted followed by the NPT-timabase (which is interpreted for Stream-Event objects only), and finally a component-tag associated with a stream containing Stream-Events (all associations hexadecimal); after the associations the stream-duration in seconds and milliseconds (decimal) is read and finally the data-types included with the referenced stream, i.e. a boolean-triple which stands for (audio,video,data). Stream-Event objects also include their event-names and event-ids; there have to be the same number of names as ids - the list of events starts with an event-name followed by its associated event-id. Format for Stream: { + Description string max. 255 characters (can include linebreaks) + Prog-CTag NPT-CTag NPT-Base STE-CTag DurSec DurMilliSec AUDIO VIDEO DATA } Format for StreamEvent: { + Description string max. 255 characters (can include linebreaks) + Prog-CTag NPT-CTag NPT-Base STE-CTag DurSec DurMilliSec AUDIO VIDEO DATA + EventName (+linebreak) followed by + the associated EventID in hex. format } For an example how stream- and stream-event objects are formatted look e.g. at example/teststream resp. example/teststreamevent. Additionally, if you want to include dummy stream-event-descriptors in the stream, e.g. for really basic testing, pass the '-ste' option to the encoder (this puts in descriptors referring to all event-ids described by all stream-event-objects included within the object- carousel twice in the stream: once at the beginning and second at the end of the stream, whereby the descriptor-version gets incremented. Otherwise, you can use the other tools to create single descriptors and put them in real-time into the stream, by your streaming-server. You can also include references to object in other carousels, i.e. these references include a lite options profile instead of a biop profile in their IOR. Such links to external objects are represented by soft-links. The name of the link itself stands for the object-name in the current ObjectCarousel, where the destination-path follows a fixed format: The relative path to the referenced object in the external carousel followed by a colon-separeted list including the object-type (which can be "dir", "fil", "str" or "ste") and the carousel-location of the external ObjectCarousel, i.e. carousel-id, original network-id, transport-stream-id and finally the service-id (all in hex. format). External reference (LiteOptionsProfile) softlink format: { RelPathToObjInOtherCarousel:RefObjType:CarouselID:ONID:TSID:ServiceID } For an example how links to external objects are formatted look e.g. at example/pictures. You also have the possibility to distribute an ObjectCarousel over multiple PIDs. For each directory path inside the ObjectCarousel's root a DataCarousel is created which is put into a separate MPEG2 elemenraty stream file. Note: all DataCarousels's data must be disjunct, i.e. if the directory '/foo' was already defined as a separate DataCarousel, then the encoding of '/foo/bar' into another one will be not allowed. And of course, all files to encode should be readable. Check 'dsmcc-oc --help'.