[whatwg] Google Feedback on the HTML5 media a11y specifications

Philip Jägenstedt philipj at opera.com
Tue Feb 15 02:09:19 PST 2011

On Tue, 15 Feb 2011 04:28:36 +0100, Silvia Pfeiffer  
<silviapfeiffer1 at gmail.com> wrote:

> Hi Philip,
> On Tue, Feb 15, 2011 at 3:27 AM, Philip Jägenstedt <philipj at opera.com>  
> wrote:
>> On Wed, 09 Feb 2011 03:57:37 +0100, Silvia Pfeiffer
>> <silviapfeiffer1 at gmail.com> wrote:
>>>>> A. Feedback on the WebVTT format
>>>>> 1. Introduce file-wide metadata
>>>>> WebVTT requires a structure to add header-style metadata. We are here
>>>>> talking about lists of name-value pairs as typically in use for  
>>>>> header
>>>>> information. The metadata can be optional, but we need a defined  
>>>>> means
>>>>> of adding them.
>>>>> Required attributes in WebVTT files should be the main language in  
>>>>> use
>>>>> and the kind of data found in the WebVTT file - information that is
>>>>> currently provided in the <track> element by the @srclang and @kind
>>>>> attributes. These are necessary to allow the files to be interpreted
>>>>> correctly by non-browser applications, for transcoding or to  
>>>>> determine
>>>>> if a file was created as a caption file or something else, in
>>>>> particular the @kind=metadata. @srclang also sets the base
>>>>> directionality for BiDi calculations.
>>>> Are there non-browsers that use the language for font-selection or  
>>>> bidi?
>>>> Is
>>>> auto-detection not likely to give a better user experience? Are there  
>>>> any
>>>> other use cases for knowing the language of the captions *after*  
>>>> they've
>>>> been opened?
>>> I can't see a different way to let non-browser applications know what
>>> font to choose, even how to provide the user with a menu of available
>>> caption tracks for a video, or to set the base directionality for
>>> BiDi. Also, language auto-detection is a huge burden to put onto
>>> non-browser applications. Having a readable language tag at the
>>> beginning of the file is useful to quickly figure it all out.
>>> The language set in <track> would certainly overrule what is in the
>>> file. Also, the last language attribute in the header would probably
>>> win.
>>> I guess it would also be ok to have language and kind optional -
>>> different applications may then default to interpreting WebVTT files
>>> differently, such as by default English and Captions - or English and
>>> Descriptions, but that's probably acceptable from context.
>> Given that most existing subtitle formats don't have any language  
>> metadata,
>> I'm a bit skeptical. However, if implementors of non-browser players  
>> want to
>> implement WebVTT and ask for this I won't stand in the way (not that I  
>> could
>> if I wanted to). For simplicity, I'd prefer the language metadata from  
>> the
>> file to not have any effect on browsers though, even if no language is  
>> given
>> on <track>.
> There is also the Content-Language response header of HTTP, which
> could have an influence on the browser, too. I'm not sure about the
> best way to deal with all this overlapping information, but I'm sure
> it can be sorted out.

My preference is ignoring everything except what is given in <track>. In  
particular language can't be given in the resource or its headers, because  
then one has to fetch all the tracks in order to provide a track selection  
menu with language information or to automatically activate the suitable  

>>>> Why do non-browser players need to know the kind? All kinds are  
>>>> processed
>>>> in
>>>> the same way except metadata, and there's no reason to use metadata
>>>> tracks
>>>> with external players.
>>> Maybe I have a different view of what applications will make use of
>>> WebVTT files than most. My thinking is that there will also be uses
>>> for metadata tracks in external applications. Aside from this, there
>>> will be authoring applications and players, yes, but there will also
>>> be automated processing tools. So, to know what type of content is
>>> inside a file without having to look at more than the file's headers
>>> is really important.
>> For both of these cases, putting some magic strings inside comments  
>> that are
>> ignored by browsers sounds like it would be sufficient. Name-value  
>> metadata
>> that is ignored by browsers would be fine as well.
> I'm for the second option: name-value metadata that is ignored by the
> browser. I think in fact the browser should in general ignore all
> name-value metadata with the exception of file-wide cue settings.

I agree, browsers should ignore in-file metadata. (That's one reason I  
think using comments for it is quite fine most of the time.)

>>>>> Further metadata fields that are typically used by authors to keep
>>>>> specific authoring information or usage hints are necessary, too. As
>>>>> examples of current use see the format of MPlayer mpsub’s header
>>>>> metadata [2], EBU STL’s General Subtitle Information block [3], and
>>>>> even CEA-608’s Extended Data Service with its StartDate, Station,
>>>>> Program, Category and TVRating information [4]. Rather than  
>>>>> specifying
>>>>> a specific subset of potential fields we recommend to just have the
>>>>> means to provide name-value pairs and leave it to the negotiation
>>>>> between the author and the publisher which fields they expect of each
>>>>> other.
>>>> This approach has worked very well with Vorbis Comments, probably  
>>>> mostly
>>>> because all interesting fields have been pre-defined in
>>>> http://www.xiph.org/vorbis/doc/v-comment.html
>>>> For a web format though, wouldn't some kind of wiki registry be good  
>>>> to
>>>> avoid total mayhem, especially if there are some predefined fields?  
>>>> (Not
>>>> having file-wide metadata would also avoid such mayhem.)
>>> It might be good to define a base set - the Vorbis Comments one or the
>>> ID3 ones could be appropriate. Even the old Dublin Core set (the first
>>> ones, not the current chaos) could be good. I could also analyse the
>>> sets used in current typical caption formats and propose a superset of
>>> those.
>>> While I think you're right with suggesting a predefined set of fields,
>>> I am mostly keen right now to agree on the general format of the
>>> fields and how we need to parse them rather than what they actually
>>> are.
>>> So, I would suggest we allow lines of "name=value" under the WEBVTT
>>> magic string. A blank line defines the end of the header section and
>>> the beginning of the cues. Would be simple enough to parse, right?
>> Sure, it's already handled by the current parsing spec, since it ignores
>> everything up to the first blank line.
> That's not quite how I'm reading the spec.
> http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#webvtt-0
> allows
> "Optionally, either a U+0020 SPACE character or a U+0009 CHARACTER
> TABULATION (tab) character followed by any number of characters that
> are not U+000A LINE FEED (LF) or U+000D CARRIAGE RETURN (CR)
> characters."
> after the "WEBVTT FILE" magic.
> To me that reads like all of the extra stuff has to be on the same line.
> I'd prefer if this read "any character except for two WebVTT line
> terminators", then it would all be ready for such header-style
> metadata.

See steps 12-17 of  
it just skips all lines up to the first blank line. Syntax and parsing are  
different :)

