Closed
Bug 1310548
Opened 8 years ago
Closed 8 years ago
[EME] WPT clearkey-mp4-playback-temporary-multikey-sequential.html fails
Categories
(Core :: Audio/Video: Playback, defect)
Core
Audio/Video: Playback
Tracking
()
RESOLVED
FIXED
mozilla52
Tracking | Status | |
---|---|---|
firefox52 | --- | fixed |
People
(Reporter: cpearce, Assigned: cpearce)
References
(Blocks 1 open bug, )
Details
Attachments
(1 file)
clearkey-mp4-playback-temporary-multikey-sequential.html fails because we're not setting the readyState to HAVE_METADATA while we're waiting for a key.
Assignee | ||
Comment 1•8 years ago
|
||
Assignee | ||
Comment 2•8 years ago
|
||
(In reply to Chris Pearce (:cpearce) from comment #1)
> https://treeherder.mozilla.org/#/jobs?repo=try&revision=3081a28cfeb3
The tests failed in this push because the following happens:
1. We load the stream, hit the TENC box on streams, and fire the "encrypted" event.
2. The MDSM goes into WAIT_FOR_CDM state.
3. Script processes the "encrypted" event, and creates a MediaKeys, attaches it to the HTMLMediaElement.
4. The MDSM wakes up and moves from WAIT_FOR_CDM to DECODING_FIRSTFRAME.
5. Decoder finds it can't decode, starts waiting for key.
6. Script negotiates a license with CDM, keys are marked as usable, and decode starts.
7. MDSM successfully decodes first frame, and calls HTMLMediaElement::FirstFrameLoaded(), which updates the readyState, but thinks we're still waiting for key, so we remain in HAVE_METADATA, and don't fire "loadeddata".
One easy solution here would be to have HTMLMediaElement::FirstFrameLoaded() reset the "waiting for key" state, but the problem there is we could potentially have just hit a frame which we couldn't decode for, and end up overwriting the "waiting for key" state.
So we're better off propagating "waiting for key" a different way.
Assignee | ||
Comment 3•8 years ago
|
||
Comment hidden (mozreview-request) |
Assignee | ||
Comment 5•8 years ago
|
||
Note: this patch makes /encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html pass but /encrypted-media/{clearkey,drm}-mp4-playback-temporary-multikey-sequential-readyState.html fail still until https://github.com/w3c/encrypted-media/issues/338 is resolved in the spec and the WPT are updated.
Comment 6•8 years ago
|
||
mozreview-review |
Comment on attachment 8803142 [details]
Bug 1310548 - Delay firing of 'waitingforkey' until all decoded data has been rendered.
https://reviewboard.mozilla.org/r/87398/#review86410
::: dom/html/HTMLMediaElement.h:1595
(Diff revision 1)
> bool mIsEncrypted;
>
> - // True when the CDM cannot decrypt the current block, and the
> - // waitingforkey event has been fired. Back to false when keys have become
> - // available and we can advance the current playback position.
> + // True when the CDM cannot decrypt the current block due to lacking a key.
> + // Note: the "waitingforkey" event is not dispatched until all decoded data
> + // has been rendered.
> bool mWaitingForKey;
couldn't we have used an enum for this ? like a 3 states value, if NOT_WAITING=0 then WAITING WAITING_FIRED something like that.
all those bool are always a pain to maintain.
Additionally, if mWaitingForKey is false, then mDispatchedWaitingForKey is always false seeing that both are always reset to false simultaneously.
::: dom/html/HTMLMediaElement.cpp:4761
(Diff revision 1)
> return;
> }
>
> if (mDownloadSuspendedByCache &&
> mDecoder && !mDecoder->IsEnded() &&
> + !mWaitingForKey &&
note: i don't think this can happen as EME is only used with MSE, and mDownloadSuspendedByCache is always false
Attachment #8803142 -
Flags: review?(jyavenard) → review+
Assignee | ||
Comment 7•8 years ago
|
||
(In reply to Jean-Yves Avenard [:jya] from comment #6)
> Comment on attachment 8803142 [details]
> Bug 1310548 - Delay firing of 'waitingforkey' until all decoded data has
> been rendered.
>
> https://reviewboard.mozilla.org/r/87398/#review86410
>
> ::: dom/html/HTMLMediaElement.h:1595
> (Diff revision 1)
> > bool mIsEncrypted;
> >
> > - // True when the CDM cannot decrypt the current block, and the
> > - // waitingforkey event has been fired. Back to false when keys have become
> > - // available and we can advance the current playback position.
> > + // True when the CDM cannot decrypt the current block due to lacking a key.
> > + // Note: the "waitingforkey" event is not dispatched until all decoded data
> > + // has been rendered.
> > bool mWaitingForKey;
>
> couldn't we have used an enum for this ?
Sure, sounds good.
> ::: dom/html/HTMLMediaElement.cpp:4761
> (Diff revision 1)
> > return;
> > }
> >
> > if (mDownloadSuspendedByCache &&
> > mDecoder && !mDecoder->IsEnded() &&
> > + !mWaitingForKey &&
>
> note: i don't think this can happen as EME is only used with MSE, and
> mDownloadSuspendedByCache is always false
Good point. Thanks!
Comment hidden (mozreview-request) |
Pushed by cpearce@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/2ec35e0e63b5
Delay firing of 'waitingforkey' until all decoded data has been rendered. r=jya
Comment 10•8 years ago
|
||
bugherder |
Status: NEW → RESOLVED
Closed: 8 years ago
status-firefox52:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla52
You need to log in
before you can comment on or make changes to this bug.
Description
•