W3C home > Mailing lists > Public > whatwg@whatwg.org > March 2011

[whatwg] Stream API Feedback

From: Lachlan Hunt <lachlan.hunt@lachy.id.au>
Date: Wed, 16 Mar 2011 16:36:04 +0100
Message-ID: <4D80D8E4.9070909@lachy.id.au>
On 2011-03-15 21:58, Robert O'Callahan wrote:
> Instead of creating new state signalling and control API for streams, what
> about the alternative approach of letting<video>  and<audio>  use sensors as
> sources, and a way to connect the output of<video>  and<audio> to encoders?

I'm not entirely sure I understand your proposal, but are you suggesting 
that the input streams from the camera/microphone would first go to 
<video> and <audio> elements, allowing the existing HTMLMediaElement API 
on those elements to be used to control those streams, the output of 
which can then be encoded and recorded to a file or streamed remotely?

I'm not so sure that would be ideal.  The state machinary, assuming you 
mean the networkState, readyState and their associated constants, are 
clearly designed and optimised for obtaining media over a network and do 
not map so well to obtaining streams directly from local devices.

Many other properties, such as duration, playbackRate, etc. also do not 
have much meaning in the context of streaming media. Some, like 
currentTime, only have limited applicability to streams as it can tell 
you how long its played for, but must be effectively readonly as seeking 
is not possible.

In fact, of all the properties that are on HTMLMediaElement, the only 
ones that seem to have any real use for streaming media are volume, 
muted, paused and ended.  So I'm not convinced that it's a good idea to 
try and reuse existing APIs simple for the sake of reusing them, when 
they aren't really a good fit.

> Then we'd get all the existing state machinery for free. We'd also get
> sensor input for audio processing (e.g. Mozilla or Chrome's audio APIs), and
> in-page video preview, and using<canvas>  to take snapshots, and more...

We can already do in-page video preview with the existing design.

var v = querySelector("video");
navigator.getUserMedia("video", function(stream) {
   v.src = stream;
});

 From there, taking snapshots with canvas is also possible.  We can in 
fact already do that with what Opera had implemented for the <device> 
element.

But that's not particularly useful for the audio element. It's rare that 
the user would want their microphone input to be echoed back to them via 
an audio element. In most cases, when a microphone stream is input into 
an audio element, the audio element itself would need to be muted to 
prevent unwanted and annoying echo or, worse, feedback loops.  That 
would only be useful if the audio data were being analysed and output, 
for example, to an audio spectrum visualisation (like with Mozilla's 
experimental audio data API).

-- 
Lachlan Hunt - Opera Software
http://lachy.id.au/
http://www.opera.com/
Received on Wednesday, 16 March 2011 08:36:04 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:59:31 UTC