>>>>> 4. Cue formatting requirements
>>>>> In analysing the available cue formatting functionality, we have  
>>>>> found
>>>>> that some features are missing. Most of these features can be added
>>>>> through using CSS on cues that have received a <b>, <i>, <c> or <v>
>>>>> marker. The following features are core to traditional TV and exist  
>>>>> in
>>>>> EBU STL and CEA-608/708 captions. Support of these will be a core
>>>>> requirement for browsers as well as non-browser applications and it
>>>>> makes sense to add these to WebVTT rather than relying on external  
>>>>> CSS
>>>>> which cannot be used for non-browser captions:
>>>> The unstated requirement here seems to be that WebVTT needs to work  
>>>> as an
>>>> interchange format for various TV captioning formats even in user  
>>>> agents
>>>> without any support for CSS (or JavaScript). I'm trying to not make a
>>>> straw
>>>> man argument, but if want an interchange format, we should pick TTML,
>>>> which
>>>> is explicitly designed to be just that and doesn't depend on CSS.
>>>> Is it not enough that a lossy conversion can be made from various  
>>>> formats
>>>> into WebVTT+CSS(+JavaScript)? If not, the "Web" in "WebVTT" is highly
>>>> misleading...
>>> We're trying to avoid the need for multiple transcodings and are
>>> trying to achieve something like the following pipeline:
>>> broadcast captions -> transcode to WebVTT -> show in browser ->
>>> transcode to broadcast devices -> show
>>> If we have to plug TTML into this pipeline, too, it will be much
>>> slower and we would need to additionally define a mapping from TTML to
>>> WebVTT and back.
>>> I'm sure with SMPTE-TT around we will end up seeing things like
>>> broadcast->TTML->WebVTT->browser, but even then we don't want WebVTT
>>> to be a lossy format.
>> I can only disagree. Trying to make WebVTT into an interchange format  
>> will
>> inevitably turn it into a highly presentational format with lots of  
>> legacy
>> baggage. I can certainly see the use cases for an interchange format,  
>> but I
>> don't think it's worth the added complexity. I'd prefer an approach  
>> where
>> any format quirks that can't be mapped to WebVTT are expressed using  
>> <c.foo>
>> and if it turns out lots of people want the feature, we can add it to a
>> future revision.
> I wouldn't go as far as to say it needs to become an interchange
> format. But I can see us specifying what the browser parses, while
> given options such as the header-metadata and span classes that allow
> with some extra information to fully recover the broadcast
> functionality. I actually think that is almost possible already.

After this thread has run for a while, it'd be nice to hear where you  
think <c.foo> isn't enough and new markup is needed, if anything.

>>>>> * underline: EBU STL, CEA-608 and CEA-708 support underlining of
>>>>> characters. The underline character is also particularly important  
>>>>> for
>>>>> some Asian languages. Please make it possible to provide text
>>>>> underlines without the use of CSS in WebVTT.
>>>> Which Asian languages? If it's just the Chinese
>>>> <http://en.wikipedia.org/wiki/Proper_name_mark>, then I don't think  
>>>> that
>>>> needs <u> or similar. In my experience, use of the Chinese proper name
>>>> mark
>>>> is in fact extremely rare in Chinese captions, at least in movies and  
>>>> TV
>>>> series from the mainland and Taiwan. It would be best to use e.g.
>>>> 我來自<c.pnm>中國</c> to make it easy to change the style between
>>>> single/double/wavy/no underline.
>>> OK. So if we need underlined text, it will need to be
>>> <c.underline>..</c> and CSS underline? I guess in a Web context
>>> underline text is usually a hyperlink so it makes sense to discourage
>>> <u> for the Web. But is that also an argument for
>>> captions/subtitles/descriptions? What is the argument against using
>>> <u> in captions?
>> I don't really have an argument against it, I just questioned that it is
>> important for Asian languages in particular. Adding <u> would be really
>> simple, it's just a question of why. I've seldom seen underlining in
>> captions, so it's not clear to me how it's usually used.
> I'm told <u> is fairly common in traditional captions. We don't do
> <c.italics> either for such common stuff.
> But if we really don't want this, I guess <c.u> would work, too and is
> not that much longer.

I can't see any underlining when scanning through the samples at  
If it is in fact common in some contexts, it'd be great to have samples  
added to the wiki, I'm sure we could learn something from it. If <u> is  
actually useful for something, then we should just add it.

>>> With "-" you are referring to replacing "-->" with "-" to arrive at  
>>> things
>>> like:
>>> 15.000-17.950
>>> At the left we can see...
>>> as compared to:
>>> 15.000+2.950
>>> At the left we can see...
>> Yes, that's what I meant.
>>> I actually think they read fairly given that people are used to the
>>> double meaning of "-": to mean both "from ... to" and "minus".
>>> But we could use a different character for "absolute time" if you
>>> prefer, e.g. "/".
>>> 15.000/17.950
>>> At the left we can see...
>>> I find this fairly readable, too.
>> Either would work for me. As I mentioned, the room for improvement here
>> isn't only the syntax of the timing line, but also to make it obvious  
>> that
>> cue timestamps like <00:01.000> are relative. Using + for relative
>> timestamps is potentially confusing too, as one might think that many
>> consecutive <+00:01.000> are cumulative, rather than all being 1 second  
>> from
>> the start time of the cue.
> That's true and in fact the way in which I have authored my examples,
> now that I look back at them. It makes the timings smaller and I think
> it's a bit more logical. But really we just have to decide on one
> meaning:
> 5-10
> This <+1>is <+1>a <+1>simple <+1>example.
> I find I actually prefer this over
> 5-10
> This <+1>is <+2>a <+3>simple <+4>example.

