Skip to content

Components

Nigel Megitt edited this page Nov 11, 2019 · 35 revisions

This page lists the components included in the interoperability kit, together with their Implementation requirements.

  • These components were agreed in the group's face-to-face meeting in January 2016.
  • Within each section (e.g. source, consumer), components are sorted in descending order of priority, as agreed at the meeting (column 'P' below).
  • Components that members asked to exclude from the open-source project are not included.
  • There is an implied structure of abstract base classes that are instantiated as concrete classes to make the software do something. This structure also allows different concrete classes to be mixed together to generate different behaviours: for example the simple consumer receives a sequence and outputs basic details about the text that would be displayed and the times, and that could be instantiated against a concrete implementation of a receiver for any carriage specification - the combination creates a tool that can validate the behaviour for EBU-TT Live sequences carried via a single mechanism
  • Specifications for carriers will be written in parallel with the development of carrier components.

Components

P Name User story Component Comment
Source components
4
User input producer
As a developer/tester, I want a sequence of documents generated from text input so that I can develop/test an implementation against it. This component will output a sequence of EBU-TT Live documents from user input. The UI will include the following elements:
  • A box for pasting text
  • A date-time option for cueing the output
  • Option for automatic or manual release of documents
3
Reference clock
As a developer/tester, I want an external reference clock so that I can ensure documents are processed correctly Output a date-time value UTC?
2
Teletext-to-part 3
As a broadcaster, I want to convert subtitles in teletext format to EBU-TT Live documents so that I can use legacy systems This component will take as its input teletext and output EBU-TT Live documents. The input can be one of:
  • A data feed
  • Teletext in VBI
  • Teletext in VANC
2
Fixed input producer
As a developer/tester, I want a sequence of EBU-TT Live documents generated automatically so that I can develop/test an implementation against it without the need to input text. This component will take no input and provide no options. It will generate a sequence from a hard-coded text source (e.g. 'Lorem ipsum').
2
Part 1 cued
As a playout service provider, I want to consume a cued EBU-TT Live sequence from an EBU-TT Part 1 document This component will take as it input:
  • A single EBU-TT Part 1 document
  • Options for cueing the Part 3 documents
It will create a sequence of Part 3 documents from the Part 1 document and release them according to the options set by the user.
TBC: cueing options.
Processor components
N/A
Simple noise introducer
As a developer/tester, I want to consume 'noisy' sequences documents so that I can test my implementation against a known set of scenarios. This will take as its input a sequence of documents generated by a source component (see above), and will output the sequence with a pre-determined and documented set of complexities:
  • Overlapping begin and end times
  • Missing sequences
  • Invalid documents
This was not discussed as a separate component in the F2F but for release planing it's better to create a simple version first.
4
Complex noise introducer
As a developer/tester, I want to control the level of 'noise' and complexity in a stream of EBU-TT documents so that I can test my implementation against different scenarios. This will take as its input a sequence of documents generated by a source component (see above). It will expose methods for introducing complexity into the stream, for example: multiple sequences, overlapping timecodes, corrections, multiple styles. TBC: what types of 'noise' to include, range/options for each and user input. Base this on experience with the Simple noise introducer.
3
Handover node
As a subtitle provider/broadcaster, I want to combine documents from alternating respeakers/stenographers into a single EBU-TT live stream This component will implement Handover Management functionality to funnel sequences from 2 or more sources and combine them into a single EBU-TT Live sequence for sending downstream.
3
Buffer Delay node
As a playout service provider, I want to add a delay to the emission of documents so that I can synchronise subtitles with audio. This node will simply hold on to documents and release them at the end of the delay period in the same order that they arrived (FIFO). This node will not modify the documents in any way. The delay will be fixed. Negative delay values are not allowed.
3
Retiming Delay node
As a playout service provider, I want to add a delay to the timings in documents so that I can delay the timings of subtitles. This node modifies timings within the document. Implicitly timed documents are made explicit for non-zero delay values. Negative delay values are not allowed.
3
Buffer Variable Delay node
As a playout service provider, I want to add a variable delay to the emission of documents so that I can synchronise variable speed subtitles with audio. This node will hold on to documents and release them at the end of the delay period in the same order that they arrived (FIFO). This node will not modify the documents in any way. The delay will be fixed. Negative delay values are not allowed. TBC: logic for handling cueued documents when the delay decreses.
3
Retiming Variable Delay node
As a playout service provider, I want to add a variable delay to the timings in documents so that I can delay the timings of subtitles by variable amount. This node modifies timings within the document. Implicitly timed documents are made explicit for non-zero delay values. Negative delay values are not allowed.
3
Switcher node
As a playout service provider, I want to switch between multiple sequences so that I can choose which sequence is output. This will be a source switching node.
3
Distributor node
As a playout service provider, I want to distribute a sequence so that it can be processed by multiple consumers. This will be a distributor node. Depending on carriage spec this may not be needed: for example the WebSocket protocol offers this natively since connections can be made from multiple destination nodes to the same source node.
N/A
De-duplicator
As a processor of EBU-TT Live documents, When I combine several documents, I want to merge identical styles and regions so that I output cleaner documents. This is a helper component. Merging is based on declaration (attributes) not computation, i.e. if two styles/regions have different declarations that result in identical rendering they are not merged. See De-duplicator-scenarios.
N/A
Denester
As a processor of EBU-TT Live documents, When I receive a document which contains nested `div` or `span` elements, I want to flatten them so that I output documents that conform to the non-nesting requirements of EBU-TT-D (for example). This is a helper component. Denesting attempts to preserve the computed styles of the output elements, as well as the ordering of content. Elements whose specified `region` attribute differs from that of an ancestor element are discarded.
Consumer components
6
EBU-TT-D encoder
As a playout service provider, I want to convert EBU-TT-Live documents to EBU-TT-D documents so that I can distribute them to the end device. This component will:
  • Convert a sequence of EBU-TT-Live documents to EBU-TT-D documents
  • Optionally pass the output to an MPEG DASH packager e.g. mp4box etc
