DSM-CC And Service Information

It's not enough to simply broadcast DSM-CC carousels or streams as part of your service - a receiver needs to know what that data is, and how it can find it. To this end, DSM-CC has defined a number of additions to service information that are used to describe the data that is being broadcast.

A note regarding standards versions: If you are studying this in a DVB or in an MHP/OCAP context, please not that some of the service information relating to data broadcasting - specifically, that related to IP data encapsulated in DSM-CC - was changed a recent version of the DVB data broadcasting specification. This changed between MHP 1.0.2 and MHP 1.0.3, and so MHP 1.0.3 refers to the newer version of the specification.

The current OCAP specification refers to version 1.0.2 of the MHP standard, and so OCAP receivers must follow the old version of the data broadcasting specification for now. Given the scope of the changes between the old and new versions of the data broadcasting standards, this is not a big problem.

Descriptors and other parts of service information referring to the transport of IP over DSM-CC are described in the section of this tutorial covering multi-protocol encapsulation.

DSM-CC streams and the PMT

Just like any other stream in a service, DSM-CC streams must be listed in the PMT. For streams containing object or data carousels, the stream type must be set to 0x0B. Other DSM-CC streams have different stream types. Multi-protocol encapsulation streams can have a stream type of 0x0A, for instance, while DSM-CC descriptors such as those used for NPT have a stream type of 0x0C.

DSM-CC streams can also use the stream type 0x0D. This is not limited to a particular type of DSM-CC data, and so streams of this type can carry object carousels, data carousels, descriptors or any other type of DSM-CC data, including private sections. A receiver therefore needs to check streams with a type of 0x0D to see what kind of DSM-CC data they contain.

Descriptors defined by MPEG

The DSM-CC specification defines several descriptors that are used by the receiver and the DSM-CC implementation to resolve references within DSM-CC and to make it easier for the receiver to associate an object carousel with a particular service.

The carousel identifier descriptor

The carousel identifier descriptor is carried in the PMT for the service containing the object carousel, and helps the receiver to associate a particular carousel with that service.

Structure of the carousel identifier descriptor. Source: TR 101 202 v1.2.1 (DVB Data Broadcasting Implementation Guidelines).
Syntax Bits Type Value Comment
carousel_identifier_descriptor () {
descriptor_tag 8 uimsbf 0x13  
descriptor_length 8 uimsbf    
carousel_id 32 uimsbf    
formatId 8 uimsbf   Registered Identifier of the FormatSpecifier
FormatSpecifier () {
FormatSpecifier_byte 8 uimsbf See TR 101 202 v1.2.1, table 4.17a
N2 bytes
}        
for (i = 0; i < N; i++) {
private_data_byte 8 bits uimsbf    
}
}

In DVB and OCAP systems, the formatSpecifier field will have the following structure, depending on the value of the formatId field:

Structure of the format specifier in the carousel identifier descriptor. Source: TR 101 202 v1.2.1 (DVB Data Broadcasting Implementation Guidelines).
FormatId value Format Specifier definition length (bits) Comment
0x00 no FormatSpecifier   A value of 0x00 indicates the absence of a FormatSpecifier. Thus the location of the ServiceGateway is only possible through the "standard" way interpreting the DSI and DII

messages.
0x01 FormatSpecifier () {

This FormatSpecifier is an aggregation of the fields

necessary to locate the ServiceGateway, also found in the DSI and DII messages.

NOTE: All field types are "uimsbf".

ModuleVersion 8
ModuleId 16
BlockSize 16
ModuleSize 32
CompressionMethod 8
OriginalSize 32
TimeOut 8 Timeout in seconds
ObjectKeyLength 8  
for(i = 0; j < N1; i++) {
ObjectKeyData 8 Object key of the service gateway object.
}
}
0x02...0x7F Reserved for future use   The format Id values from 0x02 to 0x7F are reserved for future use of DVB.
0x80...0xFF Reserved for private use   The format Id values from 0x80 to 0xFF are reserved for private use.

The object key must be less than 4 bytes long for DVB and OCAP systems.

The association tag descriptor

As you will know if you have read the object carousel tutorial, association tags are used by DSM-CC to identify streams in a way that is not DVB-specific (like component tags) or which may change during re-multiplexing (like PIDs can). An association tag is linked to a stream by including an association tag descriptor in the descriptor loop of the stream's PMT entry.

The association tag descriptor has the following format:

