Firefox/Block Playback: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
=Overview=
=Overview=
Block Playback
Videos which autoplay in the background will now have their load deferred until the tab is visible for the first time -- this avoids autoplay during session restore and premature playback. This means no more "Where's that sound coming from?" moments when an ad for instance decides to autoplay in a tab you've specifically opened in the background.
Video/Audio will be blocked if a new tab been opened but never bring to front.
Resources will still be preloaded if indicated but Firefox will delay the start of playback until you actually visit the tab. Once a tab / RenderFrame has ever played media before, it's allowed to continue to autoplay/autoload indefinitely; this is to support playlist type applications. This feature prevents obviously user annoyance but also conserves power as Firefox will only consume power once the tab is foregrounded.


 
==Issue==
===Meta Bug===
This mechanism will also block notification sounds from websites such as Facebook or Gmail if a user open the tab but haven’t visited it yet. There are also users who want to open new tab for music without needing to visit the tab. The mechanism will force users to visit the tab for the music to start playing.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1262053 Bug 1262053]


===Other Resources===
===Other Resources===
* [https://goo.gl/0dylCY Meeting Minute]
* [https://goo.gl/0dylCY Meeting Minute]


=='''MVP Scope'''==
Meta Bug: [https://bugzilla.mozilla.org/show_bug.cgi?id=1308154 1308154 - (block-autoplay-media) [meta<nowiki>]</nowiki> Block autoplay media until the tab is visible at first time]


=Known Issues=
''Related telemetries'':
* [https://telemetry.mozilla.org/new-pipeline/dist.html#!cumulative=0&end_date=2016-08-28&keys=All!AV%252C241-480!V%252C241-480!AV%252C481-720&max_channel_version=nightly%252F51&measure=VIDEO_SUSPEND_RECOVERY_TIME_MS&min_channel_version=null&product=Firefox&sanitize=1&sort_keys=submissions&start_date=2016-08-18&table=0&trim=1&use_submission_date=0 VIDEO_SUSPENDED_RECOVERY_TIME_MS]
''Related bugs'':
* [https://bugzil.la/1272919 Bug 1272919 - Video shows the frame that was on screen when I switched from youtube to a different tab for a fraction of a second]
===Video element as content source===
The situation is about the video element itself is used as a content source and its decoder might be suspended at the same time. This issue could be split into two cases:
* Case 1: The decoder is suspended '''AFTER''' the {cpatureStream(), drawImage(), createImageBitmap()} is called.
* Case 2: The decoder is suspended '''BEFORE''' the {cpatureStream(), drawImage(), createImageBitmap()} is called.
'''Case 1''' is relatively easy, we could mark the video element as being a content source while {cpatureStream(), drawImage(), createImageBitmap()} is invoked and then its decoder should never be suspended.


'''Case 2''' is rather complicated. The critical issue is that resuming decoder is an async operation with latency. So, while {cpatureStream(), drawImage(), createImageBitmap()} is invoked on an already-suspended-video, there must be several "blank" frames been leaked, even though we resume the decoder immediately. To completely solve this problem, we must make "resuming decoder" a blocking operation, however, it might block the main thread; otherwise, we leak the blank frames.
<bugzilla>
    {
        "blocks":"1308154",
        "status":["NEW","REOPENED","UNCONFIRMED","ASSIGNED","RESOLVED","VERIFIED","CLOSED"],
        "include_fields": "id, summary, status, target_milestone, resolution, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


 
= Schedule =
''Related bugs'':
Targeting: '''Firefox 52'''
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1284389 Bug 1284389 - Don't suspend video elements captured via mozCaptureStream()]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1295921 Bug 1295921 - Don't suspend video decoder for elements as sources to drawImage() and createImageBitmap()]
 
=Planning=
==Goals==
* Help users to reduce device resource usage (CPU & Memory)
* Finish tasks across videos
* No impact on current user flow
 
==Feature Plan==
* Phase 0: Shutdown decoders when video element is invisible
* Phase 1: Using a blank video decoder to replace video decoder instead of shutdown decoders directly. In this phase, the mechanism is applied to 1) Low-resolution video (480P) and 2) Video film without audio track
* Phase 2: We're going to enhance the mechanism and make sure it can apply to all video files.
 
==Success==
* Effective cross-discipline teams solving problems across platforms
* Validation of key assumptions through telemetrics
* video decode suspend in the hands of all our users
 
==Schedule==
 
===Product Milestones===
 
 
= Engineering =
Block Playback [status: <span style="color:#0f0">Green</span>]
 
Current Goals:
* Ship disabling video decoders for ads
* Silent, looping videos where user doesn't really care the exact point
 
Next Milestone:
 
 
 
== Milestones ==
=== Optimizations ===
* [https://bugzil.la/1282710 Bug 1282710 - Suspend and resume foreground video decoders according to visibility events]
** done.
* [https://bugzil.la/1282012 Bug 1282012 - Seek to nearest keyframe when resuming videos with no audio]
** [https://bugzil.la/1294657 Bug 1294657 - Seek to nearest keyframe when resuming videos with no audio - with audio track but muted]
*** pending, excluded from phase 1.
** [https://bugzil.la/1294658 Bug 1294658 - Seek to nearest keyframe when resuming videos with no audio - with audio track but might be silent]
*** pending, excluded from phase 1.
** [https://bugzil.la/1294656 Bug 1294656 - Seek to nearest keyframe when resuming videos with no audio - no audio track]
*** done.
* [https://bugzil.la/1274919 Bug 1274919 - Resume suspended video decoders on tab mouse hover.]
** under review.
* [https://bugzil.la/1284389 Bug 1284389 - Don't suspend video elements captured via mozCaptureStream()]
** WIP.
* [https://bugzil.la/1295921 Bug 1295921 - Don't suspend video decoder for elements as sources to drawImage() and createImageBitmap()]
** WIP.
* Resume video when keyboard is used to change tags - Needs Bug
** For example, if it's possible to detect the direction of cycling and videos are within, say, 5 tabs of the current tab, then start decoding again.
** Need to hook into the tab navigation/change code and alert media elements, like bug 1274919
 
=== Telemetry ===
* '''Amount of time hidden''' - measure of user value (Bucket results by resolution; i.e. are 720p videos hidden less often?)
** [http://bugzil.la/1285419 Bug 1285419 - Telemetry to support background video decoder suspend: Hidden play time]
** [https://mzl.la/2c0493i VIDEO_HIDDEN_PLAY_TIME_MS]
** [http://bugzil.la/1287987 Bug 1287987 - Telemetry to support background video decoder suspend: Percentage hidden/total play time, keyed by audio presence and height ranges]
** [https://mzl.la/2c04hQl VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE]
** [http://bugzil.la/1293145 Bug 1293145 - Telemetry to support background video decoder suspend: Percentage video-decode-suspended/total play time]
** [https://mzl.la/2c07M9s VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE]
 
* '''Recovery time''' - measure of user cost (separate for noisy vs silent videos) (Bucket results by resolution; i.e. do 720p videos take longer to recover?)
** [https://bugzil.la/1294349 Bug 1294349 - Telemetry to support background video decoder suspend: Recovery time from video-decode-suspended]
** [https://mzl.la/2c947Iv VIDEO_SUSPEND_RECOVERY_TIME_MS]
 
* '''Key frame spacing''' - distribution allows better tuning
** [http://bugzil.la/1289668 Bug 1289668 - Telemetry to support background video decoder suspend: Inter-keyframe timings]
** [https://mzl.la/2c04Utr VIDEO_INTER_KEYFRAME_AVERAGE_MS]
** [https://mzl.la/2c956bN VIDEO_INTER_KEYFRAME_AVERAGE_PERCENTAGE]
 
=== Mochitests ===
* [https://bugzil.la/1284177 Bug 1284177 - Add tests for video suspend in background]
** done
* [https://bugzil.la/1294358 Bug 1294358 - Add test for suspended videos still fire 'ended' event]
** done
* [https://bugzil.la/1295844 Bug 1295844 - Test suspended videos with webm files]
** done


=Team=
=Team=


Product owner:
Eng: Alastor, JW, Kaku
 
Eng: Alastor, Daniel, Gerald, JW, Kaku,


Program Management: Blake, Josh
Program Management: Blake, Josh
Line 124: Line 32:
UX: Mark, Morpheus  
UX: Mark, Morpheus  


QA: SoftVision and William
QA: SoftVision
 
=Communications=
 
IRC:
 
Email:
 
VidyoRoom:

Latest revision as of 07:12, 7 October 2016

Overview

Videos which autoplay in the background will now have their load deferred until the tab is visible for the first time -- this avoids autoplay during session restore and premature playback. This means no more "Where's that sound coming from?" moments when an ad for instance decides to autoplay in a tab you've specifically opened in the background. Resources will still be preloaded if indicated but Firefox will delay the start of playback until you actually visit the tab. Once a tab / RenderFrame has ever played media before, it's allowed to continue to autoplay/autoload indefinitely; this is to support playlist type applications. This feature prevents obviously user annoyance but also conserves power as Firefox will only consume power once the tab is foregrounded.

Issue

This mechanism will also block notification sounds from websites such as Facebook or Gmail if a user open the tab but haven’t visited it yet. There are also users who want to open new tab for music without needing to visit the tab. The mechanism will force users to visit the tab for the music to start playing.

Other Resources

MVP Scope

Meta Bug: 1308154 - (block-autoplay-media) [meta] Block autoplay media until the tab is visible at first time


Full Query
ID Summary Status Target milestone Resolution Assigned to Depends on Blocks Whiteboard
1262053 Block playback of media until document is visible VERIFIED mozilla51 FIXED Alastor Wu [:alwu] 1235612, 1242874, 1262358, 1300459, 1322505, 1330963, 1331317 1187778, 1265981, 1296163, 1298777, 1302350, 1308154
1302350 Refactor the block-media-element feature. RESOLVED mozilla52 FIXED Alastor Wu [:alwu] 1262053, 1308119, 1315521, 1315551, 1315564, 1317167 1322384, 1244768, 1308154, 1321196
1308153 Implement the new UX visual mechanism for blocking autoplay media RESOLVED mozilla52 FIXED Alastor Wu [:alwu] 1319526, 1319529, 1319771, 1320005, 1327045, 1327205, 1328058 1308154
1308399 [UX] UX Spec for Delay Autoplay RESOLVED --- FIXED Mark Liang(:mark_liang) 1308154
1314220 Add the Telemetry for blocking autoplay media VERIFIED mozilla53 FIXED Alastor Wu [:alwu] 1308154
1319526 Media autoplay blocking icon has the wrong tooltip RESOLVED --- WORKSFORME 1308153, 1308154
1319529 The unblocking icon didn't be hided when resuming Flash RESOLVED mozilla53 FIXED Alastor Wu [:alwu] 1330195 1308153, 1308154
1319771 If the pinned tab is the first tab in the tab list, the media won't be blocked after browser restarts VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1308153, 1308154
1320005 Don't show 'play tab' icon for video without audio track VERIFIED mozilla53 FIXED Alastor Wu [:alwu] 1309162 1308153, 1308154
1322505 Don't resume the video after calling video.pause() VERIFIED mozilla53 FIXED Alastor Wu [:alwu] 1328058, 1341062 1262053, 1308154
1328058 Tab displays "play" button or sound indicator when the only media element is playing and has no sound VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1308153, 1308154, 1322505
1329170 Play Tab indicator looks pixelated in pinned tabs VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1308154
1329179 Play Tab indicator is displayed on a foreground tab VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1308154
1330195 The audio indicator doesn't work for flash on Linux RESOLVED --- DUPLICATE Alastor Wu [:alwu] 1308154, 1319529
1330232 Blocked media was resumed with sound when user click "mute tab" in the pop-up menu RESOLVED mozilla53 FIXED Alastor Wu [:alwu] 1308154, 1336309
1330644 No indications that a video with no audio track is blocked RESOLVED --- WONTFIX 1308154
1330681 Play tab indicator has no hover state in pinned tabs VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1308154
1330929 Play tab icon not displayed for certain plugins RESOLVED --- WORKSFORME 1331317 1308154
1331317 Only enable pref "media.block-autoplay-until-in-foreground" on Nightly VERIFIED mozilla53 FIXED Alastor Wu [:alwu] 1262053, 1308154, 1330929, 1330963
1336309 Modify the access key for "play tab" option VERIFIED Firefox 54 FIXED Alastor Wu [:alwu] 1330232 1308154
1337232 Enable pref "media.block-autoplay-until-in-foreground" by default VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1345947 1308154
1337704 Flickery transition between tabs indicators (play tab -> sound) RESOLVED --- WONTFIX 1308154
1338137 If the first tab is pinned and muted - media is not blocked after browser restart VERIFIED mozilla54 FIXED Alastor Wu [:alwu] 1348859 1308154
1338145 Social media: notification inconsistent behavior (Play tab indicator + sound) RESOLVED --- INVALID 1308154
1343465 The tab should show the "play tab" icon even the tab was muted. RESOLVED mozilla54 FIXED Alastor Wu [:alwu] 1179542 1308154
1345947 The blocked autoplay media icon appears for tabs that I've seen before RESOLVED --- DUPLICATE Alastor Wu [:alwu] 1308154, 1337232
1347758 HTML5 video/audio doesn't play if node was removed in background tab RESOLVED mozilla55 FIXED Alastor Wu [:alwu] 1308154, 1350869
1347791 The pinned tab shows play tab icon every time when restarts browser VERIFIED Firefox 56 FIXED Alastor Wu [:alwu] 1449022 1308154
1348326 BBC video/audio fails to load after focusing the video’s tab RESOLVED --- WORKSFORME Alastor Wu [:alwu] 1308154, 1350869 [platform-rel-BBC][platform-rel-BBCNews]
1348759 The video/audio on be-at.tv is not working as expected after focusing the video's tab RESOLVED --- DUPLICATE Alastor Wu [:alwu] 1308154, 1350869
1348859 Focusing an opened Facebook game tab no longer outputs the audio RESOLVED --- DUPLICATE Alastor Wu [:alwu] 1308154, 1338137, 1350869
1348879 Playbutton not visible when opening a video from givemesport.com in a new tab RESOLVED --- DUPLICATE 1308154, 1350869
1348909 Focusing the Web Skype tab while being called does not output the call audio RESOLVED --- DUPLICATE 1308154, 1350869
1349202 Block Playback feature is not working as intended on several websites RESOLVED --- DUPLICATE 1308154, 1350869
1350947 Postpone loading NPAPI Flash content until the tab is resumed RESOLVED --- WONTFIX Alastor Wu [:alwu] 1308154
1352014 Add the flag "RELEASE_OR_BETA" for the pref "media.block-autoplay-until-in-foreground" RESOLVED mozilla55 FIXED Alastor Wu [:alwu] 1308154
1358211 Blocking autoplay for background tabs (bug 1308154) is breaking twitter videos RESOLVED --- WORKSFORME 1308154
1367356 Add telemetry to measure how many Flash contents are blocked by blocking autoplay media RESOLVED --- WONTFIX Alastor Wu [:alwu] 1308154
1378105 Media is not blocked for previously unfocused closed tabs after restoring them from the History menu RESOLVED --- WORKSFORME 1274919, 1308154
1387917 Turn on the pref "media.block-autoplay-until-in-foreground" by default RESOLVED mozilla57 FIXED Alastor Wu [:alwu] 1308154
1394455 [e10s] Media is unblocked while hovering an unfocused tab VERIFIED mozilla57 FIXED Mike Conley (:mconley) (:⚙️) 1308154, 1385453 [photon-performance] [testcoverage]
1572798 Video element created using document.open() doesn't work RESOLVED 86 Branch FIXED Emilio Cobos Álvarez [:emilio] 1578379, 1643204 1308154, 1582042, 1685201
1611748 video does not play in a dynamically created iframe (friendly) RESOLVED --- WORKSFORME Alastor Wu [:alwu] 1308154
1684876 "Mute Tab" sometimes starts playing the tab's video, with sound RESOLVED 95 Branch FIXED kz04px 1188860, 1308154
1685163 MediaStreamTrack freezes when played in opened popup (used to work if visiting fullscreen) RESOLVED --- WORKSFORME Alastor Wu [:alwu] 1308154
1733902 Autoplay fails if the player is switched in a background tab VERIFIED 96 Branch FIXED Alastor Wu [:alwu] 1308154, 1739685

46 Total; 0 Open (0%); 30 Resolved (65.22%); 16 Verified (34.78%);


Schedule

Targeting: Firefox 52

Team

Eng: Alastor, JW, Kaku

Program Management: Blake, Josh

UX: Mark, Morpheus

QA: SoftVision