- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Wed, 25 Sep 2013 14:29:44 +0200
- To: "public-media-capture@w3.org" <public-media-capture@w3.org>
- Message-ID: <5242D738.4050805@alvestrand.no>
The behaviour of the stop() method is changed in recent versions of the spec.* The spec text is: When a MediaStreamTrack <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStreamTrack>object's stop()method is invoked, if no source is attached (e.g., sourceTypeis "none"), then this call returns immediately (e.g., is a no-op). Otherwise, the user agent mustqueue a task that runs the following steps: 1. Let track be the current MediaStreamTrack <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStreamTrack>object. 2. End <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastreamtrack-ended>track. The track starts outputting only silence and/or blackness, as appropriate. 3. Permanently stop the generation of data for track's source. If the data is being generated from a live source (e.g., a microphone or camera), then the user agent shouldremove any active "on-air" indicator for that source. If the data is being generated from a prerecorded source (e.g. a video file), any remaining content in the file is ignored. The task source for the tasks queued for the stop() <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#dom-mediastreamtarck-stop>method is the DOM manipulation task source. Also: When a MediaStreamTrack <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStreamTrack>object ends for any reason (e.g., because the user rescinds the permission for the page to use the local camera, or because the data comes from a finite file and the file's end has been reached and the user has not requested that it be looped, or because the UA has instructed the track to end for any reason, or because the reference count of the track's underlying media source has reached zero), it is said to be ended. When track instance track ends for any reason other than the stop() <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#dom-mediastreamtrack-stop>method being invoked on the MediaStreamTrack <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStreamTrack>object that represents track, the user agent mustqueue a task that runs the following steps: 1. If the track's readyState <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#dom-mediastreamtrack-readystate>attribute has the value endedalready, then abort these steps. 2. Set track's readyState <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#dom-mediastreamtrack-readystate>attribute to ended. 3. Fire a simple event named ended <http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastreamtrack-ended>at the object. If the end of the stream was reached due to a user request, the event source for this event is the user interaction event source. Chrome will change its behaviour to conform to this text, subject to the rules imposed by the required isolation between tabs. This means that: * When two tracks in the same tab are fed from the same source, stop() will cause both of them to be ended. The one on which the call was not made will have an event named "ended" fired at it. * When a source is used in two tabs, calling stop() in one of the tabs will not cause any effect on the other; the camera light will remain on, the per-tab indicator will continue to show for the tab that is still capturing, and media will continue to flow. Only when all tabs have released the camera will the camera actually be turned off. * The stop() method on MediaStream is gone. This change will happen in the M32 timeframe. * -- Surveillance is pervasive. Go Dark.
Received on Wednesday, 25 September 2013 12:30:19 UTC