Structure of the association tag descriptor. Source: TR 101 202 v1.2.1 (DVB Data Broadcasting Implementation Guidelines).
Syntax Bits Type Value Comment
association_tag_descriptor () {
descriptor_tag 8 uimsbf 0x14  
descriptor_length 8 uimsbf +  
association_tag 16 uimsbf +  
use 16 uimsbf 0x0000 DSI with IOR of SGW
0x0100 - 0x1FFF DVB reserved
0x2000 - 0xFFFF user private
if (use == 0x0000) {
selector_length 8 uimsbf 0x08  
transaction_id 32 uimsbf + transaction_id of DSI
timeout 32 uimsbf + timeout for DSI
} else if (use == 0x0001) {
selector_length 8 uimsbf 0x00  
} else {
selector_length 8 uimsbf N1  
for (i = 0; i < N1; i++) {
selector _byte 8 uimsbf    
}
}
for (i = 0; i < N2; i++) {
private_data_byte 8 uimsbf   private data
}
}

If the use field contains the value 0x00 then the selector contains the transaction ID of the DSI message for the carousel. A value of 0x01 indicates that the stream is carrying object carousel data (which may include a service gateway message). Values in the range 0x0100 to 0x1FFF are reserved by DVB, while ISO got there first and reserved the values 0x02 to 0xFF. By default, the value of the use field will be 0x100, which means that the selector may contain the transaction ID of the DSI message for the carousel, but does not have to do so.

As you may have noticed, the length of the private data field is not explicitly specified. In this case, the length of the private data is determined by the descriptor length: subtract the size of all other fields from the size of the descriptor and you have the size of your private data.

The deferred association tags descriptor

An object carousel can use (or refer to) elementary streams that are not part of the current service or transport stream. In this case, receivers may have problems mapping an association tag that refers to that stream to the stream itself. The deferred association tags descriptor defines which association tags are referred to by a given object carousel, and tells the receiver where they are. This allows the receiver to access those streams much more efficiently.

Each descriptor can contain a mapping for more than one association tag, although each of the association tags in the same deferred association tags descriptor must be present in the same MPEG-2 program. To get round the problem of association tags that refer to elementary streams in different programs, a PMT can contain more than one deferred association tags descriptor.

The descriptor has the following structure:

Structure of the deferred association tags descriptor. Source: TR 101 202 v1.2.1 (DVB Data Broadcasting Implementation Guidelines).
Syntax Bits Type Value Comment
deferred_association_tags_descriptor () {
descriptor_tag 8 uimsbf 0x15  
descriptor_length 8 uimsbf +  
association_tags_loop_length 8 uimsbf 2*N1 length in bytes
for (i = 0; i < N1; i++) {
association tag 16 uimsbf +  
}
transport_stream_id 16 bits uimsbf +  
program_number 16 bits uimsbf +  
org_network_id 16 +
for (j = 0; j < M; j++) {
private data 8 bits uimsbf +  
}
}

Descriptors defined by DVB

As well as the standard descriptors that are defined as part of the MPEG specification for DSM-CC, DVB has also defined a number of descriptors that are used with DSM-CC data carousels.

Some of these desriptors are carried in the SDT or EIT of the service or event that the carousel is associated with. Others are lower-level deswcriptors, and are carried in the ModuleInfo and GroupInfo structures that are part of DII and DSI messages. Some of these descriptors re-use descriptor tags that are used by other MPEG descriptors, however, so they must not be used outside of a DVB or OCAP system. If they are, a receiver could get VERY confused.

The data broadcast descriptor

The data broadcast descriptor is a means of describing the format and type of data that is encoded in an elementary stream that doesn't contain audio, video or SI data. As well as describing the type of stream, the data broadcast descriptor lets the broadcaster assign a textual description to it.

This descriptor can be carried in the SDT (in the descriptor loop for a particular service entry) or in the EIT (in the descriptor loop for a given event entry). Since it relies on optional tables (and on tables which are not present in ATSC service information), the data broadcast ID descriptor is often used in its place.

While this descriptor is defined in EN 300 468 (the DVB SI specification), some more detail that is specific to DSM-CC streams is added in EN 301 192.

Format of the data broadcast descriptor. Source: EN 300 468 v1.6.1 (DVB SI Specification).
Syntax No. of bits Mnemonic
data_broadcast_descriptor () {
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
data_broadcast_id 16 uimsbf
component_tag 8 uimsbf
selector_length 8 uimsbf
for (i = 0; i < selector_length; i++) {
selector_byte 8 uimsbf
}
ISO639-2[3]_language_code 24 bslbf
text_length 8 uimsbf
for (j = 0; j < text_length; j++) {
text_char 8 uimsbf
}
}

For a data broadcast descriptor that refers to a DSM-CC data carousel, the data broadcast ID must have the value 0x0006. In this case, the rest of the descriptor is taken up by the following structure:

Format of the data_carousel_info structure in a data broadcast descriptor. Source: EN 301 192 v1.3.1 (DVB Data Broadcasting Specification).
Syntax No. of bits Mnemonic
data_carousel_info () {
carousel_type_id 2 bits bslbf
reserved 6 bits bslbf
transaction_id 32 bits uimsbf
time_out_value_DSI 32 bits uimsbf
time_out_value_DII 32 bits uimsbf
reserved 2 bits bslbf
leak_rate 22 bits bslbf
}