5
Simple Part 3 consumer
As a developer/tester I want a simple view of the text and times in a sequence of EBU-TT Live documents so that I can verify that they will be processed correctly. This component will be a simple receiver. It will provide the following functions:
  • Subscribe to a source
  • Validation of EBUT-TT Live documents (XML and Semantic)
  • 'Validator only mode' option
  • Text view of text with begin and end times (processing the resolved begin and end times algorithm correctly according to the Part 3 specification)
4
Archiver
As a broadcaster/access services provider, I want to archive EBU-TT Live documents so that I can I can reuse and distribute them after live transmission as a single Part 1 document. This is an archiver node. This component will assemble a sequence of EBU-TT-Live documents into a single EBU-TT part 1 document. It will extend the Simple Part 3 Consumer and be able to handle a 'noisy' source (e.g. missing documents, overlapping time codes)
Validator components
6 =====Semantic validator===== (becomes part of Simple Consumer) As a developer/playout service provider, I want to validate an EBUT-TT Live sequence against the specification so that I know if they conform to the specification This component will perform semantic validation of:
  • Single EBU-TT Live document
  • Sequence of documents
This becomes part of Simple part 3 consumer. The Simple consumer will configurable either to return text and times verbosely or to return validation results or both.
2
XSD
As a developer/playout service provider, I want to validate EBUT-TT Live documents so that I know if they are valid XML This is a an XSD for validating a single EBU-TT part 3 document. The validation against the XSD will be done in the Simple part 3 consumer.
1
Downstream validator
As a developer/playout service provider, I want to check that an EBU-TT Live document conforms to downstream requirements so that I know it will be successfully processed. This component will validate a document against metadata instructions (e.g., if intended for Teletext, check that the document conforms to line length constraint).
Carriage components
4
SDI carrier
As a playout service provider, I want to carry EBU-TT Live documents over HD SDI so that I can pass EBU-TT Live around with video in a broadcast environment. This adaptor will handle interfacing with SMPTE 292M Requires special equipment. Cards are usually for either input/output or processing. A processing card will be required for insertion of subtitles into an SDI signal.
4
RTP carrier
As a playout service provider, I want to carry EBU-TT Live documents using the RTP protocol so that I can use in EBU-TT Live over IP networks. This adaptor will handle interfacing with RFC 3550
3
WebSocket carrier
As a playout service provider, I want to carry EBU-TT Live documents using the WebSocket protocol so that I can use in EBU-TT Live over TCP. This adaptor will handle interfacing with RFC 6455

Implementation requirements

  • Tests are required as part of the implementation to support test-driven development.
  • Components must allow extension points.
  • Use classes, not APIs. This is simpler to code and build even though it is ultimately less flexible.
  • Provide abstract classes.
  • Python will be used.
  • Encoding and decoding code should be symmetrical/similar so one can be inferred from the other