Scripts and their functions¶
The ebu-run script¶
This script is capable of picking up a structured configuration file and use
that to create the nodes and carriage mechanism objects that we would like to
use. They can be even wired in the same configuration file together so in the
end a complex system can be modeled using a single json file. Please refer to
ebu_tt_live.scripts.ebu_run
as well as ebu_tt_live.config
to
learn more about the way the configuration logic works. To get help on permitted
options for the specified node(s) run ebu-run
with a --help
. See
Configuration files and ebu-run.
Simple Producer¶
This script loads static text from a file
(ebu-tt-live-toolkit/ebu_tt_live/examples/simple_producer.txt
) and breaks it
into a sequence of EBU-TT Live documents using natural language processing. Use
ebu-run
to start it: ebu-run
--admin.conf=ebu_tt_live/examples/config/simple_producer.json
The default carriage mechanism is WebSocket, so you will need to listen to
ws://127.0.0.1:9000
. Conveniently, we’ve created an HTML page that does just
that. After you launch the Simple Producer, open docs/build/ui/test/index.html
or the current release pre-built page in your
browser. The ‘Broadcast message’ field should be populated with the correct
address (ws://localhost:9000
). Click ‘Connect’ and then ‘Subscribe’. You can
also change the identifier for the sequence. The documents should appear in the
window below.
Alternatively, the Simple Producer can use the file system as the carriage mechanism. To do this, create a configuration file and specify the carriage mechanism and output folder options as described in Configuration files and ebu-run . This saves the documents in the specified output folder together with a manifest file that can be used by the Simple Consumer (below). See Filesystem Carriage Mechanism for more details about the file system carriage mechanism.
Simple consumer¶
This script reads and validates documents in a sequence. It performs both
semantic and syntactic validation of the XML. By default, it uses WebSocket and
listens to ws://localhost:9000
. To start this default configuration, run
ebu-run --admin.conf=ebu_tt_live/examples/config/simple_consumer.json
.
You can also point the Simple Consumer to the file system. If you saved the documents
in a folder (using the folder export configuration option
of the Simple Producer), you can write a configuration file as
described in Configuration files and ebu-run and pass this file to ebu-run
.
User Input Producer¶
This is a web page that adds a user interface and various configurations to the
Simple Producer. It needs to connect to a node that can receive incoming
/publish
style WebSocket connections, for example a Simple Consumer, a
Distributor or a Handover Manager Node. First, with your virtual environment
activated and the code built, start one, with a command line such as ebu-run
--admin.conf ebu_tt_live/examples/config/user_input_producer_consumer.json
-
this one runs a simple consumer. Then, in your browser, open
docs/build/ui/user_input_producer/index.html or the
current release pre-built page and click
‘Connect’. Select the sending mode (manual, scheduled or asynchronous). You
should see the documents arriving in the command line window where the simple
consumer is listening. See detailed instructions here:
User input producer.
Distributor¶
This script mimics a distribution node. To see it forwarding documents from the
Simple Producer to the Simple Consumer using Websocket, run ebu-run
--admin.conf=ebu_tt_live/examples/config/sproducer_dist_sconsumer_ws.json
. A
more interesting scenario is distributing documents from the User Input Producer
to two consumer nodes: ebu-run
--admin.conf=ebu_tt_live/examples/config/user_input_producer_dist_consumers.json
.
Like the Simple Producer, the Distributor can also save the documents it
receives to the file system. To do that, create you own configuration file as
described in Configuration files and ebu-run and pass this file to ebu-run
.
Handover Manager¶
This node implements the ‘Who claimed control most recently’ algorithm defined
in the specification, with added functionality to allow messages to be broadcast
between members of the authors group, which may be added to a future
specification. This algorithm determines the output from multiple input
sequences. The Handover Manager is a specialised case of the switching node that
bases its decisions on handover-related attributes in the document and its
previous decisions. There is no separate command to run this script. Start it
with the ebu-run
, for example ebu-run
--admin.conf=ebu_tt_live/examples/config/user_input_producer_handover.json
for
the default configuration. For detailed instruction on setting up the Handover
Manager with the UIP see User input producer.
Buffer Delay Node¶
This script buffers each received Document and emits it after a fixed
non-negative delay offset period. Since this is a passive node, essentially
equivalent to a longer carriage latency, no modification to the documents is
required. The Buffer Delay Node is primarily intended for delaying implicitly
timed documents for resynchronisation. Use ebu-run
to start this script, for
example ebu-run --admin.conf=ebu_tt_live/examples/config/buffer_delay.json
DeDuplicator Node¶
This node addresses instances where style
and region
elements and
attributes are duplicated, which can occur for example when sequences are
resequenced.
For the default configuration of the node, see:
ebu-run --admin.conf=ebu_tt_live/examples/config/deduplicator_fs.json
Resequencer Node¶
This node consumes documents from one sequence and creates a new sequence of documents based on the content in that input sequence, where every document in the output sequence has the same duration. The resequencer repeatedly extracts and then outputs a document of the specified duration, then waits for a period equal to that duration before extracting the next document. It can be configured to begin extracting the first document immediately when it is run, or to wait until a specific time until extracting the first document.
The resequencer is particularly useful upstream of an EBU-TT-D Encoder, to generate segmented EBU-TT-D, for example prior to wrapping in fragmented MPEG-4 and serving with a DASH or HLS manifest; those onward steps are not part of this project. This pattern effectively converts an asynchronous stream of input documents into something that can be delivered synchronously downstream, which is useful for distribution to media players.
Note that the resequencer output can contain duplicated style
and region
elements. These can be cleaned up by passing the output to a DeDuplicator
node before downstream encoding to other formats.
In general the resequencer does not begin emitting any documents until it has received at least one input document. To immediately start to emit documents an initial document can be configured. Necessary initial parameters like language or sequence ID are retrieved from that document.
Note that the resequencer accepts only input documents which all have the same sequence ID. This sequence ID is determined by the first received input document (or the configured initial document instead, if applicable).
Use ebu-run
to start
this script, for example ebu-run --admin.conf=ebu_tt_live/examples/config/sproducer_resequencer_direct_ebuttd_encoder_fs.json
Retiming Delay Node¶
This script modifies the times within each Document and issues them without
further emission delay as part of a new sequence with a new sequence identifier.
The times are modified such that all of the computed begin and end times within
the document are increased by a non-negative fixed delay offset period. The
Retiming Delay Node is primarily intended for delaying explicitly timed
documents. Use ebu-run
to start this script, for example ebu-run
--admin.conf=ebu_tt_live/examples/config/retiming_delay.json.
EBU-TT-D Encoder¶
This script is an extension of simple consumer and is responsible for resegmenting and converting the incoming EBU-TT Live documents into EBU-TT-D documents that can be later used to be embedded in video streams such as DASH. There are configuration file options for controlling the media time conversion reference point and the segmentation interval; these are described in Configuration files and ebu-run.
To see the Encoder in action, using output from the Simple Producer and the
‘direct’ carriage mechanism, run ebu-run
--admin.conf=ebu_tt_live/examples/config/sproducer_ebuttd_direct.json
.
IMPORTANT: the Encoder is not a complete EBU-TT Live to EBU-TT-D converter. Since EBU-TT-D generation was not part of this project, this functionality was implemented only partially and should not be used as complete reference.