- From: Randell Jesup <randell-ietf@jesup.org>
- Date: Tue, 06 Mar 2012 23:59:01 -0500
- To: robert@ocallahan.org
- CC: public-webrtc@w3.org, Robert O'Callahan <roc@ocallahan.org>, Chris Pearce <cpearce@mozilla.com>
- Message-ID: <4F56EB15.1030402@jesup.org>
On 3/6/2012 6:21 PM, Robert O'Callahan wrote: > On Tue, Mar 6, 2012 at 3:44 PM, Randell Jesup <randell-ietf@jesup.org > <mailto:randell-ietf@jesup.org>> wrote: > > So we need "something" to transform blobs into mediastreams (and > the same principle would apply for recordings, at least of data > from a camera/mic or decoded remote data). > > There are a few ways to deal with this: > 1) self-identifying streams and a 'smart' decoder > 2) out-of-band information as to the encoding (i.e. specified by > the app directly or indirectly) > > Streams on the web typically are handled by out-of-band > information (MIME types), so any solution we make should at least > support that, and perhaps even use that as the primary solution. > > > A Blob object already has a MIME type along with the data. There is no > problem here. Good; I hadn't played much with Blobs and Harald's comment strongly implied (really stated) external metadata being required to decode it. > I suppose (noodling without really knowing what I'm talking about > ;-) ) you could have a disconnected <video> or <audio> element > with a blob as a source with a mime type supplied, and add a > 'dest' or 'output' attribute which would be a MediaStream. This > might even make sense... And you'd have an obvious way to do > things like provide initial scaling of the video, or insertion of > subtitles, etc. Hmmm. > > I do want to get away from URL.createObjectURL(MediaStream) for > setting the src for a <video> element, and I think there's a > bigger opportunity here to unify media handling in a way that will > make future work easier. > > > The MediaStreams Processing spec extends media elements' "src" > attribute so you can set it directly to a MediaStream: "video.src = > stream;". I've implemented that in my patches. It also adds an API to > capture a MediaStream from a media element, e.g. "stream = > video.captureStreamUntilEnded()". Right - I was forgetting the details of the Processing API proposal; that's what I was really suggesting here - we should use that portion of the MediaStream Processing API. To quote myself in the message that kicked off this discussion: URLs don't help us solve other problems (and add new ones); MediaStreams are a mechanism that lets us solve a whole class of problems (and encapsulate utility/semantics such as audio/video synchronization and multiple/alternate tracks). > > It would also make sense to extend the "src" attribute to directly > accept Blob objects as well. The behavior is just like assigning to > the result of createObjectURL, except it has better GC behavior since > you don't have to manually revoke the URL. > > Then you could do, e.g., > var video = document.createElement("video"); > video.src = blob; > var stream = video.captureStreamUntilEnded(); > video.play(); Rob's suggestion is exactly what I would like to push here, and similar to what I originally suggested - as mentioned above, this gives us a clean way to substitute data for cameras/mics when building MediaStreams; it promotes MediaStreams to being a common way to to handle audio and video (and maintain sync for them), and gives us a clean way to play back recorded blobs. Also, if there's any need for the consumer of a MediaStream to affect the source, that could be fairly easily implemented with MediaStreams or things built on top of them; with URLs it may make it more painful. MediaStreams: * Hold related audio and/or video tracks * Can be created from Blobs via video elements (with Rob's suggestion above), cameras/mics (getUserMedia), or remote media streams (PeerConnections or from a remote URL via a video element with the MediaStream Processing API) * Can be duplicated to feed content to multiple places * Can be fed into media elements for playback (video.src = mediastream, which we're suggesting) * Can be recorded into a Blob (mediastream.record()) * Can be encoded and sent (via PeerConnection) * Can be processed in arbitrary manners (with the MediaStream Processing API) * Allow for less-error-prone GCing of data by not needing to revoke URLs * is a floor wax and a desert topping ;-) -- Randell Jesup randell-ietf@jesup.org
Received on Wednesday, 7 March 2012 05:01:33 UTC