Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 7a74dcab081bf155995c7eb7fb745d444dbb4eae
https://github.com/WebKit/WebKit/commit/7a74dcab081bf155995c7eb7fb745d444dbb4eae
Author: Andy Estes <[email protected]>
Date: 2024-03-08 (Fri, 08 Mar 2024)
Changed paths:
M Source/WebCore/SourcesCocoa.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.cpp
M Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.h
A
Source/WebCore/platform/graphics/avfoundation/objc/CDMFairPlayStreamingAVFObjC.mm
M
Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm
M
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h
M
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm
M
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h
M
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
Log Message:
-----------
[Cocoa] Legacy EME tests time out with
SampleBufferContentKeySessionSupportEnabled enabled
https://bugs.webkit.org/show_bug.cgi?id=270678
rdar://problem/123089013
Reviewed by Jer Noble.
The following legacy EME + MSE tests time out when enabling
SampleBufferContentKeySessionSupportEnabled:
- http/tests/media/fairplay/legacy-fairplay-mse-v2.html
- http/tests/media/fairplay/legacy-fairplay-mse-v3.html
This occurred because SourceBufferPrivateAVFObjC::canEnqueueSample would only
consult m_cdmInstance
(the modern CDM) to determine if a usable key existed to decrypt a sample. When
legacy EME is in use
there would not be a modern CDM instance, so all samples would be considered
un-enqueueable and
ultimately the canplay event would never be dispatched.
Addressed this by teaching SourceBufferPrivateAVFObjC to check m_session (the
legacy CDM) for usable
keys if m_cdmInstance is null. Also, taught CDMSessionAVContentKeySession to
attach content keys to
samples rather than relying on AVStreamDataParser to do so; this matches how
CDMInstanceSessionFairPlayStreamingAVFObjC attaches handles content key
attachment.
To fully resolve these timeouts, one additional change was necessary. In
274351@main we taught the
FairPlay CDM how to decrypt MPEG2-TS streams, but we used a keyID that is
incompatible with the
AVContentKeyRequests vended by AVContentKeySession. Since AVContentKeySession
vends MPEG2-TS key
requests with an identifier of "TransportStreamIdentifier" and our CDM prefers
to use the request
identifier over request initialization data to represent the keyID, this commit
changes
CDMPrivateFairPlayStreaming::mptsKeyIDs() to return "TransportStreamIdentifier"
instead of the
preivious 16-byte value
No new tests; covered by existing tests.
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
(WebCore::CDMPrivateFairPlayStreaming::mptsKeyIDs):
* Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.h:
*
Source/WebCore/platform/graphics/avfoundation/objc/CDMFairPlayStreamingAVFObjC.mm:
Added.
(WebCore::CDMPrivateFairPlayStreaming::keyIDsForRequest):
*
Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
(WebCore::keyIDsForRequest):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequests):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateKeyStatuses):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::contentKeyForSample):
*
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
*
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
(WebCore::CDMSessionAVContentKeySession::isAnyKeyUsable const):
(WebCore::CDMSessionAVContentKeySession::attachContentKeyToSample):
(WebCore::CDMSessionAVContentKeySession::contentKeyRequest const):
(WebCore::CDMSessionAVContentKeySession::contentKeyRequest): Deleted.
*
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
*
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::canEnqueueSample):
(WebCore::SourceBufferPrivateAVFObjC::attachContentKeyToSampleIfNeeded):
Canonical link: https://commits.webkit.org/275839@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes