This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
dvb_native_ip [2025/12/08 16:30] jason created |
dvb_native_ip [2025/12/09 13:32] (current) jason |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Native IP Implementation ====== | ====== Native IP Implementation ====== | ||
| - | |||
| - | THIS PAGE IS UNDER CONSTRUCTION | ||
| ===== Overview ===== | ===== Overview ===== | ||
| Line 7: | Line 5: | ||
| DTVKit’s Native IP Implementation is an additional module in DVBCore. The architecture of the NIP module is outlined in the diagram below: | DTVKit’s Native IP Implementation is an additional module in DVBCore. The architecture of the NIP module is outlined in the diagram below: | ||
| - | <IMAGE GOES HERE> | + | {{ : |
| The NIP module is compatible with both GSE and MPE delivered NIP streams. The module performs MPE or GSE-Lite HEM decapsulation and FLUTE transport file extraction for NIP configuration files: NIF/ | The NIP module is compatible with both GSE and MPE delivered NIP streams. The module performs MPE or GSE-Lite HEM decapsulation and FLUTE transport file extraction for NIP configuration files: NIF/ | ||
| Note: Playback of a NIP service is not supported by the DVBCore module and this is left to the application to implement. The NIP service lists and associated AV content can be accessed via native APIs which can also be mapped to a simple http server (e.g. mongoose) to provide http endpoints for service list information and AV (DASH) content. | Note: Playback of a NIP service is not supported by the DVBCore module and this is left to the application to implement. The NIP service lists and associated AV content can be accessed via native APIs which can also be mapped to a simple http server (e.g. mongoose) to provide http endpoints for service list information and AV (DASH) content. | ||
| - | ====== Operation ====== | ||
| - | Steps: | + | ==== Build Instructions ==== |
| + | The NIP module builds as part of DVBCore but to enable it the following options must be configured in the ‘example_setenv.sh’ | ||
| + | ''# | ||
| + | |||
| + | export DTVKIT_INTEGRATE_DVBNIP=1'' | ||
| + | |||
| + | ''# | ||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | |||
| + | In additional the following additional libraries are required in your build environment: | ||
| + | * libxml2-dev | ||
| + | Once these prerequisites are met then DVBCore can be built in the normal way, and it will produce a library with the NIP functionality enabled. | ||
| + | |||
| + | ===== Application ===== | ||
| + | |||
| + | The DTVkit Application can then be built in the usual way for the desktop PC. (See instructions here) The application is able to read transport stream (MPE), or PCAP (GSE) files from the “ts” folder in the App’s root directory. For NIP services the application is expecting a satellite stream, so the file needs to be named as the L-band frequency, i.e. the Ku-band frequency specified on the scan dialog minus the LNB frequency, e.g. for a universal LNB, 9,750MHz for low band, and 10,600MHz for high band. | ||
| For example: | For example: | ||
| Line 29: | Line 46: | ||
| * Frequency (e.g. 964) + LNB (9750) = 10714 | * Frequency (e.g. 964) + LNB (9750) = 10714 | ||
| - | The DTVKit Application does not support native playback of NIP services as these are typically DASH or HLS based. Instead, the NIP module includes a simple HTTP server that makes DVB NIP services available for playback using a web based or standard desktop player such as VLC. The list of DVBNIP services is presented as the index page of the HTTP server together with all files in the RAM file store including the dash MPDs and associated AV segment data. | + | The DTVKit Application does not support native playback of NIP services as these are typically DASH or HLS based. Instead, the NIP module includes a simple HTTP server that makes DVB NIP services available for playback using a web based or standard desktop player such as VLC. The list of DVBNIP services is presented as the index page of the HTTP server together with all files in the RAM file store including the dash MPDs and associated AV segment data. The MPD file of the desired service can be opened with VLC or similar DASH player to view playback. |
| + | ===== Operation ===== | ||
| - | ==== Build Instructions ==== | + | Steps: |
| - | The NIP module builds as part of DVBCore | + | - Provide list of satellite transponders in the App and select “NIP-search" |
| + | - DVBCore | ||
| + | - This will discover MPE services and bootstrap them. | ||
| + | - Tune to Bootstrap stream | ||
| + | - Receive NIP tables - NIF/ | ||
| + | - Retrieve DVB-I service list, parse and add to NIP client DB. | ||
| + | - Services will be unbuffered by default unless you have explicitly requested them to be buffered. | ||
| + | - For GSE services the home transponder needs to be set after which it will follow a similar bootstrapping process to MPE. | ||
| + | - Configurable via the App. | ||
| + | - Available NIP services can then be determined via call to DVBNIP_ListServices(). | ||
| + | - The NIP engine then remains idle until a [DASH] manifest associated with a service is requested though a call to DVBNIP_GetFile(). | ||
| + | - The NIP engine then subscribes to the FLUTE stream(s) relating to that manifest. | ||
| + | - Downloads the media segments and other files to file store in memory. | ||
| + | - If the file does not yet exist, then DVBNIP_GetFile() will initially return FALSE but will then search for the stream to subscribe to and then download it. | ||
| + | - Subsequent calls to DVBNIP_GetFile will return TRUE and a FLUTE file read context, which can be read using FLUTE_FileRead(). | ||
| - | <IMAGE GOES HERE> | + | ===== NIP Service States ===== |
| + | By default, when a NIP service is identified, the NIP engine will wait for a request via DVBNIP_GetFile() before caching the related AV segments. To have faster initialisation & channel change experience it is possible to override this behaviour, so the AV data is cached sooner. NIP services can be in one of the following states: | ||
| + | * E_DNSS_NOTFOUND - The service was not found | ||
| + | * E_DNSS_NEW - The presence of services is known, but no manifest yet present. | ||
| + | * E_DNSS_READY - The service is ready to start buffering, i.e. the manifest files are cached. | ||
| + | * E_DNSS_BUFFERING - AV segments are downloaded and cached for the cache time, to the limit of reserved memory. | ||
| + | To control / query the status of the service, two API methods are available: | ||
| + | * void DVBNIP_GetServiceStateByURI () | ||
| + | * BOOLEAN DVBNIP_SetServiceStateByURI () | ||
| - | In additional | + | These APIs can be used in conjunction with DVBNIP_ListServices () to cache services data at the desired level and offer a faster start/ |
| - | * libxml2-dev | + | |
| - | Once these prerequisites are met then DVBCore can be built in the normal way, and it will produce | + | ===== RAM File Store ===== |
| + | |||
| + | All files in the filestore will be cleaned after MAX_AGE_CONTENT (currently 30 seconds), or when the total of all the files exceeds MAX_MEMORY_USAGE, | ||
| + | |||
| + | ===== DVBCore | ||
| + | |||
| + | Full details of DVBCore’s NIP related APIs and data structure is available in DVBCore’s reference manual documentation. The reference manual | ||
| + | |||
| + | ==== Platform APIs (STB_Xxxx Functions) ==== | ||
| + | |||
| + | |||
| + | Additional platform APIs have been included to facilitate GSE tuning – the extra parameters are needed to tune to these carriers. | ||
| + | * STB_TuneSetGSEMode() - switches the driver layer into GSE mode, providing | ||
| + | * STB_TuneSetGSEDataCallback() – callback function to call with full GSE packets. | ||
| - | ===== Application ===== | ||
| - | The DTVkit Application can then be built in the usual way for the desktop PC. (See instructions here) The application is able to read transport stream (MPE), or PCAP (GSE) files from the “ts” folder in the App’s root directory. For NIP services the application is expecting a satellite stream, so the file needs to be named as the L-band frequency, i.e. the Ku-band frequency specified on the scan dialog minus the LNB frequency, e.g. for a universal LNB, 9,750MHz for low band, and 10,600MHz for high band. | ||