Bug 311593
| Summary: | WebRTC Media capabilities do not report power efficient AV1 decode | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | jbedwell |
| Component: | Media | Assignee: | Nobody <webkit-unassigned> |
| Status: | RESOLVED FIXED | ||
| Severity: | Normal | CC: | eric.carlson, jer.noble, webkit-bug-importer, youennf |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Safari 26 | ||
| Hardware: | Mac (Apple Silicon) | ||
| OS: | macOS 26 | ||
jbedwell
Overview
On iOS and Mac the Safari media capabilities decoding info API (https://developer.mozilla.org/en-US/docs/Web/API/MediaCapabilities/decodingInfo) underreports AV1 capabilities. When queried for WebRTC it reports "supported" for AV1 on M3+ and A18+, but it returns false for "smooth" and "powerEfficient". Generally the "smooth" and "powerEfficient" fields should be true when hardware decode is available, and it is.
This can be an issue for web applications that attempt to select a codec that the client has hardware decode support for.
Steps to Reproduce
await navigator.mediaCapabilities.decodingInfo({type: 'webrtc', video: {contentType: 'video/AV1', width: 1920, height: 1080, bitrate: 10_000, framerate: 60}})
Actual Results
On M3+ and A18+ devices (which have hardware AV1 decode support) AV1 is reported as "supported" but not "smooth" or "powerEfficient".
Queries for other types than 'webrtc' (ex. 'media-source') seem to also underreport AV1 capabilities.
Expected Results
On M3+ and A18+ devices AV1 should be reported as "supported" as well as "smooth" and "powerEfficient".
Build Date & Hardware
Tested on iPhone 15 Pro + iOS 26.4 and M4 MacBook Pro + MacOS 26.4.
Additional Builds and Platforms
On M4 MacBook Pro + MacOS 26.4, Chrome 146 reports AV1 decode as "smooth" and "powerEfficient".
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/174686183>
jbedwell
Enabling the "WebRTC AV1 codec" feature flag does not fix this issue.
youenn fablet
AV1 for regular playback (mse here) seems to work for me:
const configuration = {
type: 'media-source',
video: {
contentType: 'video/mp4; codecs="av01.0.05M.08"',
width: 1080,
height: 720,
bitrate: 3000000,
framerate: 30
}
};
youenn fablet
https://github.com/WebKit/WebKit/pull/65110
EWS
Committed 313468@main (6b68426e27af): <https://commits.webkit.org/313468@main>
Reviewed commits have been landed. Closing PR #65110 and removing active labels.