1) initiate WebRTC p2p call 2) peerA sends video stream, codec VP9-SVC with 3 spatial layers (720p, 360p, 180p) actual result: - peerB always decodes and plays only lowest layer (180p) expected result: - peerB should play high layer NOTE: issue is not reproduces on safari Version 14.1.2 (16611.3.10.1.3)
<rdar://problem/83763291>
Thanks for the report. Would it be possible to get a repro case maybe as well, or get a sample bitstream? Can you also clarify which version of Safari you have tested, and the device? It would be nice to know whether that reproduces with HW VP9 decoder or SW VP9 decoder. I am leaning towards the former.
Created attachment 440040 [details] Small example to reproduce the issue Using this example I can reproduce the issue on: 1) MacBook Air (M1, 2020), MacOS Monterey 12.0 Beta (21A5534d), Safari Version 15.1 (17612.2.6.1.1) 2) Iphone 12, IOS 15.0.1 3) Mac mini (2018), Big Sur 11.6, Safari Version 15.0 (16612.1.29.41.4, 16612) I was not able to reproduce this issue on: 1) MacBook Pro (Retina, 15-inch, Late 2013), Big Sur 11.5, Safari Version 14.1.2 (16611.3.10.1.3)
Thanks Ivan, I validated that the issue is with the HW VP9 decoder, not the SW one.
To detect this, media capabilities can be used, for instance: navigator.mediaCapabilities.decodingInfo({ type: "file", video: { contentType: 'video/mp4; codecs="vp09.00.41.08"', width: 800, height: 600, bitrate: 10000, framerate: 15 } }).then(result => console.log(result.powerEfficient))
Created attachment 441073 [details] Patch
Comment on attachment 441073 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=441073&action=review > Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:260 > + auto report = LibWebRTCStatsCollector::createReport(rtcReport); Is there any reason to create the report if the endpoint has stopped?
Created attachment 441200 [details] Patch for landing
(In reply to Eric Carlson from comment #7) > Comment on attachment 441073 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=441073&action=review > > > Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:260 > > + auto report = LibWebRTCStatsCollector::createReport(rtcReport); > > Is there any reason to create the report if the endpoint has stopped? Right, fix in the landing patch
ChangeLog entry in Source/ThirdParty/libwebrtc/ChangeLog contains OOPS!.
Created attachment 441854 [details] Patch for landing
Committed r284523 (243266@main): <https://commits.webkit.org/243266@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 441854 [details].