[whatwg] Video with MIME type application/octet-stream

Roger Hågensen rescator at emsai.net
Fri Sep 10 15:51:01 PDT 2010


  On 2010-09-09 09:24, Philip Jägenstedt wrote:
> On Thu, 09 Sep 2010 02:15:27 +0200, David Singer <singer at apple.com> 
> wrote:
>
>>> On Wed, Sep 8, 2010 at 3:13 PM, And Clover <and-py at doxdesk.com> wrote:
>>>> Perhaps I *meant* to serve a non-video
>>>> file with something that looks a fingerprint from a video format at 
>>>> the top.
>>>
>>> Anything's possible, but it's vastly more likely that you just made 
>>> a mistake.
>>
>> It may be possible to make one file that is valid under two formats.  
>> Kinda like those old competitions "write a single file that when 
>> compiled and run through as many languages as possible prints "hello, 
>> world!" :-).
>
> For at least WAVE, Ogg and WebM it's not possible as they begin with 
> different magic bytes.
>

Then why not define a new "magic" that is universal, so that if a proper 
content type is not stated then a sniffing for a standardized universal 
magic is done?

Yep, I'm referring to my BINID proposal.
If a content type is missing, sniff the first 265 bytes and see if it is 
a BINID, if it is a BINID check if it's a supported/expected one, and it 
is then play away, all is good.
If a content type is given, then just in case sniff the first 265 bytes 
and see if it is a BINID, if it is a BINID check if it's a 
supported/expected one, and it is then play away, all is good.
If a content type is missing, and the sniffing of the first 265 bytes 
shows it is not a BINID or not a supported one, then it can only be 
treated as unknown binary and would fail (though in the case of a 
unsupported BINID the user would be shown what the BINID is so they 
won't be fully stuck if they miss a particular codec or the browser 
doesn't support it).
If a content type is given, and sniffing the first 265 bytes shows it's 
not a BINID or not a supported one, then treat it as per the context 
(video or audio) and hope the video or audio codec layer is able to find 
out what it is (what "should" happen currently right?).

It would be very easy to add support for something like BINID as it can 
be output at the start of a file or stream as the server sends it, a 
script could even output it or it could be at the start of the actual 
file itself,
and in the case of live streaming a server could easily add it to the 
start of the stream even if it's mid-stream. Even a wrongly configured 
webserver wouldn't be able to mess up the handling of this.
The benefit is that the browser would see that, Oh, this is a BINID and 
it's Webm, I'll pass this on to the video codec then.
Or if <audio> and the browser sees it is a BINID and it's MP3 it would 
pass it to the mp3 audio codec.
In time something like BINID might even propagate elsewhere beyond just 
<video> and <audio>.

I'm not saying that BINID must be used, but at least something very 
close to it (as unknown formats can be shown to a human user and make 
sense and be searchable), and maybe the first 8 bytes should be 
constructed slightly differently?.
Oh and although I haven't tested this, I suspect that most current 
codecs would ignore the first 265 bytes when they sniff for the start of 
the data anyway so a BINID would be partially backwards compatible,
and in any case certainly easy to patch in support for quite easily.
And the best part is that the browser could easily strip or skip past 
the BINID when passing the data to the OS or codecs (if such do not 
support BINID at all), or if saving the audio or video locally per user 
request.

Something like BINID (short for Binary Identification actually) is 
needed, and there is nothing wrong with HTML5 and <video> <audio> 
standard defining it,
it wouldn't be the first time a web standard has been adopted elsewhere 
later, it would surely see adoption outside of this, I certainly would 
use it elsewhere.

I invented BINID for a reason, because .*** file extensions just isn't 
good enough, and sniffing binary files is a real pain, the same pain as 
the <video> and <audio> discussion here is pointing out right now.

So if sniffing is bad, but sniffing can't be avoided, then why not 
simply standardize the sniffing by defining a universal, simple and end 
user friendly (the BINID can be displayed to the user, even if 
unknown/unsupported),
and the sniffing would be limited to the first 265 bytes (in the case of 
the BINID proposal), and this limited sniffing can't determine what 
something is and the context and extra info (like content type) does not 
clarify what it is or what to do with it then simply fail and inform the 
user, it doesn't have to be more complicated than that.

As simple as possible, but no simpler. Isn't that the ideal mantra of 
all coders here?

Remember, I'm not saying you must use BINID (but hey it's there and 
fleshed out already), if you must change the name, do so, if you must 
change the 8 byte sequence, do so, just make sure it has a max length, 
and the "ID" is humanly disaplayable if the format is unsupported. Just 
make it into an RFC or something, and spec it in the HTML standard that 
it must be supported, and spec how to behave if it's not present (like I 
pointed further above) and it's solved as best as is possible. (unless 
somebody have an even better idea here that is?)

And yeah, this kinda stretched beyond the scope of HTML5 specs, but 
you'd be swatting two flies at once, solving the sniffing issue with 
<video> and <audio>, but also the sniffing issue that every OS has had 
for the last couple of um... decades?! (poke your OS/Filesystem 
colleagues and ask them what they think of something like this.)
Then again, HTML5 is kinda a OS in it's own right, being a app platform 
(not to mention supporting local storage of databases and files even), 
so maybe it's not that far outside the scope anyway to define something 
like this?

-- 
Roger "Rescator" Hågensen.
Freelancer - http://EmSai.net/




More information about the whatwg mailing list