When prompted, accept to share your video stream.

Description

This test checks that the MediaStream object returned by the success callback in getUserMedia can be properly assigned to a video element via the srcObject attribute.



Harness Error (TIMEOUT), message = null

PASS Tests that a MediaStream can be assigned to a video element with srcObject
PASS Tests that a MediaStream assigned to a video element is not seekable
PASS Tests that a MediaStream assigned to a video element is in readyState HAVE_NOTHING initially
TIMEOUT Tests that a MediaStream assigned to a video element has expected duration Test timed out
NOTRUN Tests that a video element with a MediaStream assigned is not preloaded
NOTRUN Tests that a video element with a MediaStream assigned ignores playbackRate attributes (defaultPlaybackRate is identical)
NOTRUN Tests that a video element with a MediaStream assigned ignores playbackRate attributes (defaultPlaybackRate is different)
NOTRUN Tests that a media element with an assigned MediaStream reports the played attribute as expected
NOTRUN Tests that a media element with an assigned MediaStream reports the currentTime attribute as expected
NOTRUN Tests that a media element with an assigned MediaStream starts its timeline at 0 regardless of when the MediaStream was created
NOTRUN Tests that a media element with an assigned MediaStream does not advance currentTime while paused
NOTRUN Tests that the loop attribute has no effect on a media element with an assigned MediaStream
NOTRUN Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through tracks ending
NOTRUN Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through audio tracks ending
NOTRUN Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through track removal
NOTRUN Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through track removal