Right, we just have to pick something. I'd like to get the basic structure  
down soon, though, as changing the timestamp parsing will be very  
difficult once there are implementations.

>>>>> we recommend the introduction of comments.
>>>> I agree and think it needs to happen before WebVTT starts to get
>>>> implemented
>>>> and used on the web. In other words: now.
>>> Agreed. I'm happy for the previously suggested "//" at the line start
>>> to be comments, or, for that matter, "#" or ";" or any other special
>>> character. I would prefer not to use "/*" since it implies a "*/" is
>>> required to end the comment. Similarly we should avoid "<!--" and
>>> "-->" or anything else that requires a special comment end mark and
>>> more than one or two characters.
>> I'd quite like to have block comments, so I think the best options are:
>> 1. // and /* */ like JavaScript
>> 2. <!-- --> like HTML/XML
> If the main use case for the comments is to comment out a line,
> something at the line start alone would be sufficient. If we have to
> have both, I would prefer the shorter first option.
>> I think that the main difficulty is actually not picking a syntax, but
>> deciding how it works in the parser. Unlike HTML, I don't think we want  
>> the
>> comments to show up in the "DOM", since that would only work for  
>> intra-cue
>> comments. Ideally it would be preprocessor-ish, but yet the magic bytes
>> ("WEBVTT FILE") should be checked first as otherwise identifying WebVTT
>> would require implementing its preprocessor steps :/
> As I would not want the comments not to be handed into the DOM or to
> JavaScript, it doesn't matter if they are not like HTML. I would
> regard them more as pre-processor style comments.

For simplicity, perhaps it would be better to have line-comments only. On  
my wishlist I have a less convoluted parser definition which operates on  
lines instead of sprinkling CR/LF all over, and it'd be easy to add  
line-comments to such a parser. Wish-list item requested at  

>>>>> 8. Line wrapping
>>>>> CEA-708 captions support automatic line wrapping in a more
>>>>> sophisticated way than WebVTT -- see
>>>>> http://en.wikipedia.org/wiki/CEA-708#Word_wrap.
>>>>> In our experience with YouTube we have found that in certain
>>>>> situations this type of automatic line wrapping is very useful.
>>>>> Captions that were authored for display in a full-screen video may
>>>>> contain too many words to be displayed fully within the actual video
>>>>> presentation (note that mobile / desktop / internet TV devices may
>>>>> each have a different amount of space available, and embedded videos
>>>>> may be of arbitrary sizes). Furthermore, user-selected fonts or font
>>>>> sizes may be larger than expected, especially for viewers who need
>>>>> larger print.
>>>>> WebVTT as currently specified wraps text at the edge of their
>>>>> containing blocks, regardless of the value of the 'white-space'
>>>>> property, even if doing so requires splitting a word where there is  
>>>>> no
>>>>> line breaking opportunity. This will tend to create poor quality
>>>>> captions.  For languages where it makes sense, line wrapping should
>>>>> only be possible at carriage return, space, or hyphen characters, but
>>>>> not on   characters.  (Note that CEA-708 also contains
>>>>> non-breaking space and non-breaking transparent space characters to
>>>>> help control wrapping.)However, this algorithm will not necessarily
>>>>> work for all languages.
>>>>> We therefore suggest that a better solution for line wrapping would  
>>>>> be
>>>>> to use the existing line wrapping algorithms of browsers, which are
>>>>> presumably already language-sensitive.
>>>>> [Note: the YouTube line wrapping algorithm goes even further by
>>>>> splitting single caption cues into multiple cues if there is too much
>>>>> text to reasonably fit within the area. YouTube then adjusts the  
>>>>> times
>>>>> of these caption cues so they appear sequentially.  Perhaps this  
>>>>> could
>>>>> be mentioned as another option for server-side tools.]
>>>> Yeah, with SRT people are manually line-wrapping when authoring the
>>>> captions
>>>> and often enough the end result is that you get something rendered:
>>>> - Who could have guessed that not all fonts are the same
>>>> size?
>>>> - That's news to me, so I get four lines of text where I
>>>> wanted two!
>>>> I'm inclined to say that we should normalize all whitespace during
>>>> parsing
>>>> and not have explicit line breaks at all. If people really want two
>>>> lines,
>>>> they should use two cues. In practice, I don't know how well that  
>>>> would
>>>> fare, though. What other solutions are there?
>>> I don't think I would go that far. The concern has mostly been with
>>> the line wrapping of lines that are too long and the possibility of
>>> splitting words that way. The particular concern was with this
>>> paragraph:
>>> "Text runs must be wrapped at the edge of their containing blocks,
>>> regardless of the value of the 'white-space' property, even if doing
>>> so requires splitting a word where there is no line breaking
>>> opportunity."
>>> see
>>> http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#timed-text-tracks-0
>>> So we want to avoid splitting mid-word and we suggest introducing the
>>> ability to have non-breaking spaces.
>> I think splitting in the middle of words would only happen for words  
>> that
>> are longer than the whole line.
> Ah ok - I guess you can interpret the sentence above in this way as
> in"splitting a word ONLY where there is no line breaking opportunity".
> Then it's probably ok. It would still make sense to accept
> non-breaking spaces.

Perhaps Hixie would like to clarify in the spec precisely what is meant?

There's already a non-breaking space in Unicode: NO-BREAK SPACE (U+00A0)

>> There's still plenty of room for improvements in line wrapping, though.  
>> It
>> seems to me that the main reason that people line wrap captions  
>> manually is
>> to avoid getting two lines of very different length, as that looks quite
>> unbalanced. There's no way to make that happen with CSS, and AFAIK it's  
>> not
>> done by the WebVTT rendering spec either.
> People split manually when they want quality captions and can visually
> test what it will look like.
> This endeavor has one big problem: when you change the video size,
> e.g. go to full screen, your optimisation for the previous size is
> likely to not be optimal for the new size any more. There, an
> automatic line balancing that makes use of commas and "and"s for
> choosing likely good line break positions would be nice.
> A completely different situation appears when the captions are not
> manually created, as is the case in YouTube. Even when you submit a
> perfect transcript and time-align it through speech recognition, you
> will only do the line breaks as you have to render cues. To achieve a
> better quality there, a better line-break algorithm would help
> massively.
> So, I agree with you about improving the line wrapping. I also think
> it is likely something that we have to leave to the browsers - at
> least for now.

Right, some experimentation here would be great, as I haven't seen any  
feature like this in any media players. In the hope of inspiring someone,  
perhaps myself, here's how I tentatively would like things to work:

1. Authors are encouraged to not manually line-break
2. UAs render the text at whatever with the <video> container allows, with  
margins and all
3. The text will have been rendered on n lines.
4. Decrease the width on the container as much as possible while having n  
5. Use that line-breaking and then do whatever left/center/right-alignment  
relative to the original width.

I really should get around to reading the rendering section for WebVTT to  
see what it actually does, perhaps it's already clever...

>>>>> 4. Addressing individual cues through CSS
>>>>> As far as we understand, you can currently address all cues through
>>>>> ::cue and you can address a cue part through ::cue-part(<voice> ||
>>>>> <part> || <position> || <future-compatibility>). However, if we
>>>>> understand correctly, it doesn’t seem to be possible to address an
>>>>> individual cue through CSS, even though cues have individual
>>>>> identifiers. This is either an oversight or a misunderstanding on our
>>>>> parts. Can you please clarify how it is possible to address an
>>>>> individual cue through CSS?
>>>> Since I've been arguing against the id's in WebVTT, I'm curious about  
>>>> the
>>>> use case here. Isn't using a unique class good enough?
>>> This links in with the discussion above on CSS styling and classes.
>>> Rather than define classes of cue settings and reference them from the
>>> cues, this allows them to be applied to individual cues in style
>>> sheets. I thought the whole reason of cue identifiers was to have this
>>> addressing functionality, so this would just close the loop.
>>> For example:
>>> Style sheet of the Web page:
>>> <style>
>>> video track#t1 ::cue(cue10) {
>>>  text-decoration: blink;
>>> }
>>> </style>
>>> The Web page (extract):
>>> <video src="video.webm" controls>
>>>  <track id="t1" label="captions" kind="captions" srclang="en-US"
>>> src="cap1.vtt"/>
>>> </video>
>>> The caption file cap1.vtt:
>>> Language=en-US
>>> Kind=Captions
>>> cue1
>>> 0.000-5.000
>>> blab blah
>>> cue10
>>> 40.000-60.000
>>> ALERT: Your basement is flooding - evacuate!
>>> Cue10 is addressed through CSS and turned into a blinking text without
>>> a need to change the markup at all.
>> My point was that you could just as well do this:
>> 0.000-5.000
>> <c.cue1>blab blah</c>
>> In my view of things, id's in HTML are primarily for addressing via
>> #fragments and as hooks for scripts, for styling class is quite  
>> sufficient,
>> so I'm thinking it would be for WebVTT as well.
> I quite like the idea of using the identifiers for named media
> fragment URIs: e.g. http://example.org/video.webm#cue10 . We need
> identifiers for this. Also, I find them less intrusive in the text
> than <c.cue1> which defines a class that is only every used on this
> single cue.

Hmm, isn't that what we have chapters for? Or do you want to use id's for  
some kind of inline chapters?

>>>>> 5. Ability to move captions out of the way
>>>>> Our experience with automated caption creation and positioning on
>>>>> YouTube indicates that it is almost impossible to always place the
>>>>> captions out of the way of where a user may be interested to look at.
>>>>> We therefore allow users to dynamically move the caption rendering
>>>>> area to a different viewport position to reveal what is underneath.  
>>>>> We
>>>>> recommend such drag-and-drop functionality also be made available for
>>>>> TimedTrack captions on the Web, especially when no specific
>>>>> positioning information is provided.
>>>> This would indeed be rather nice, but wouldn't it interfere with text
>>>> selection? Detaching the captions into a floating, draggable window  
>>>> via
>>>> the
>>>> context menu would be a theoretically possible solution, but that's
>>>> getting
>>>> rather far ahead of ourselves before we have basic captioning support.
>>> On YouTube you can only move them within the video viewport. You
>>> should try it - it's really awesome actually.
>>> When you say "interfere with text selection" are you suggesting that
>>> the text of captions/subtitles should be able to be cut and pasted? I
>>> wonder what copyright holders think about that.
>> Being able to select the captions just like any other text is a great  
>> thing
>> that I wouldn't want to disable. It's very useful if you want to pause  
>> and
>> look up the definition of a word or to report a typo in the captions  
>> without
>> having to retype the whole text.
> I guess you can have all of that as you can have it on Web pages, too.
> If you click and hold, it will be grabbing for moving. If you double
> click it is text selection for cut and paste. So, I don't think there
> would be a problem.

That would work, but I have to admit I've never seen a web page/browser  
combination that does what you suggest. Just single clicking and dragging  
is certainly the most discoverable form of text selection.

>> Premium Captions can be protected using the same tricks that are used to
>> prevent Premium DOM Text Nodes from being copied.
> Agreed.

Philip Jägenstedt
Core Developer
Opera Software

More information about the whatwg mailing list