Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 0773c9839a9a2baece6bcd80248bdfe90aefca84 https://github.com/WebKit/WebKit/commit/0773c9839a9a2baece6bcd80248bdfe90aefca84 Author: Jer Noble <jer.no...@apple.com> Date: 2023-01-23 (Mon, 23 Jan 2023)
Changed paths: M LayoutTests/media/media-source/media-source-loader.js A LayoutTests/media/media-source/media-source-seek-into-unbuffered-expected.txt A LayoutTests/media/media-source/media-source-seek-into-unbuffered.html M Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h M Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm Log Message: ----------- defau[Cocoa] Netflix sometimes fails to start playback https://bugs.webkit.org/show_bug.cgi?id=250844 rdar://102426333 Reviewed by Eric Carlson. Before moving MediaSource into the GPU process, a seek command would result in a lot of synchronous calls between the HTMLMediaElement, MediaSource, and MediaPlayerPrivate. Now that those classes exist on the far side of an XPC boundary from one another, those calls have become async. One problem is that the seek command will result in asking the AVSampleBufferRenderSynchronizer's timebase to seek, and the notification of that seek's completion will occur _before_ the command from the WebContent process to wait for seek completion. So seeking outside a buffered range will appear to succeed when it should fail (until data for that location is appended). Secondly, the second time this happens, the wait for seek completion command is ignored because the m_seeking flag has already been cleared by the time this message is received. Because we know that the we will always be issued a command to wait for seek completion after a command to issue a seek, just call waitForSeekCompleted() from within the seekInternal() method. Secondly, remove the requirement for m_seeking to be set. In LayoutTests/media/media-source/media-source-loader.js, update the MediaSourceLoaded class to use and return promises. * LayoutTests/media/media-source/media-source-loader.js: (MediaSourceLoader): (MediaSourceLoader.prototype.async if): (MediaSourceLoader.prototype.load): (MediaSourceLoader.prototype.async try): (MediaSourceLoader.prototype.loadManifest): (MediaSourceLoader.prototype.loadMediaData): (MediaSourceLoader.prototype.loadManifestSucceeded): Deleted. (MediaSourceLoader.prototype.loadManifestFailed): Deleted. (MediaSourceLoader.prototype.loadMediaDataSucceeded): Deleted. (MediaSourceLoader.prototype.loadMediaDataFailed): Deleted. * LayoutTests/media/media-source/media-source-seek-into-unbuffered-expected.txt: Added. * LayoutTests/media/media-source/media-source-seek-into-unbuffered.html: Added. * Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal): (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitForSeekCompleted): Canonical link: https://commits.webkit.org/259219@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes