MediaStreamTrack

The MediaStreamTrack interface represents a single media track within a stream; typically, these are audio or video tracks, but other track types may exist as well.

Properties

In addition to the properties listed below, MediaStreamTrack has constrainable properties which can be set using applyConstraints() and accessed using getConstraints() and getSettings(). See Capabilities, constraints, and settings to learn how to correctly work with constrainable properties. Not doing so correctly will result in your code being unreliable.

MediaStreamTrack.contentHint
A string that may be used by the web application to provide a hint as to what type of content the track contains to guide how it should be treated by API consumers.
MediaStreamTrack.enabled
A Boolean whose value of true if the track is enabled, that is allowed to render the media source stream; or false if it is disabled, that is not rendering the media source stream but silence and blackness. If the track has been disconnected, this value can be changed but has no more effect.
Note: You can implement standard "mute" functionality by setting enabled to false. The muted property refers to a condition in which there's no media because of a technical issue.
MediaStreamTrack.id Read only
Returns a DOMString containing a unique identifier (GUID) for the track; it is generated by the browser.
MediaStreamTrack.isolated Read only
Returns a Boolean value which is true if the track is isolated; that is, the track cannot be accessed by the document that owns the MediaStreamTrack. This happens when the peerIdentity property is set, or if the track comes from a cross-origin source.
MediaStreamTrack.kind Read only
Returns a DOMString set to "audio" if the track is an audio track and to "video", if it is a video track. It doesn't change if the track is deassociated from its source.
MediaStreamTrack.label Read only
Returns a DOMString containing a user agent-assigned label that identifies the track source, as in "internal microphone". The string may be left empty and is empty as long as no source has been connected. When the track is deassociated from its source, the label is not changed.
MediaStreamTrack.muted Read only
Returns a Boolean value indicating whether the track is unable to provide media data due to a technical issue.
Note: You can implement standard "mute" functionality by setting enabled to false, and unmute the media by setting it back to true again.
MediaStreamTrack.readonly Read only
Returns a Boolean value with a value of true if the track is readonly (such a video file source or a camera that settings can't be modified), false otherwise.
MediaStreamTrack.readyState Read only
Returns an enumerated value giving the status of the track. This will be one of the following values:
  • "live" which indicates that an input is connected and does its best-effort in providing real-time data. In that case, the output of data can be switched on or off using the enabled attribute.
  • "ended" which indicates that the input is not giving any more data and will never provide new data.
MediaStreamTrack.remote Read only
Returns a Boolean with a value of true if the track is sourced by a RTCPeerConnection, false otherwise.

Methods

MediaStreamTrack.applyConstraints()
Lets the application specify the ideal and/or ranges of acceptable values for any number of the available constrainable properties of the MediaStreamTrack.
MediaStreamTrack.clone()
Returns a duplicate of the MediaStreamTrack.
MediaStreamTrack.getCapabilities()
Returns the a list of constrainable properties available for the MediaStreamTrack.
MediaStreamTrack.getConstraints()
Returns a MediaTrackConstraints object containing the currently set constraints for the track; the returned value matches the constraints last set using applyConstraints().
MediaStreamTrack.getSettings()
Returns a MediaTrackSettings object containing the current values of each of the MediaStreamTrack's constrainable properties.
MediaStreamTrack.stop()
Stops playing the source associated to the track, both the source and the track are deassociated. The track state is set to ended.

Events

Listen to these events using addEventListener() or by assigning an event listener to the oneventname property of this interface:

ended
Sent when playback of the track ends (when the value readyState changes to ended).
Also available using the onended event handler property.
mute
Sent to the MediaStreamTrack when the value of the muted property is changed to true, indicating that the track is unable to provide data temporarily (such as when the network is experiencing a service malfunction).
Also available using the onmute event handler property.
isolationchange
Sent whenever the value of the isolated property changes due to the document gaining or losing permission to access the track.
Also available through the onisolationchange event handler property.
overconstrained
Sent when the constraints specified for the track cause the track to be incompatible and therefore to not be used.
Also available through the onoverconstrained event handler property.
unmute
Sent to the track when data becomes available again, ending the muted state.
Also available through the onunmute event handler property.

Specifications

Specification Status Comment
Identity for WebRTC
The definition of 'Isolated tracks' in that specification.
Candidate Recommendation Additional properties for isolated track support
Media Capture and Streams
The definition of 'MediaStreamTrack' in that specification.
Candidate Recommendation Initial definition

Browser compatibility

DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
MediaStreamTrackChrome Full support 29Edge Full support 12Firefox Full support 22IE No support NoOpera Full support 16Safari Full support 11WebView Android Full support ≤37Chrome Android Full support 29Firefox Android Full support 22Opera Android Full support 16Safari iOS Full support 11Samsung Internet Android Full support 2.0
applyConstraintsChrome Full support 63Edge Full support 12Firefox Full support 50IE No support NoOpera Full support 46Safari Full support YesWebView Android Full support 63Chrome Android Full support 63Firefox Android Full support 50Opera Android Full support 43Safari iOS Full support YesSamsung Internet Android Full support 7.0
cloneChrome Full support 45Edge Full support 12Firefox Full support 48IE No support NoOpera Full support 32Safari Full support YesWebView Android Full support 45Chrome Android Full support 45Firefox Android Full support YesOpera Android Full support 32Safari iOS Full support YesSamsung Internet Android Full support 5.0
contentHintChrome Full support 60Edge Full support ≤79Firefox ? IE No support NoOpera Full support 47Safari ? WebView Android Full support 60Chrome Android Full support 60Firefox Android ? Opera Android Full support 44Safari iOS ? Samsung Internet Android Full support 8.0
enabledChrome Full support YesEdge Full support 12Firefox Full support 24IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 24Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
ended eventChrome Full support YesEdge Full support 12Firefox Full support 50IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 50Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
getCapabilitiesChrome Full support 66Edge Full support 12Firefox No support NoIE No support NoOpera Full support 53Safari Full support YesWebView Android Full support 66Chrome Android Full support 66Firefox Android No support NoOpera Android Full support 47Safari iOS Full support YesSamsung Internet Android Full support 9.0
getConstraintsChrome Full support 53Edge Full support 12Firefox Full support 50IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support 53Chrome Android Full support 52Firefox Android Full support 50Opera Android Full support YesSafari iOS No support NoSamsung Internet Android Full support 6.0
getSettingsChrome Full support 61Edge Full support 12Firefox Full support 50IE No support NoOpera Full support 48Safari Full support YesWebView Android Full support 61Chrome Android Full support 61Firefox Android Full support 50Opera Android Full support 45Safari iOS Full support 11Samsung Internet Android Full support 8.0
getSources
Deprecated
Chrome No support ? — 56Edge ? Firefox No support NoIE No support NoOpera No support ? — 43Safari ? WebView Android No support ? — 56Chrome Android Full support 56Firefox Android ? Opera Android No support ? — 43Safari iOS ? Samsung Internet Android Full support 6.0
idChrome Full support YesEdge Full support 12Firefox Full support YesIE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support YesOpera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
isolatedChrome ? Edge ? Firefox No support NoIE No support NoOpera ? Safari ? WebView Android ? Chrome Android ? Firefox Android No support NoOpera Android ? Safari iOS ? Samsung Internet Android ?
kindChrome Full support YesEdge Full support 12Firefox Full support YesIE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support YesOpera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
labelChrome Full support YesEdge Full support 12Firefox Full support YesIE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support YesOpera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
mute eventChrome Full support YesEdge Full support 12Firefox Full support 59IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 59Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
mutedChrome Full support YesEdge Full support 12Firefox Full support 59IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 59Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
onendedChrome Full support YesEdge Full support 12Firefox Full support 50IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 50Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
onisolationchangeChrome ? Edge ? Firefox No support NoIE No support NoOpera ? Safari ? WebView Android ? Chrome Android ? Firefox Android No support NoOpera Android ? Safari iOS ? Samsung Internet Android ?
onmuteChrome Full support YesEdge Full support 12Firefox Full support 59IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 59Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
onoverconstrained
DeprecatedNon-standard
Chrome Full support YesEdge Full support 12Firefox Full support YesIE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android ? Opera Android ? Safari iOS Full support YesSamsung Internet Android Full support Yes
onunmuteChrome Full support YesEdge Full support 12Firefox Full support 59IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 59Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
readonly
Deprecated
Chrome ? Edge Full support 12Firefox ? IE No support NoOpera ? Safari ? WebView Android ? Chrome Android ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
readyStateChrome Full support YesEdge Full support 12Firefox Full support 50IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 50Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
remote
DeprecatedNon-standard
Chrome No support 48 — 59Edge No support 12 — 79Firefox Full support YesIE No support NoOpera No support 35 — 46Safari ? WebView Android No support 48 — 59Chrome Android No support 48 — 59Firefox Android Full support YesOpera Android No support 35 — 43Safari iOS ? Samsung Internet Android No support 5.0 — 7.0
stopChrome Full support 61Edge Full support 12Firefox Full support 34IE No support NoOpera Full support 45Safari Full support YesWebView Android Full support 61Chrome Android Full support 61Firefox Android Full support 34Opera Android Full support 43Safari iOS Full support YesSamsung Internet Android Full support 8.0
unmute eventChrome Full support YesEdge Full support 12Firefox Full support 59IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 59Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes

Legend

Full support
Full support
No support
No support
Compatibility unknown
Compatibility unknown
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.

See also