Bug 280069

Summary: [WebVTT][GStreamer] WPT webvtt/api/VTTRegion/non-visible-cue-with-region.html isn't actually passing
Product: WebKit Reporter: Enrique Ocaña <eocanha>
Component: PlatformAssignee: Nobody <webkit-unassigned>
Status: NEW    
Severity: Normal    
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   

Enrique Ocaña
Reported 2024-09-20 09:15:51 PDT
Test LayoutTests/imported/w3c/web-platform-tests/webvtt/api/VTTRegion/non-visible-cue-with-region.html is currently passing, but just by sheer luck. The test performs an initial seek to 0.8s on a live video, and our current MediaPlayerPrivateGStreamer implementation ignores that kind of seeks[1]. The result is that the webpage and the HTMLMediaElement still thinks that it's seeking, but no seek has happened at all. currentTime is always 0.8s, as if a seek was in place. In the end, playback starts internally (from the begining instead of from 0.8s) and eventually reaches the end of the video (6s) on its own. At that moment, a defined video duration is set (it was infinity before), timeChanged() is called, and that notifies HTMLMediaElement about having traversed the cue end time (so oncueexit is triggered) and having reached the end (so onend is triggered). This is an excerpt of the backtrace of the call that generates oncueexit: WebCore::HTMLMediaElement::updateActiveTextTrackCues(WTF::MediaTime const&) WebCore::HTMLMediaElement::setReadyState(WebCore::MediaPlayerReadyState) WebCore::HTMLMediaElement::mediaPlayerReadyStateChanged() WebCore::MediaPlayer::readyStateChanged() WebCore::MediaPlayerPrivateGStreamer::updateStates() WebCore::MediaPlayerPrivateGStreamer::timeChanged(WTF::MediaTime const&) WebCore::MediaPlayerPrivateGStreamer::didEnd() WebCore::MediaPlayerPrivateGStreamer::handleMessage(_GstMessage*) And this is an excerpt of the backtrace of the call that generates onend: WebCore::HTMLMediaElement::mediaPlayerTimeChanged() WebCore::MediaPlayerPrivateGStreamer::timeChanged(WTF::MediaTime const&) WebCore::MediaPlayerPrivateGStreamer::didEnd() WebCore::MediaPlayerPrivateGStreamer::handleMessage(_GstMessage*) In the current implementation, a lucky management of the ReadyState causes oncueexit to happen before onend, making the test pass, but it's just luck. Bug https://bugs.webkit.org/show_bug.cgi?id=275683 / PR https://github.com/WebKit/WebKit/pull/29998 intend to change the buffering implementation, and this test is the only regression remaining to have the patch ready. My point is that it shouldn't actually be considered a regression, since the test was actually passing by chance. I'm creating this bug to track the debugging of this bug and the proper implementation of seek on live streams (if that's ever possible) in the future. Low priority by now, I guess. [1] https://github.com/WebKit/WebKit/blob/4f4db5aea9b8871ed9daff946b54bf200c84e193/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp#L579
Attachments
Note You need to log in before you can comment on or make changes to this bug.