The carousel ID gives a description of the carousel so that the receiver knows what type of message to look for. a value of 0x01 means that the descriptor is describing a one-layer carousel, while a value of 0x02 means it's describing a two layer carousel (and the receiver should therefore look for a DSI message for that carousel).

For object carousels, the data broadcast ID must have the value 0x0007. In this case, the descriptor contains an object_carousel_info structure:

Format of the object_carousel_info structure in a data broadcast descriptor. Source: EN 301 192 v1.3.1 (DVB Data Broadcasting Specification).
Syntax No. of bits Mnemonic
object_carousel_info () {
carousel_type_id 2 bslbf
reserved 6 bslbf
transaction_id 32 uimsbf
time_out_value_DSI 32 uimsbf
time_out_value_DII 32 uimsbf
reserved 2 bslbf
leak_rate 22 bslbf
for (i = 0; i < N; i++) {
ISO639-2[3]_language_code 24 bslbf
object_name_length 8 uimsbf
for (j = 0; j < object_name_length; j++) {
object_name_char 8 uimsbf
}
}
}

The data broadcast ID descriptor

The data broadcast ID descriptor is a shorter version of the data broadcast descriptor that doesn't include a textual description of the stream. Unlike the data broadcast descriptor, this descriptor is carried in the descriptor loop of the stream's entry in the PMT. For this reason, it's slightly more widely used that the data broadcast descriptor.

Format of the data broadcast ID descriptor. Source: EN 300 468 v1.6.1 (DVB SI Specification).
Syntax No. of bits Mnemonic
data broadcast ID descriptor () {
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
data_broadcast_id 16 uimsbf
for(i = 0; i < N; i++) {
id_selector _byte 8 uimsbf
}

MHP (and therefore also OCAP) can use a slightly different version of this descriptor. Additional data broadcast ID values have been defined for MHP object carousels (0xF0) and MHP-specific multi-protocol encapsulation streams (0xF1). For either of these data broadcast ID values, the selector will be 16 bits long and will identify the types of any MHP or OCAP applications that are signalled as auto-start (Java or HTML applications). This is designed to give receivers more information so that they can choose which data streams to connect to first.

The name descriptor

This descriptor allows the broadcaster to seta human-readable name for a module or group of modules. In cases where there are complex data carousels, this lets the broadcaster 'annotate' the carousel so that the receiver can use this information to provide some more friendly information to the user. While the users may not care (do you care what a module is called?), it may sometimes be useful.

Since this descriptor can be used to name modules or groups of modules, it can be carried in either the DII ModuleInfo structure or the DSI GroupInfo structure within the data carousel that is carrying the object carousel.

Format of the name descriptor. Source: EN 301 192 v1.3.1 (DVB Data Broadcasting Specification).
Syntax No. of bytes Value
name_descriptor () {
descriptor_tag 1 0x02
descriptor_length 1  
for (i = 0; i < N; i++) {
text_char 1 Name of the module, e.g. "index"
}
}

The type descriptor

This descriptor identifies the MIME type of data contained in a specific module or group. This may be carried either in the DII ModuleInfo structure or in the DSI GroupInfo structure.

Format of the name descriptor. Source: EN 301 192 v1.3.1 (DVB Data Broadcasting Specification).
Syntax No. of bytes Value
type_descriptor () {
descriptor_tag 1 0x01
descriptor_length 1  
for (i = 0; i < N; i++) {
type 1 Text string, e,g, "text/plain"
}
}

The compressed module descriptor

Data carousel modules may be compressed to save space in the transport stream. This descriptor indicates that the module has been compressed using the 'zlib' compression scheme. Since this descriptor only referrs to modules, it can only be carried in the DII ModuleInfo.

Format of the name descriptor. Source: EN 301 192 v1.3.1 (DVB Data Broadcasting Specification).
Syntax No. of bytes Value
compressed_module_descriptor () {
descriptor_tag 1 0x09
descriptor_length 1  
compression_method 1  
original_size 4  
}

The estimated download time descriptor

This descriptor gives the receiver some indication of how long it will take to download the module or group. This is useful for several reasons. First of all, the receiver can tell the user how long they will have to wait before the data they want is loaded. Second, a clever application can use this information to know how far in advance it should begin pre-fetching a module. This allows it to have the data that it needs before it actually has to have it. Given the latency involved n getting data from a data carousel, this can be extremely useful.

Like the type descriptor and the name descriptor, the estimated download time may be carried either in the DII ModuleInfo structure or in the DSI GroupInfo structure.

Format of the name descriptor. Source: EN 301 192 v1.3.1 (DVB Data Broadcasting Specification).
Syntax No. of bytes Value
estimated_download_time_descriptor
() {
descriptor_tag 1 0x07
descriptor_length 1  
est_download_time 4  
}