[PiP] Window closes when PiP window is paused on Hulu. |
|||||
Issue descriptionI'm seeing this behavior: 1. Navigate to video. 2. Launch PiP. (play the video -- can be playing before launching) 3. Pause video in PiP window. 4. Wait ~5 seconds. PiP window closes without user gesture and video begins playback in the tab. This does NOT repro when playback is paused in the tab. Repros on: Hulu (movie or television episode)
,
Jul 3
Specific repro: 1. Launch browser. 2. Navigate to hulu.com 3. Open Lord of the Rings movie. 4. Wait through ads. 5. Right click to enter PiP. 6. Press "Pause" on the PiP window. 7. Observe video is paused. Wait a few seconds and notice PiP window closes automatically. about:media-internals logs: { "11:0": { "id": "11:0", "properties": { "render_id": 11, "player_id": 0, "origin_url": "https://new.hulu.com/", "frame_url": "https://new.hulu.com/watch/1ac0b42c-6f5b-4d7f-8376-863e0d58efa3", "frame_title": "Stream TV and Movies Live and On Demand | Hulu", "url": "blob:https://new.hulu.com/546a2b00-6ee8-4ceb-81da-02fd3641a1e6", "info": "Selected DecryptingVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? false encryption scheme: CENC rotation: 0°", "pipeline_state": "kStopped", "has_cdm": true, "found_audio_stream": true, "audio_codec_name": "aac", "found_video_stream": true, "video_codec_name": "h264", "audio_dds": true, "audio_decoder": "FFmpegAudioDecoder", "debug": "Video rendering in low delay mode.", "video_dds": false, "video_decoder": "DecryptingVideoDecoder", "seek_target": 8776, "audio_buffering_state": "BUFFERING_HAVE_ENOUGH", "height": 720, "width": 1280, "video_buffering_state": "BUFFERING_HAVE_ENOUGH", "for_suspended_start": false, "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH", "duration": 10701.983, "event": "WEBMEDIAPLAYER_DESTROYED" }, "allEvents": [ { "time": 0, "key": "origin_url", "value": "https://new.hulu.com/" }, { "time": 0.019999980926513672, "key": "frame_url", "value": "https://new.hulu.com/watch/1ac0b42c-6f5b-4d7f-8376-863e0d58efa3" }, { "time": 0.023999929428100586, "key": "frame_title", "value": "Stream TV and Movies Live and On Demand | Hulu" }, { "time": 0.26899993419647217, "key": "url", "value": "blob:https://new.hulu.com/546a2b00-6ee8-4ceb-81da-02fd3641a1e6" }, { "time": 0.35099995136260986, "key": "info", "value": "ChunkDemuxer: buffering by DTS" }, { "time": 5.014999985694885, "key": "pipeline_state", "value": "kStarting" }, { "time": 43.14099991321564, "key": "has_cdm", "value": true }, { "time": 243.99000000953674, "key": "found_audio_stream", "value": true }, { "time": 243.99399995803833, "key": "audio_codec_name", "value": "aac" }, { "time": 534.3399999141693, "key": "found_video_stream", "value": true }, { "time": 534.3479999303818, "key": "video_codec_name", "value": "h264" }, { "time": 541.6790000200272, "key": "audio_dds", "value": true }, { "time": 541.6849999427795, "key": "audio_decoder", "value": "FFmpegAudioDecoder" }, { "time": 541.7079999446869, "key": "info", "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 2 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 2 bytes_per_frame: 4 seek_preroll: 0ms codec_delay: 0 has extra data? false encryption scheme: Unencrypted discard decoder delay? false" }, { "time": 542.5, "key": "debug", "value": "Video rendering in low delay mode." }, { "time": 551.6899999380112, "key": "video_dds", "value": false }, { "time": 551.694000005722, "key": "video_decoder", "value": "DecryptingVideoDecoder" }, { "time": 551.7339999675751, "key": "info", "value": "Selected DecryptingVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? false encryption scheme: CENC rotation: 0°" }, { "time": 551.7669999599457, "key": "pipeline_state", "value": "kPlaying" }, { "time": 583.805999994278, "key": "seek_target", "value": 8776 }, { "time": 583.8880000114441, "key": "pipeline_state", "value": "kSeeking" }, { "time": 584.0210000276566, "key": "pipeline_state", "value": "kPlaying" }, { "time": 674.5410000085831, "key": "audio_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 938.8650000095367, "key": "height", "value": 720 }, { "time": 938.8650000095367, "key": "width", "value": 1280 }, { "time": 939.2179999351501, "key": "video_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 939.2659999132156, "key": "for_suspended_start", "value": false }, { "time": 939.2659999132156, "key": "pipeline_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 93.72500002384186, "key": "duration", "value": 10701.983 }, { "time": 15946.254999995232, "key": "pipeline_state", "value": "kSuspending" }, { "time": 15946.705999970436, "key": "pipeline_state", "value": "kSuspended" }, { "time": 32069.829999923706, "key": "info", "value": "Effective playback rate changed from 0 to 1" }, { "time": 32069.9659999609, "key": "event", "value": "PLAY" }, { "time": 32070.037999987602, "key": "pipeline_state", "value": "kResuming" }, { "time": 32073.31499993801, "key": "audio_dds", "value": true }, { "time": 32073.322000026703, "key": "audio_decoder", "value": "FFmpegAudioDecoder" }, { "time": 32073.34899997711, "key": "info", "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 2 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 2 bytes_per_frame: 4 seek_preroll: 0ms codec_delay: 0 has extra data? false encryption scheme: Unencrypted discard decoder delay? false" }, { "time": 32073.416000008583, "key": "debug", "value": "Video rendering in low delay mode." }, { "time": 32080.5909999609, "key": "video_dds", "value": false }, { "time": 32080.59599995613, "key": "video_decoder", "value": "DecryptingVideoDecoder" }, { "time": 32080.62000000477, "key": "info", "value": "Selected DecryptingVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? false encryption scheme: CENC rotation: 0°" }, { "time": 32080.65999996662, "key": "pipeline_state", "value": "kPlaying" }, { "time": 32087.740000009537, "key": "audio_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 32310.230999946594, "key": "height", "value": 720 }, { "time": 32310.230999946594, "key": "width", "value": 1280 }, { "time": 32310.74500000477, "key": "video_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 32310.850999951363, "key": "for_suspended_start", "value": false }, { "time": 32310.850999951363, "key": "pipeline_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 33631.952999949455, "key": "video_buffering_state", "value": "BUFFERING_HAVE_NOTHING" }, { "time": 33632.07299995422, "key": "video_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 35325.19299995899, "key": "event", "value": "PAUSE" }, { "time": 45421.385999917984, "key": "pipeline_state", "value": "kStopping" }, { "time": 45422.453999996185, "key": "pipeline_state", "value": "kStopped" }, { "time": 45423.61599993706, "key": "event", "value": "WEBMEDIAPLAYER_DESTROYED" } ], "lastRendered": 0, "firstTimestamp_": 1050968585.919, "destructed": true }, "11:4": { "id": "11:4", "properties": { "render_id": 11, "player_id": 4, "origin_url": "https://new.hulu.com/", "frame_url": "https://new.hulu.com/watch/1ac0b42c-6f5b-4d7f-8376-863e0d58efa3", "frame_title": "Stream TV and Movies Live and On Demand | Hulu", "url": "https://ads-v-darwin.hulustream.com/published/2018/5/7/8/SNOGNO302016RH_AdsTranscode_16x9_13489821_67126100_H264_1000.mp4", "total_bytes": 3762115, "streaming": false, "single_origin": true, "passed_cors_access_check": false, "range_header_supported": true, "pipeline_state": "kStopped", "info": "Effective playback rate changed from 0 to 1", "audio_channels_count": 2, "audio_codec_name": "aac", "audio_sample_format": "Float 32-bit planar", "audio_samples_per_second": 48000, "bitrate": 997710, "found_audio_stream": true, "found_video_stream": true, "height": 396, "max_duration": 30.166, "start_time": 0, "time_base": "1/24000", "video_codec_name": "h264", "video_format": "PIXEL_FORMAT_I420", "video_is_encrypted": false, "width": 704, "audio_dds": false, "audio_decoder": "FFmpegAudioDecoder", "video_dds": false, "video_decoder": "FFmpegVideoDecoder", "audio_buffering_state": "BUFFERING_HAVE_ENOUGH", "video_buffering_state": "BUFFERING_HAVE_ENOUGH", "for_suspended_start": false, "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH", "event": "WEBMEDIAPLAYER_DESTROYED", "duration": 30.166, "debug": "FFmpegDemuxer: av_read_frame(): End of file" }, "allEvents": [ { "time": 0, "key": "origin_url", "value": "https://new.hulu.com/" }, { "time": 0.01100003719329834, "key": "frame_url", "value": "https://new.hulu.com/watch/1ac0b42c-6f5b-4d7f-8376-863e0d58efa3" }, { "time": 0.0140000581741333, "key": "frame_title", "value": "Stream TV and Movies Live and On Demand | Hulu" }, { "time": 0.1260000467300415, "key": "url", "value": "https://ads-v-darwin.hulustream.com/published/2018/5/7/8/SNOGNO302016RH_AdsTranscode_16x9_13489821_67126100_H264_1000.mp4" }, { "time": 267.89800000190735, "key": "total_bytes", "value": 3762115 }, { "time": 267.90700006484985, "key": "streaming", "value": false }, { "time": 267.90900003910065, "key": "single_origin", "value": true }, { "time": 267.90900003910065, "key": "passed_cors_access_check", "value": false }, { "time": 267.9099999666214, "key": "range_header_supported", "value": true }, { "time": 268.01900005340576, "key": "pipeline_state", "value": "kStarting" }, { "time": 424.0789999961853, "key": "info", "value": "FFmpegDemuxer: created video stream, config codec: h264 format: 1 profile: h264 high coded size: [704,396] visible rect: [0,0,704,396] natural size: [704,396] has extra data? true encryption scheme: Unencrypted rotation: 0°" }, { "time": 424.18800008296967, "key": "info", "value": "FFmpegDemuxer: created audio stream, config codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encryption scheme: Unencrypted discard decoder delay? true" }, { "time": 424.2829999923706, "key": "audio_channels_count", "value": 2 }, { "time": 424.2829999923706, "key": "audio_codec_name", "value": "aac" }, { "time": 424.2829999923706, "key": "audio_sample_format", "value": "Float 32-bit planar" }, { "time": 424.2829999923706, "key": "audio_samples_per_second", "value": 48000 }, { "time": 424.2829999923706, "key": "bitrate", "value": 997710 }, { "time": 424.2829999923706, "key": "found_audio_stream", "value": true }, { "time": 424.2829999923706, "key": "found_video_stream", "value": true }, { "time": 424.2829999923706, "key": "height", "value": 396 }, { "time": 424.2829999923706, "key": "max_duration", "value": 30.166 }, { "time": 424.2829999923706, "key": "start_time", "value": 0 }, { "time": 424.2829999923706, "key": "time_base", "value": "1/24000" }, { "time": 424.2829999923706, "key": "video_codec_name", "value": "h264" }, { "time": 424.2829999923706, "key": "video_format", "value": "PIXEL_FORMAT_I420" }, { "time": 424.2829999923706, "key": "video_is_encrypted", "value": false }, { "time": 424.2829999923706, "key": "width", "value": 704 }, { "time": 425.01700007915497, "key": "audio_dds", "value": false }, { "time": 425.0199999809265, "key": "audio_decoder", "value": "FFmpegAudioDecoder" }, { "time": 425.0310000181198, "key": "info", "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encryption scheme: Unencrypted discard decoder delay? true" }, { "time": 425.6840000152588, "key": "video_dds", "value": false }, { "time": 425.70300006866455, "key": "video_decoder", "value": "FFmpegVideoDecoder" }, { "time": 425.71600008010864, "key": "info", "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [704,396] visible rect: [0,0,704,396] natural size: [704,396] has extra data? true encryption scheme: Unencrypted rotation: 0°" }, { "time": 425.86699998378754, "key": "pipeline_state", "value": "kPlaying" }, { "time": 435.80400002002716, "key": "height", "value": 396 }, { "time": 435.80400002002716, "key": "width", "value": 704 }, { "time": 440.9839999675751, "key": "audio_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 441.14600002765656, "key": "video_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 441.1980000734329, "key": "for_suspended_start", "value": false }, { "time": 441.1980000734329, "key": "pipeline_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 441.335000038147, "key": "info", "value": "Effective playback rate changed from 0 to 1" }, { "time": 441.4559999704361, "key": "event", "value": "PLAY" }, { "time": 424.25300002098083, "key": "duration", "value": 30.166 }, { "time": 28011.674000024796, "key": "debug", "value": "FFmpegDemuxer: av_read_frame(): End of file" }, { "time": 30711.25, "key": "event", "value": "ENDED" }, { "time": 30711.478000044823, "key": "event", "value": "PAUSE" }, { "time": 31408.175000071526, "key": "pipeline_state", "value": "kStopping" }, { "time": 31410.91100001335, "key": "pipeline_state", "value": "kStopped" }, { "time": 31411.78299999237, "key": "event", "value": "WEBMEDIAPLAYER_DESTROYED" } ], "lastRendered": 0, "firstTimestamp_": 1050969089.576, "destructed": true }, "11:5": { "id": "11:5", "properties": { "render_id": 11, "player_id": 5, "origin_url": "https://new.hulu.com/", "frame_url": "https://new.hulu.com/watch/1ac0b42c-6f5b-4d7f-8376-863e0d58efa3", "frame_title": "Stream TV and Movies Live and On Demand | Hulu", "url": "blob:https://new.hulu.com/dc6a0130-3a57-42f6-a086-608dba2a83a0", "info": "Effective playback rate changed from 0 to 1", "pipeline_state": "kPlaying", "has_cdm": true, "found_audio_stream": true, "audio_codec_name": "aac", "found_video_stream": true, "video_codec_name": "h264", "audio_dds": true, "audio_decoder": "FFmpegAudioDecoder", "debug": "Video rendering in low delay mode.", "seek_target": 8778.925165, "video_dds": false, "video_decoder": "DecryptingVideoDecoder", "audio_buffering_state": "BUFFERING_HAVE_ENOUGH", "height": 720, "width": 1280, "video_buffering_state": "BUFFERING_HAVE_ENOUGH", "for_suspended_start": false, "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH", "event": "PLAY", "duration": 10701.983 }, "allEvents": [ { "time": 0, "key": "origin_url", "value": "https://new.hulu.com/" }, { "time": 0.01700007915496826, "key": "frame_url", "value": "https://new.hulu.com/watch/1ac0b42c-6f5b-4d7f-8376-863e0d58efa3" }, { "time": 0.02200007438659668, "key": "frame_title", "value": "Stream TV and Movies Live and On Demand | Hulu" }, { "time": 0.15999996662139893, "key": "url", "value": "blob:https://new.hulu.com/dc6a0130-3a57-42f6-a086-608dba2a83a0" }, { "time": 0.24300003051757812, "key": "info", "value": "ChunkDemuxer: buffering by DTS" }, { "time": 0.31000006198883057, "key": "pipeline_state", "value": "kStarting" }, { "time": 10.97000002861023, "key": "has_cdm", "value": true }, { "time": 30.128000020980835, "key": "found_audio_stream", "value": true }, { "time": 30.133000016212463, "key": "audio_codec_name", "value": "aac" }, { "time": 51.70800006389618, "key": "found_video_stream", "value": true }, { "time": 51.71300005912781, "key": "video_codec_name", "value": "h264" }, { "time": 54.236000061035156, "key": "audio_dds", "value": true }, { "time": 54.24000000953674, "key": "audio_decoder", "value": "FFmpegAudioDecoder" }, { "time": 54.259000062942505, "key": "info", "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 2 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 2 bytes_per_frame: 4 seek_preroll: 0ms codec_delay: 0 has extra data? false encryption scheme: Unencrypted discard decoder delay? false" }, { "time": 54.29700005054474, "key": "debug", "value": "Video rendering in low delay mode." }, { "time": 87.00100004673004, "key": "seek_target", "value": 8778.925165 }, { "time": 119.23500001430511, "key": "video_dds", "value": false }, { "time": 119.28100001811981, "key": "video_decoder", "value": "DecryptingVideoDecoder" }, { "time": 119.31000006198883, "key": "info", "value": "Selected DecryptingVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? false encryption scheme: CENC rotation: 0°" }, { "time": 119.34600007534027, "key": "pipeline_state", "value": "kPlaying" }, { "time": 119.45800006389618, "key": "pipeline_state", "value": "kSeeking" }, { "time": 119.58800005912781, "key": "pipeline_state", "value": "kPlaying" }, { "time": 132.16600000858307, "key": "audio_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 171.1119999885559, "key": "height", "value": 720 }, { "time": 171.1119999885559, "key": "width", "value": 1280 }, { "time": 171.56500005722046, "key": "video_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 171.62199997901917, "key": "for_suspended_start", "value": false }, { "time": 171.62199997901917, "key": "pipeline_buffering_state", "value": "BUFFERING_HAVE_ENOUGH" }, { "time": 171.75400006771088, "key": "info", "value": "Effective playback rate changed from 0 to 1" }, { "time": 171.8730000257492, "key": "event", "value": "PLAY" }, { "time": 17.703999996185303, "key": "duration", "value": 10701.983 } ], "lastRendered": 0, "firstTimestamp_": 1051014040.576 } }
,
Jul 3
It looks like the HTMLMediaElement is reset -- stack traces below: PIP CLOSURE: #1 0x7f5ee4882452 content::PictureInPictureWindowControllerImpl::Close() #2 0x56367fd7c946 PictureInPictureWindowManager::ExitPictureInPicture() #3 0x7f5ee4855364 content::MediaWebContentsObserver::OnPictureInPictureModeEnded() #4 0x7f5ee485524f _ZN3IPC8MessageTI59MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded_MetaNSt3__15tupleIJiiEEEvE8DispatchIN7content24MediaWebContentsObserverES8_NS7_15RenderFrameHostEMS8_FvPS9_iiEEEbPKNS_7MessageEPT_PT0_PT1_T2_ #5 0x7f5ee4854258 content::MediaWebContentsObserver::OnMessageReceived() #6 0x7f5ee49e68cd content::WebContentsImpl::OnMessageReceived() #7 0x7f5ee4771b4d content::RenderFrameHostImpl::OnMessageReceived() #8 0x7f5ee64c0f2b IPC::ChannelProxy::Context::OnDispatchMessage() #9 0x7f5ee62d6469 base::debug::TaskAnnotator::RunTask() #10 0x7f5ee62f7bd7 base::MessageLoop::RunTask() #11 0x7f5ee62f81b7 base::MessageLoop::DoWork() #12 0x7f5ee62f99af base::(anonymous namespace)::WorkSourceDispatch() #13 0x7f5edc40ff07 g_main_context_dispatch #14 0x7f5edc410138 <unknown> #15 0x7f5edc4101cc g_main_context_iteration #16 0x7f5ee62f97f2 base::MessagePumpGlib::Run() #17 0x7f5ee631dc55 base::RunLoop::Run() #18 0x56367ef60e8b ChromeBrowserMainParts::MainMessageLoopRun() #19 0x7f5ee4640657 content::BrowserMainLoop::RunMainMessageLoopParts() #20 0x7f5ee46431f2 content::BrowserMainRunnerImpl::Run() #21 0x7f5ee463cd9b content::BrowserMain() #22 0x7f5ee4e8c0d1 content::ContentMainRunnerImpl::Run() #23 0x7f5ee65e065a service_manager::Main() #24 0x7f5ee4e8a154 content::ContentMain() #25 0x56367eb261b3 ChromeMain #26 0x7f5edab012b1 __libc_start_main #27 0x56367eb2602a _start Initiator (other side of) IPC call: #1 0x7f4e86b020c0 media::WebMediaPlayerImpl::~WebMediaPlayerImpl() #2 0x7f4e86b0287e media::WebMediaPlayerImpl::~WebMediaPlayerImpl() #3 0x7f4e8c31b963 blink::HTMLMediaElement::ResetMediaPlayerAndMediaSource() #4 0x7f4e8c31a254 blink::HTMLMediaElement::InvokeLoadAlgorithm() #5 0x7f4e8cffd561 v8::internal::FunctionCallbackArguments::Call() #6 0x7f4e8cffca56 v8::internal::(anonymous namespace)::HandleApiCallHelper<>() #7 0x7f4e8cffc166 v8::internal::Builtin_Impl_HandleApiCall() #8 0x7f4e8d78232e <unknown>
,
Jul 3
The media player* is reset, so PiP is closed when WMPI is torn down even though there isn't anything noticeable on the tab page.
,
Jul 4
Do you see the media player destroyed as well when simply calling "document.querySelector('video').pause();" in DevTools JavaScript console? No PiP involved.
,
Jul 6
Yes, I do see that. The movie then resumes to play after the media player is destroyed.
,
Jul 10
,
Jul 27
fbeaufort@, would it be possible for you or Anshal to reach out to Hulu?
,
Sep 10
Aanchal reached out to Hulu.
,
Nov 22
Hulu folks are now aware of this issue and will fix it. |
|||||
►
Sign in to add a comment |
|||||
Comment 1 by fbeaufort@chromium.org
, Jul 3