ebu / ebu-tt-live-toolkit Goto Github PK
View Code? Open in Web Editor NEWToolkit for supporting the EBU-TT Live specification
Home Page: http://ebu.github.io/ebu-tt-live-toolkit/
License: BSD 3-Clause "New" or "Revised" License
Toolkit for supporting the EBU-TT Live specification
Home Page: http://ebu.github.io/ebu-tt-live-toolkit/
License: BSD 3-Clause "New" or "Revised" License
As a broadcaster/access services provider, I want to archive EBU-TT Live documents so that I can reuse and distribute them after live transmission as a single Part 1 document.
Input: a sequence of EBU-TT-Live documents.
Output: a single EBU-TT part 1 document.
As a playout service provider, I want to add a delay to the sequence so that I can synchronise subtitle with audio.
Input: a sequence of part 3 documents.
Output: a delayed sequence of part 3 documents.
Test semantic validation on timebase rules :
Start point of a temporal interval associated with a tt:body element.
If the timebase is "smpte" the type shall be ebuttdt:smpteTimingType .
If the timebase is "media" the type shall be ebuttdt:mediaTimingType .
If the timebase is "media" the time expression should be the offset from a syncbase of "00:00:00.0".
If the timebase is "clock" the type shall be ebuttdt:clockTimingType .
As a developer/playout service provider, I want to validate an EBU-TT Live sequence against the specification so that I know if they conform to the specification.
Input: Single part 3 doc or sequence of part 3 documents
Output: display of text with begin and end times and validation message(s)
It requires the following steps to be completed:
(this list is not yet complete)
For example:
As @kozmaz87 suggested, probably best to annotate the spec with the test code locations.
As a subtitle provider/broadcaster, I want to combine documents from alternating respeakers/stenographers into a single EBU-TT live
Input: 2 or more part 3 sequences; handover options.
Output: a single part 3 sequence.
Subtasks:
As a playout service provider, I want to switch between multiple sequences so that I can choose which sequence is output.
Input: multiple part 3 sequences; switching options.
Output: a single part 3 sequence.
Generate a text format list of the normative spec requirements against which we can write tests.
As a developer/tester, I want an external reference clock so that I can ensure documents are processed correctly.
Input: none.
Output: UTC date-time value.
py.test
is not callable, but CONTRIBUTING.md says it is
From what I understand from https://git.ebu.io/ebutt/ebutt-part-3/issues/115 , markerMode="continuous" is permitted with timeBase="smpte", however this is not allowed by the spec and the schema definitions. Should it be added in the xsd files so we have at least semantically correct smpte cases ? (here for example : https://github.com/ebu/ebu-tt-live-toolkit/blob/a7a545d189e4a12d6c8632929fd019252de2e4cb/testing/bdd/templates/referenceClockIdentifier.xml )
Time formats in documents are a bit confusing :
<tt:body tt:begin="63016289ms" tt:dur="00:00:01">
Can we chose the format used to convert timedeltas more precisely ? For example here, having begin in hh:mm:ss.ms and dur in xxxxxms format would be more logical.
Raised from discussion during 13/07/2016 call.
I think graphviz needs to be installed in order to see the figures in the documentation correctly, but this is not clear from the README.md.
(Building sphinx gives a warning it cannot find the dot executable if the user has not installed it).
I see two options:
As a developer/tester, I want a sequence of part 3 documents generated from text input so that I can develop/test an implementation against it.
Input: Text file provided by user.
Output: Sequence of EBU-TT Live documents.
tt:dur
is not allowed when a document has both ttp:timeBase="smpte"
and ttp:markerMode="discontinuous"
Check if we all agree with changing the notifications to only show:
Responses:
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
Input: sequence of part 3 documents
Output: sequence of EBU-TT-D documents
Subtasks:
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.
Input: Sequence of part 3 documents; 'validate only' option.
Output: display of text with begin and end times and validation message(s)
As a playout service provider, I want to carry EBU-TT Live documents using the RTP protocol so that I can use EBU-TT Live over IP networks.
Input: a sequence of part 3 documents.
Output: a sequence of part 3 documents for interfacing with RFC 3550.
Allows the reference clock source to be identified. Permitted only when
ttp:timeBase="clock" AND ttp:clockMode="local" OR when
ttp:timeBase="smpte".
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.
Input: none.
Output: a sequence of Part 3 documents.
Currently the Travis CI badge referred to in the readme.md points to the Master branch.
This means the badge may show incorrect status on other branches (unless the readme.md is modified).
Some people have done provided a pre-built hook to get around this, but it seems to be a bit fragile: http://stackoverflow.com/questions/18673694/referencing-current-branch-in-github-readme-md
Also check out: http://stackoverflow.com/questions/19810386/showing-travis-build-status-in-github-repo
Test that when timebase is set to smpte, documents are validated/rejected depending on the format of the time. Also test that presence and correctness of all needed parameters is checked
The ttm:agent
element is defined in metadata.xsd as xs:string
, but it should be as in TTML1 §12.1.5:
<ttm:agent
type = (person|character|group|organization|other)
xml:id = ID
xml:lang = string
xml:space = (default|preserve)
{any attribute not in default or any TT namespace}>
Content: ttm:name*, ttm:actor?
</ttm:agent>
where
<ttm:name
type = (full|family|given|alias|other)
xml:id = ID
xml:lang = string
xml:space = (default|preserve)
{any attribute not in default or any TT namespace}>
Content: #PCDATA
</ttm:name>
and
<ttm:actor
agent = IDREF
xml:id = ID
xml:lang = string
xml:space = (default|preserve)
{any attribute not in default or any TT namespace}>
Content: EMPTY
</ttm:actor>
This issues is copied from the BBC repo: bbc#8
Add CI build notifications to team (members).
Note that it seems committers get info on their commits already anyhow:
By default, email notifications are sent to the committer and the commit author, if they are members of the repository (that is, they have push or admin permissions for public repositories, or if they have pull, push or admin permissions for private repositories).
Options for wider notifications include:
As a developer/tester, I want to control the level of 'noise' and complexity in a stream of part 3 documents so that I can test my implementation against different scenarios.
Input: a sequence of part 3 documents; options for introducing complexity into the stream.
Output: a sequence of modified part 3 documents.
Documents use the mixin ComparableMixin (defined in the project root in file utils.py). This mixin allows for correct and easy comparison of documents :
document1 < document2 if document1.sequenceNumber < document2.sequenceNumber
With this issue I want to address the fact that this was not tested yet, so I implemented tests to ensure that document comparison works as intended.
It would be good to be able to skip individual example lines in scenarios without commenting them out, so that those scenarios are counted better.
As a playout service provider, I want to carry EBU-TT Live documents using the WebSocket protocol so that I can use EBU-TT Live over TCP.
Input: a sequence of part 3 documents.
Output: a sequence of part 3 documents for RFC 6455.
As a developer/playout service provider, I want to validate EBUT-TT Live documents so that I know if they are valid XML
Input: a single part 3 document.
Output: validation message.
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.
Input: a sequence of part 3 documents.
Output: a sequence of part 3 documents in HD SDI
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.
Input: a single part 3 document; metadata instructions.
Output: validation message.
As a playout service provider, I want to consume a cued EBU-TT Live sequence from an EBU-TT Part 1 document .
Input: a single EBU-TT Part 1 document; cueing options.
Output: a sequence of Part 3 documents released according to the cueing options.
Refers to BBC's fork issue 18
This issue asks for the implementation of a functionality that allows the simple producer to write its output to the file system along with a manifest file with availability times.
Spotted this while working on my understanding of the bindings and how to add smpte <-> timedelta conversion.
Python's regexes are read sequentially, meaning that if you have for example [0-9]+(h|m|s|ms)
:
This is really problematic because it also allows 9mh for example and extracts 9m, however 9mh is not permitted in this case.
To solve the problem, the solution is to add a $
at the end of the regex, so for timecountTimingtype :
[0-9]+(\.[0-9]+)?(h|m|s|ms)$
in the xsd?P<numerator>[0-9]+(?:\\.[0-9]+)?)(?P<unit>h|m|s|ms)$
in bindingsAs a broadcaster, I want to convert subtitles in teletext format to EBU-TT Live documents so that I can use legacy systems.
Input: Teletext (data feed/VBI/VANC)
Output: Sequence of EBU-TT Live documents
We need to document the manitfest format. E.g.
related to: #59
As a developer/tester, I want to consume 'noisy' sequences of part 3 documents so that I can test my implementation against a known set of scenarios.
Input: a sequence of part 3 documents; noise options.
Output: a sequence of modified part 3 documents.
As @kozmaz87 suggested, 2 Jenkins plug ins that would be useful:
For example, if : test_var = "?None?"
and we have template :
{% if test_var != "?None?" %}
<a_tag>{{ test_var }}</a_tag>
{% endif % }
So if test_var = ''
the tag will be present but will contain an empty string.
Conversion between XML time formats and timedelta values is done in this file. This setup allows us to do the conversions during pyxb binding loop.
Conversion for SMPTE is a bit more complicated than conversion for clock and media times. Indeed for SMPTE we need to access values of some attributes of the <tt>
element, which is not easily done through pyxb at the stage of the binding where the conversion happens.
As a playout service provider, I want to distribute a sequence so that it can be processed by multiple consumers.
Input: a sequence of part 3 documents
Output: a sequence of part 3 documents available to multiple destinations
To reduce maintenance.
Create the availability times in the manifest file in the same timeBase as the documents.
As discused in #50
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.