Skip to content

Conversation

@asurdej-comcast
Copy link

@asurdej-comcast asurdej-comcast commented Oct 1, 2025

Playback state change notification syncs Media Client (HTMLMediaElement) state with current player state:
commit fb0730e:

The platform backend may change state, for example as a result
of an external plugin controlling the backend, so we need to
react to this situation by syncing up the WebCore state with the
platform backend.

We call playInternal()/pauseInternal() depending on the backend
state, to trigger the corresponding DOM events to match the state.

Sending that notification on EOS condition may effectively pause the pipeline without user request becasue the GST player reports it is paused m_isEndReached is set.

PS. We already had a bunch of problems with that playback state change notification and the way of how HTMLMediaElement handles mediaPlayerPlaybackStateChanged(). In 2.46 that part was added because of sleep disable while it was completely missing in 2.38. Maybe we should handle sleep disable separately and skip that mediaPlayerPlaybackStateChanged() at all
46455f0

Build-Tests Layout-Tests
✅ 🛠 wpe-246-amd64-build ✅ 🧪 wpe-246-amd64-layout
✅ 🛠 wpe-246-arm32-build ✅ 🧪 wpe-246-arm32-layout

Playback state change notification syncs Media Client (HTMLMediaElement)
state with current player state:
    commit fb0730e:

    The platform backend may change state, for example as a result
    of an external plugin controlling the backend, so we need to
    react to this situation by syncing up the WebCore state with the
    platform backend.

    We call playInternal()/pauseInternal() depending on the backend
    state, to trigger the corresponding DOM events to match the state.

Sending that notification on EOS condition may effectively pause the pipeline
without user request becasue the GST player reports it is paused m_isEndReached is set.
@asurdej-comcast asurdej-comcast requested a review from philn as a code owner October 1, 2025 08:17
@asurdej-comcast
Copy link
Author

asurdej-comcast commented Oct 1, 2025

Here is a test case for that https://asurdej-comcast.github.io/tr/tests/RDKTV-38576_mse_seek_at_eos.html

