<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
        <title> HTML Timed Media Elements and CSS Open Issues </title> 

        <link href="./mediaelement.css" rel="stylesheet" type="text/css">

        <style type="text/css">
                h4 + .element { margin-top: -2.5em; padding-top: 2em; }
                h4 + p + .element { margin-top: -5em; padding-top: 4em; }
                .element { background: #EFE; color: #000; margin: 0 0 1em -1em; padding: 0 1em 0.25em 0.75em; border-left: solid #9F9 0.25em; -padding: 0; /* that last decl is for IE6. Try removing it, it's hilarious! */ }
                .proposal { border: blue solid; padding: 1em; }
                table.matrix, table.matrix td { border: none; text-align: right; }
                table.matrix { margin-left: 2em; }

                .history table { width: 100%; }
                .history, .history td, .history th { border: solid thin; font-size: x-small }
                td.hauthor, td.hdate { width: 10%; }
                td.hversion { width: 5%; text-align: center; }
                td.hchange { width: 100%; }
                
                /* needed to override wiki CSS */
                a, a:link { text-decoration: underline;}
                th { color: #000; }
        </style>

</head>

<body class="draft">

        <div class="head">
                <h1> Timed Media Elements - Open Issues </h1> <h2 class="no-num no-toc" id="working"> 19 March 2007 </h2> 
                <p class="copyright">&copy; Copyright 2007 Apple Inc. All rights reserved.</p>

        </div>

        <h2 class=no-num id=issues>HTML Open Issues</h2>

        <ul>
                <li>Should there be advisory markup attributes in order to describe
                content even more precisely, e.g. dataRate?
                It would be an optional attribute that, if present, would specify the minimum network connection 
                speed (in bits per second) required to use the media resource. The mechanism used to measure
                bandwidth could determined by the user agent; so some implementations might wish to use a static setting 
                controlled by the user, and some might wish to use the average network throughput to the server hosting the media 
                resource. It would only be used for static fallback.


                <li class=no-num>Retrieving a HTMLImageElement for the frame at a specific time from a 
                video would be very useful. Would this be API, e.g.
                
<pre>HTMLImageElement getFrameImage(DOMString time)?</pre>


                or a special URI scheme?


                <li class=no-num>It may be desirable to sync multiple video and audio elements, and have 
                them keep time with each other.

                <li class=no-num>Wherever times appear in APIs or CSS properties, it may be convenient to get and set
                times in other time formats. Formats that may be of particular interest include:
                <ul>
                        <li>SMIL <a href="http://www.w3.org/TR/2005/REC-SMIL2-20050107/smil-timing.html#Timing-ClockValueSyntax">&lt;clock-value&gt;</a>
                        <li>"HH:MM:SS.fraction" with hours and the fractional seconds optional 
                        <li>frame count index relative to start chapter name and/or index
                </ul>

                <li class=no-num>In CSS, time formats could have their own function syntax (such as 
                clock("HH:MM:SS.fraction"), etc. In APIs, it would be possible to just accept strings, but
                that doesn't let you get times in your format of choice. A possible solution is a MediaTime
                interface which can convert to or from various time formats, and which is passed to and
                returned from API methods that deal in times.

                <li class=no-num>What does playbackRate do for audio? Should it be pitch-preserving? Should it
                skip sections if you are going fast enough?

                <li class=no-num>A movie is just a description of the multimedia presentation, the actual media sample
                data is in tracks (or streams). Each track represents a sequence of renderable elements of a
                uniform type, e.g. audio, video, text, etc. We should expose track information via the API
                so developers can determine exactly what a media file contains and so they can enable and
                disable individual tracks to control which take part in the presentation. Tracks contain
                both metadata (eg. sample rate, sample size, bit depth, etc) and annotations (see notes on
                media annotations below). We haven't designed an API for this yet. Perhaps track info and
                metadata should be specified separately.

                <li class=no-num>API to provide access to embedded metadata. In addition to metadata about media
                characteristic (frame rate, data size, bit rate, etc), we should provide access to
                annotation metadata. Annotations in MPEG-4 files can be in several different formats (eg.
                3GPP, iTunes, QuickTime, ID3v2, etc), need not have unique names, and can be tagged with
                language, so an API must allow all of them to be specified. Another form of interesting
                metadata is chapter names and time ranges.

                <li class=no-num>Should there be policies expressed on how to deal with graceful degradation if an
                implementation is unable to support some aspect of a feature (e.g., negative playback
                rates)? This might be a characteristic of the implementation as a whole or the
                characteristic only when dealing with a particular media format (e.g., negative playback on
                a RTP stream doesn't work even though for a .mov it could). Or should this (in)ability be
                discoverable? Some clients that implement video decoding in hardware may not be able to
                scale for instance.

                <li class=no-num>How can a client discover the capabilities of the user agent (e.g., what codecs and
                profiles/levels are supported)?

                <li class=no-num>It might be useful in the API to get the current frame index, or go to a specific frame
                (see time format discussion).

        </ul>

        <h2 id="open-issues"><span class="secno"></span>CSS Open Issues</h2> 

        <ul>
                <li><a href="http://www.w3.org/TR/REC-CSS2/syndata.html#value-def-time">
                &lt;time&gt;</a> values only have second and millisecond unit identifiers. This will
                make it inconvenient to represent time values in long duration media files because all
                times must be converted to seconds. It may make more sense to use a time value
                with a syntax like the SMIL 
                <a href="http://www.w3.org/TR/2005/REC-SMIL2-20051213/smil-timing.html#Timing-ClockValueSyntax">
                &lt;clock-value&gt;</a> type, which allows units of hours, minutes, seconds, and milliseconds,
                so longer times can be expressed without conversion.</p>

                <li>It would be useful to extend CSS <a href="http://www.w3.org/TR/css3-mediaqueries/">Media
                Queries</a> with a new media query feature to make
                rules that are matched based on bandwidth. This will allow a content author to build
                pages that select different CSS files based on the user's bandwidth as well as existing
                media query features like screen size.
                
        </ul>

</body>
</html>

