Changeset 271698 in webkit


Ignore:
Timestamp:
Jan 21, 2021 10:08:54 AM (18 months ago)
Author:
youenn@apple.com
Message:

Allow MediaStream and non MediaStream backed videos to play together
https://bugs.webkit.org/show_bug.cgi?id=199661
<rdar://problem/68622411>

Reviewed by Eric Carlson.

Source/WebCore:

Changing heuristic to always allow MediaStream backed videos to play concurrently with other videos.
To not break existing websites, we keep the existing behavior for non MediaStream backed videos.

Test: webrtc/concurrentVideoPlayback2.html

  • platform/audio/PlatformMediaSession.cpp:

(WebCore::PlatformMediaSession::canPlayConcurrently const):

LayoutTests:

  • webrtc/concurrentVideoPlayback-expected.txt:
  • webrtc/concurrentVideoPlayback.html:
  • webrtc/concurrentVideoPlayback2-expected.txt: Added.
  • webrtc/concurrentVideoPlayback2.html: Added.
Location:
trunk
Files:
1 added
5 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r271696 r271698  
     12021-01-21  Youenn Fablet  <youenn@apple.com>
     2
     3        Allow MediaStream and non MediaStream backed videos to play together
     4        https://bugs.webkit.org/show_bug.cgi?id=199661
     5        <rdar://problem/68622411>
     6
     7        Reviewed by Eric Carlson.
     8
     9        * webrtc/concurrentVideoPlayback-expected.txt:
     10        * webrtc/concurrentVideoPlayback.html:
     11        * webrtc/concurrentVideoPlayback2-expected.txt: Added.
     12        * webrtc/concurrentVideoPlayback2.html: Added.
     13
    1142021-01-21  Youenn Fablet  <youenn@apple.com>
    215
  • trunk/LayoutTests/webrtc/concurrentVideoPlayback-expected.txt

    r267644 r271698  
    33PASS Basic audio/video exchange
    44PASS Play MediaStream backed streams concurrently
    5 PASS Play regular video content should pause MediaStream backed video elements
    6 PASS Play MediaStream backed video elements should pause regular video content
     5PASS Play regular video content should not pause MediaStream backed video elements
    76
  • trunk/LayoutTests/webrtc/concurrentVideoPlayback.html

    r245712 r271698  
    5252    await video3.play();
    5353
    54     let counter = 0;
    55     while (!video1.paused && ++counter < 20)
    56         await new Promise(resolve => setTimeout(resolve, 50));
    57 
    58     assert_true(video1.paused, "video1 paused");
    59     assert_true(video2.paused, "video2 paused");
    60     assert_false(video3.paused, "video3 paused");
    61 }, "Play regular video content should pause MediaStream backed video elements");
    62 
    63 promise_test(async (test) => {
    64     await video1.play();
    65 
    66     assert_true(video3.paused, "video3 paused");
    67 
    68     await video2.play();
    69 
    70     let counter = 0;
    71     while (!video3.paused && ++counter < 20)
    72         await new Promise(resolve => setTimeout(resolve, 50));
    73 
    7454    assert_false(video1.paused, "video1 paused");
    7555    assert_false(video2.paused, "video2 paused");
    76     assert_true(video3.paused, "video3 paused");
    77 }, "Play MediaStream backed video elements should pause regular video content");
     56    assert_false(video3.paused, "video3 paused");
     57}, "Play regular video content should not pause MediaStream backed video elements");
    7858        </script>
    7959    </body>
  • trunk/LayoutTests/webrtc/concurrentVideoPlayback2.html

    r271697 r271698  
    33    <head>
    44        <meta charset="utf-8">
    5         <title>Testing concurrent video playing</title>
     5        <title>Testing concurrent video playing 2</title>
    66        <script src="../resources/testharness.js"></script>
    77        <script src="../resources/testharnessreport.js"></script>
     
    1212        <video id="video2" autoplay controls></video>
    1313        <video id="video3" autoplay controls></video>
     14        <video id="video4" autoplay controls></video>
    1415        <script src ="routines.js"></script>
    1516        <script>
    1617promise_test(async (test) => {
    17     if (window.testRunner)
    18         testRunner.setUserMediaPermission(true);
    19 
    2018    localStream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
    2119
     
    3432    video1.srcObject = localStream;
    3533    video2.srcObject = remoteStream;
     34    await video1.play();
     35    await video2.play();
    3636}, "Basic audio/video exchange");
    3737
    3838promise_test(async (test) => {
    39     await video1.play();
    40     await video2.play();
    41 
    42     assert_false(video1.paused, "video1 paused");
    43     assert_false(video2.paused, "video2 paused");
    44 }, "Play MediaStream backed streams concurrently");
    45 
    46 promise_test(async (test) => {
    47 
    4839    if (window.internals)
    4940        internals.setMediaSessionRestrictions('videoaudio', 'ConcurrentPlaybackNotPermitted');
     
    5647        await new Promise(resolve => setTimeout(resolve, 50));
    5748
    58     assert_true(video1.paused, "video1 paused");
    59     assert_true(video2.paused, "video2 paused");
     49    assert_false(video1.paused, "video1 paused");
     50    assert_false(video2.paused, "video2 paused");
    6051    assert_false(video3.paused, "video3 paused");
    61 }, "Play regular video content should pause MediaStream backed video elements");
     52}, "Play regular video content should not pause MediaStream backed video elements");
    6253
    6354promise_test(async (test) => {
    64     await video1.play();
    65 
    66     assert_true(video3.paused, "video3 paused");
    67 
    68     await video2.play();
     55    video4.src = findMediaFile('video', '../media/content/audio-tracks');
     56    await video4.play();
    6957
    7058    let counter = 0;
    71     while (!video3.paused && ++counter < 20)
     59    while (!video1.paused && ++counter < 20)
    7260        await new Promise(resolve => setTimeout(resolve, 50));
    7361
     
    7563    assert_false(video2.paused, "video2 paused");
    7664    assert_true(video3.paused, "video3 paused");
    77 }, "Play MediaStream backed video elements should pause regular video content");
     65    assert_false(video4.paused, "video4 paused");
     66}, "Play regular video content should not pause MediaStream backed video elements but should pause not MediaStream backed video elements");
     67
     68promise_test(async (test) => {
     69    await video3.play();
     70
     71    assert_false(video1.paused, "video1 paused");
     72    assert_false(video2.paused, "video2 paused");
     73    assert_false(video3.paused, "video3 paused");
     74    assert_true(video4.paused, "video4 paused");
     75}, "Restart regular video content should not pause MediaStream backed video elements but should pause not MediaStream backed video elements");
     76
     77promise_test(async (test) => {
     78    await video2.pause();
     79    await video2.play();
     80
     81    assert_false(video1.paused, "video1 paused");
     82    assert_false(video2.paused, "video2 paused");
     83    assert_false(video3.paused, "video3 paused");
     84    assert_true(video4.paused, "video4 paused");
     85}, "Pause/play MediaStream backed video elements should not change regular video content");
    7886        </script>
    7987    </body>
  • trunk/Source/WebCore/ChangeLog

    r271696 r271698  
     12021-01-21  Youenn Fablet  <youenn@apple.com>
     2
     3        Allow MediaStream and non MediaStream backed videos to play together
     4        https://bugs.webkit.org/show_bug.cgi?id=199661
     5        <rdar://problem/68622411>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Changing heuristic to always allow MediaStream backed videos to play concurrently with other videos.
     10        To not break existing websites, we keep the existing behavior for non MediaStream backed videos.
     11
     12        Test: webrtc/concurrentVideoPlayback2.html
     13
     14        * platform/audio/PlatformMediaSession.cpp:
     15        (WebCore::PlatformMediaSession::canPlayConcurrently const):
     16
    1172021-01-21  Youenn Fablet  <youenn@apple.com>
    218
  • trunk/Source/WebCore/platform/audio/PlatformMediaSession.cpp

    r271670 r271698  
    366366        return false;
    367367
    368     return m_client.hasMediaStreamSource() && otherSession.m_client.hasMediaStreamSource();
     368    return m_client.hasMediaStreamSource() || otherSession.m_client.hasMediaStreamSource();
    369369}
    370370
Note: See TracChangeset for help on using the changeset viewer.