The flow is:

			video.addEventListener('ended', async function () {
				video.pause()

				// Reset timestampOffset - that will reopen MediaSource for appending (even after EOS)
				audioSb.timestampOffset = 1;
				videoSb.timestampOffset = 1;
				await appendData()

				video.currentTime = 1;
				video.play()
				// Mark end of stream to recalculate buffering state and readyState
				// at new position. Seek request may not be fully handled yet at this point.
				// This should make readyState = HAVE_ENOUGH_DATA and allow playback to start truely.
				ms.endOfStream();
			}

With current impl the playback gets stuck in paused state and never restarts

@asurdej-comcast asurdej-comcast changed the title [GST][MSE] Skip playback state update while EOS [2.46][GST][MSE] Skip playback state update while EOS Oct 1, 2025
@asurdej-comcast
Copy link
Author

asurdej-comcast commented Oct 2, 2025

Here is a sequence of events from WebKit perspective that leads to video stall:

  • Ad playback progress and EOS is set on Media Source
  • Upon hitting the end webkit sends ended event and timeupdate
  • The app pauses the video that is reflected in real GST pipeline pause
  • Ready state drops to HaveCurrentData
  • The same MediaSouce and SourceBuffers are reused. Samples replacement happened.
  • The app does seek(20.0) and play() -> WebKit marks seek position and enqueues seek request without affecting media player. Then the play() request is handled but it doesn't put GST pipeline in playing state because of ready state is not sufficient (have meta data at this point)
  • Now GST Media player receives ready state change from MediaSource, for new seek position it already have data to play. That calls updateStates() in MSE media player which results in changing pipeline state to PLAYING and send playbackStateChanged() to HTMLMediaElement()
  • Media Player has m_isEndReached flag set still and reports that the player is paused - ::paused() returns true -> HTMLMediaElement() see that playback is paused while it was playing before so it calls pauseInternal() that reverts the last play() request and marks that video should be paused. The pipeline is still in PLAYING
  • Now we have a seek task executed on HTMLMediaElement side that triggers a seek in MediaPlayer -> m_isEndReached flag is reset. MediaPlayer looses its state PAUSED-> PAUSED transition
  • HTMLMediaElement::updateStates() is called (not sure why, probably becasue of seek). HTMLMediaElement thinks that MediaPlayer should be paused while it is playing so it calls MediaPlayer::pause() again
  • GST pipeline doesn't get paused really bacause it is in async state transition and it will still report to HTMLMediaElement that it is playing (m_isPipelinePlaying is set still). That makes HTMLMediaElement to enter playing state again - from playbackStateChanged notification - but that play() is never passed to the MediaPlayer as it reports it is playing still.
  • Seek is completed and and MediaPlayer notices the pause request -> the playback gets paused and HTMLMeidaElement is notified about it -> it accepts the pause and both HTMLMediaElement and MediaPlayer are paused

My proposition fixes the bold bullet, While m_isEndReached is set, it doesn't send playbackStateChanged() notification to HTMLMediaElement so it will never accept the paused state and won't force it later on MediaPlayer

@eocanha eocanha requested review from eocanha and removed request for philn October 3, 2025 16:14
@eocanha
Copy link
Member

eocanha commented Oct 3, 2025

I'm having a look at this next Monday Oct 6th.

@eocanha
Copy link
Member

eocanha commented Oct 8, 2025

I'm still trying to understand all the steps, but I wonder (to myself) if, instead of ignoring the m_isEndReached flag as a sort of hacky workaround, there's any way of resetting the flag ahead of time (even before the seek starts to be processed asynchronously), so that it's false already at the right time.

I'm trying to analyze if this is possible, for instance by using willSeekToTarget(), which sets m_pendingSeekTime. I still haven't checked if that call happens soon enough, tho. I'll continue analyzing it.

@eocanha
Copy link
Member

eocanha commented Oct 9, 2025

I'm having a hard time to get your test case to work properly (at least on a Raspberry Pi, wpe-2.46), even after having mirrored it on a local server and added extra logs. First, I needed to increase the timeouts (the data load was slow for some reason). Then, I'm having spureous "can't push buffer because the pad is on EOS" failures in one of the WebKitMediaSrc pads. All this applying only your suggested fix, instead of mine.

I think I only saw it working (green) one time after multiple tries. I'm still debugging what happens.

@asurdej-comcast
Copy link
Author

asurdej-comcast commented Oct 10, 2025

@eocanha Thanks for looking into this.
Here are my original logs from Disney+ app, maybe that would help to understand the flow:
eos_restart.txt

Disney plus uses the same MediaSource object and the same SourceBuffers to play both main content and advertisments. That is a bit tricky as MediaSource isn't accepting more data after endOfStream() so it has to be reopened somehow, I use timestampOffset of SourceBuffer that reopens MediaSouce.
Regarding the test case, there are 5 retries of the same, for me the playback gets paused on the very first seek/replay.

Resetting m_isEndReached, e.g. in MediaPlayerPrivate::play() would help but the GST is still at eos position so there are no more data to play so it will be reported by the sinks again.

Another "problem" could be the ready state, that inside MediaSource it is calculated based on the new position (current position is taken from m_pendingSeekTime set from willSeekToTarget()) and propagated to player while the player is still at the old position

@eocanha
Copy link
Member

eocanha commented Oct 26, 2025

I think I've solved the problem using a different approach that I would say that makes more sense:

On the WPE side, I've cleared the m_isEndReached flag in MediaPlayerPrivateGStreamerMSE when a seek is done. That would give the player permission to push buffers again.

But still, when I did that, WebKitMediaSourceGStreamer would error out because the pad was on EOS. I debugged that on the GStreamer 1.18 side and realized that GstDecodebin3 was doing non-obvious trickery with the GstMultiqueue srcpad EOS events. It would accumulate (memorize) EOS emitted by multiqueue until all the streams have emitted EOS. Then it would forward all those EOS at once to all the pads. This caused a puzzling behaviour where video buffers would be pushed downstream normally and, at some point, without apparent reason (when the audio pad received its EOS and triggered a chain reaction also on the video pad), start to be rejected because the pad was on EOS. I solved this by resetting the memorized slot->is_drained flag in uridecodebin when a flush-stop is received on the multiqueue src pad (because after a flush, the previous EOS status doesn't apply anymore). This solved the problem and now I have here a combination of patches that makes your test case pass.

I've cleaned them up and submitted them (as part of experimental branches) as WebPlatformForEmbedded/buildroot@ac1d6ff and 15b9b55.

The GStreamer code has changed in 1.20, but I'm still going to try to see if the bug is reproducible upstream and it makes sense to upstream the WPE part of the patch at least, and/or debug the behaviour on latest GStreamer.

eocanha added a commit to WebPlatformForEmbedded/buildroot that referenced this pull request Oct 26, 2025
…flush-stop

Without this change, a video would be played till the end (so the video
stream would EOS and the slot be amarked as such), then seeked back (but
still be EOS), and when the audio pad gets EOS (because of its own
circumstances that would trigger a chain reaction that would forward all
the accumulated EOS to all the multiqueue src pads, causing all the video
buffers to fail being pushed from that moment on.

This change resets the flag on flush, preventing the issue. The slots won't
still be considered drained after the flush and buffer pushing won't be
interrupted.

See: WebPlatformForEmbedded/WPEWebKit#1568 (comment)
eocanha added a commit that referenced this pull request Oct 26, 2025
When a video has reached End Of Stream and a (backwards) seek is done,
the media player won't ever complete the seek because the EOS condition
is still in place and no buffers are ever going to be pushed. A
successful seek completion would reset the EOS condition, but that won't
happen since the seek won't even start.

This change resets m_isEndReached as soon as possible (on
willSeekToTarget()), so the seek can happen.

See: #1568 (comment)
@asurdej-comcast
Copy link
Author

Thanks @eocanha I've tried your Webkit patch alone and it seems to fix the problem, but...

I don't see any gst errors connected with pushing data buffers after EOS. I'm aware that eos handling in gst is not trivial, we had some problems connected to that in the past. Not sure how about this particular problem, if we have any custom patch on top of GST or just gst version is different, but I dont see that error on our devices. Webkit just pushes data after seek/flush without any issue.

In my case the WebKit patch alone does the job but I have some concerns. So it resets EOS flag in MediaPlayer while requesting a seek after initial end of stream (willSeekToTarget). Next we have a play request that will put the pipeline in playing state at the old position (seek hasn't been applied yet). We don't have any data to process at this point because the player is still at the end. So gstreamer pipeline will report EOS/didEnd() again, at the very first convenience, setting m_isEosReached=true again. The patch works because mediaPlayerPlaybackStateChanged() is called before that happens so HTMLMediaElement sees that the MediaPlayer is playing (m_isEndReached is false).
Here are some logs that covers state change PAUSED->Playing, mediaPlayerPlaybackStateChanged(), didEnd() and final seek

Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514169795    38  0x1e37d20 INFO            webkitcommon GStreamerCommon.cpp:892:operator():<MSE-media-player-0> State changed (old: PAUSED, new: PLAYING, pending: VOID_PENDING)
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514231170    38  0x1e37d20 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:2049:handleMessage:<MSE-media-player-0> Message state-changed received from element MSE-media-player-0
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514261379    38  0x1e37d20 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:2197:handleMessage:<MSE-media-player-0> Changed state from PAUSED to PLAYING
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514296129    38  0x1e37d20 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1690:playbin3SendSelectStreamsIfAppropriate:<MSE-media-player-0> Checking if to send SELECT_STREAMS, m_waitingForStreamsSelectedEvent = true, haveDifferentStreamIds = false, m_currentState = NULL... shouldSendSelectStreams = false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514324588    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<MSE-media-player-0> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514716718    38  0x1e37d20 DEBUG              webkitmse MediaPlayerPrivateGStreamerMSE.cpp:469:updateStates:<MSE-media-player-0> shouldBePlaying = true, m_isPipelinePlaying = true, is seeking false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514744260    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<MSE-media-player-0> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514823178    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<audiosink> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514853470    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<abin> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514893803    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<vbin> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514926012    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<playsink> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514954138    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<MSE-media-player-0> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.514981596    38  0x1e37d20 DEBUG              webkitmse MediaPlayerPrivateGStreamerMSE.cpp:211:checkPlayingConsistency:<MSE-media-player-0> Notifying MediaPlayer of pipeline state change to PLAYING
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515012013    38  0x1e37d20 DEBUG              webkitmse MediaPlayerPrivateGStreamerMSE.cpp:220:setShouldDisableSleep:<MSE-media-player-0> Enabling display sleep.
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515036305    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<MSE-media-player-0> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515063639    38  0x1e37d20 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:596:paused:<MSE-media-player-0> paused false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515175015    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::mediaPlayerPlaybackStateChanged(A1B048A4) playerPaused: false, shouldBePaused: false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515240308    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::mediaPlayerPlaybackStateChanged(A1B048A4) playerPaused: false, shouldBePaused: false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515406101    38  0x1e37d20 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:2049:handleMessage:<MSE-media-player-0> Message eos received from element MSE-media-player-0
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515434935    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1575:gstreamerPositionFromSinks:<MSE-media-player-0> Querying position to audio sink (if any).
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515505644    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1582:gstreamerPositionFromSinks:<MSE-media-player-0> Audio position 0:00:05.039333333
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515536311    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1585:gstreamerPositionFromSinks:<MSE-media-player-0> Querying position to video sink (if any).
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515576687    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1590:gstreamerPositionFromSinks:<MSE-media-player-0> Video position 0:00:04.966666000
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515609521    38  0x1e37d20 INFO        GST_ELEMENT_PADS gstelement.c:1009:gst_element_get_static_pad: found pad WesterosVideoSink:sink
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515701772    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:801:currentTime:<MSE-media-player-0> seeking: false, seekTarget: [{"value":4}{"value":0,"numerator":0,"denominator":1,"flags":1}{"value":0,"numerator":0,"denominator":1,"flags":1}]
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515740564    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:playbackPosition:<MSE-media-player-0> isEndReached: false, seeking: false, seekTime: {4}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515767231    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<MSE-media-player-0> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515793398    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1575:gstreamerPositionFromSinks:<MSE-media-player-0> Querying position to audio sink (if any).
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515845190    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1582:gstreamerPositionFromSinks:<MSE-media-player-0> Audio position 0:00:05.039333333
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515873274    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1585:gstreamerPositionFromSinks:<MSE-media-player-0> Querying position to video sink (if any).
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515911274    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1590:gstreamerPositionFromSinks:<MSE-media-player-0> Video position 0:00:04.966666000
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.515945941    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1621:playbackPosition:<MSE-media-player-0> Position 0:00:05.039333333, canFallBackToLastFinishedSeekPosition: false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516001650    38  0x1e37d20 INFO       webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:3139:didEnd:<MSE-media-player-0> Playback ended, currentMediaTime = {5039333333/1000000000 = 5.039333333}, duration = {5010666/1000000 = 5.010666}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516084276    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:801:currentTime:<MSE-media-player-0> seeking: false, seekTarget: [{"value":4}{"value":0,"numerator":0,"denominator":1,"flags":1}{"value":0,"numerator":0,"denominator":1,"flags":1}]
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516122569    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:playbackPosition:<MSE-media-player-0> isEndReached: true, seeking: false, seekTime: {4}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516158111    38  0x1e37d20 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:3164:didEnd: Position adjusted: {5010666/1000000 = 5.010666}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516185819    38  0x1e37d20 INFO              GST_STATES gstbin.c:2115:gst_bin_get_state_func:<MSE-media-player-0> getting state
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516218778    38  0x1e37d20 DEBUG              webkitmse MediaPlayerPrivateGStreamerMSE.cpp:469:updateStates:<MSE-media-player-0> shouldBePlaying = true, m_isPipelinePlaying = true, is seeking false
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516245362    38  0x1e37d20 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1501:timeChanged:<MSE-media-player-0> Emitting timeChanged notification (seekCompleted:0)
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::mediaPlayerTimeChanged(A1B048A4)
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516661242    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::mediaPlayerTimeChanged(A1B048A4)
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516798785    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516872994    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.516935370    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::currentMediaTime(A1B048A4) seeking, returning{"value":1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [HtmlApp-0]:0 HTMLMediaElement::seek(A1B048A4)
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [HtmlApp-0]:0 HTMLMediaElement::seekWithTolerance(A1B048A4) SeekTarget = [{"value":1}{"value":0,"numerator":0,"denominator":1,"flags":1}{"value":0,"numerator":0,"denominator":1,"flags":1}]
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [HtmlApp-0]:0 HTMLMediaElement::seekWithTolerance(A1B048A4) enqueuing seek from
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: [WPEWebKit:Media:-] HTMLMediaElement::seekTask(A1B048A4)
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.517277208    38  0x1e37d20 INFO       webkitmediaplayer GStreamerCommon.cpp:597:didLogMessage: HTMLMediaElement::seekTask(A1B048A4)
Oct 27 11:37:35 hisense-v2 audio_server[5761]: libdolbyms12/I (23779): ms12_reset_pts_gap
Oct 27 11:37:35 hisense-v2 audio_server[5761]: libdolbyms12/I (11942): binary_file_reader_node_activate flush avail_samples =0
Oct 27 11:37:35 hisense-v2 audio_server[5761]: libdolbyms12/I (11942): udc_node_activate end =1 b_flusing=1 is_flush=1
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.517711338    38  0x1e37d20 DEBUG              webkitmse MediaPlayerPrivateGStreamerMSE.cpp:251:seekToTarget:<MSE-media-player-0> Requested seek to {1}
Oct 27 11:37:35 hisense-v2 HtmlApp-0[20761]: 0:02:05.517912632    38  0x1e37d20 TRACE      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:801:currentTime:<MSE-media-player-0> seeking: false, seekTarget: [{"value":4}{"value":0,"numerator":0,"denominator":1,"flags":1}{"value":0,"numerator":0,"denominator":1,"flags":1}]

Otherwise it looks good and the original problem is gone

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Development

Successfully merging this pull request may close these issues.

3 participants