
It's 2023, and we have to ask: how does AV1 perform? Is it ready for production? And does H.265 really cut bandwidth in half compared to H.264?
This article compares H.265, AV1, and H.264 across performance, quality, and bandwidth efficiency. The test encoders are x264, x265, VideoToolbox, and libaom, run on a MacBook Pro 2021 with an M1 Pro chip.
Overall, x265 did not meet expectations — its CPU cost is too high for real-time communication in production. libaom performed well, delivering strong quality with acceptable performance.
Both x265 and AV1 can achieve lower bitrates and higher encoding quality than H.264.
AV1 also offers dedicated encoding settings for screen sharing, with algorithm optimizations and solid rate control. x265 and VideoToolbox do not provide equivalent options.
1. Hardware Support
H265:
- Apple added HEVC support starting with iOS 11 and the A9 chip (iPhone 6s, September 2015), including AVPlayer and Safari. Hardware encoding requires iOS 11 + A10 (iPhone 7). Reference
- Android devices began adopting H.265 encoding around 2015. Android 5.0 (Lollipop) was among the first versions to support it.
However, not every device released on Android 5.0 or later fully supports H.265 encoding, because codec support varies by device model and manufacturer. High-end and mid-range Android devices are more likely to support it. {: .prompt-warning }
- On desktop, most Intel integrated GPUs and NVIDIA GPUs support H.265. See here for detailed H.265 support.
AV1:
- Android: Qualcomm Snapdragon 8 Gen 2 added AV1 hardware decode; Xiaomi 13 was the first device, released in December 2022.
- Apple A17 Pro includes a dedicated AV1 decoder, shipped with iPhone 15 Pro in September 2023.
- Mac: M3 chips added AV1 decode support on October 30, 2023.
- PC: among Intel GPUs, only the latest
Iris Xe GraphicsandUHD Graphics 750support AV1 hardware decode. Many NVIDIA GPUs support AV1 encode and decode. See here for AV1 support details.
2. Software Support
H265:
- x265 — encoding only
- libde265 — decoding, with a performance report
- HM — not just a codec library; includes encoder, decoder, tools, and examples
- ffmpeg — decoding only
AV1:
- libaom — Google's AV1 encoder, actively maintained
- dav1d — VideoLAN's high-performance AV1 decoder
- SVT-AV1
- rav1e by Xiph
3. Chrome and WebRTC Support
Chome:
Google Chrome has supported H.265 decoding by default since M107, so you can watch some H.265 videos in the browser. See the Zhihu discussion and news coverage, October 2, 2022.
WebRTC:
WebRTC does not yet support H.265 encode/decode, but Intel's owt-deps-webrtc project already offers solid H.265 hardware encode/decode support. There are also signs that WebRTC may add H.265 — see Jianchi Hu's blog and the WebRTC issue tracker, October 2023.
4. Preparation
Integrating x265 into WebRTC requires building the x265 library yourself and wrapping it similarly to OpenH264. WebRTC supports AV1 out of the box.
4.1. Building x265
Because of licensing and adoption, there is relatively little documentation on building x265, and it took some effort. The x265 source is open source and can be cloned with git:
git clone https://bitbucket.org/multicoreware/x265_git.git
Or download it from here. I used x265_3.5.tar.gz.
My build environment:
- 2021 MacBook Pro with M1 Pro
- macOS 14.0 Sonoma
x265 uses CMake. It includes build scripts for common platforms. On macOS, enter x265_git/build/linux and run make-Makefiles.bash to open the configuration UI. Set ENABLE_ASSEMBLY to ON for better performance, and set СМАКЕ_OSX_DEPLOYMENT_TARGET to the minimum supported macOS version. Press c to configure and g to generate the Makefile.
Run make to build. If successful, you get libx265.a and the x265_config.h header in the same directory. Include both x265.h and x265_config.h; otherwise you may see:
ld: Undefined symbols:
_x265_encoder_open_208, referenced from:
x265_encoder_open is a macro, and its definition changes between versions.
4.2. H265 Profile
x265 only has a main profile, unlike x264's base, main, and high. Also, neither x265 nor videotoolbox supports SCC (Screen Content Coding). In practice, screen sharing still looks better than x264; comparison data follows below.
5. Encoding Quality
To make differences more visible, tests used an extreme resolution and bitrate: 320x180p at 40 kbps.
Overall, x265 looks noticeably better than x264, but at a much higher CPU cost. AV1 looks better than x265 while keeping performance under control — a clear win over x265.
x265 software encoding (ultrafast) at 180p was much worse than VideoToolbox hardware H.265 encoding. I forgot to capture screenshots, so those are omitted.
At higher or sufficient bitrates, x264, x265, and AV1 are hard to tell apart.
5.1. VideoToolbox vs AV1
<img src="https://img.pixpark.net/image-20231108134154079-20240114114258071.jpg" style="display: block; margin: 0 auto; width:80%; height=auto"> <img src="https://img.pixpark.net/image-20231108134419851-20240114114301750.jpg" style="display: block; margin: 0 auto; width:80%; height=auto">Resolution: 320x180
Bitrate: 40 kbps, ABR
Complexity: AV1: Speed-6, VideoToolbox: none
Conclusion: In image 1, AV1 is slightly better on background control; overall VideoToolbox hardware encoding looks a bit better. In image 2, AV1 is clearly better on motion.
5.2. x265 vs AV1
<img src="https://img.pixpark.net/image-20231108105218723-20240114114309383.jpg" style="display: block; margin: 0 auto; width:80%; height=auto">Resolution: 320x180
Bitrate: 40 kbps, ABR
Complexity: AV1: Speed-6, x265: ultrafast
Conclusion: AV1 quality is clearly better than x265 ultrafast
5.3. x265 vs x264
<img src="https://img.pixpark.net/image-20231108104237908-20240114114313216.jpg" style="display: block; margin: 0 auto; width:80%; height=auto"> <img src="https://img.pixpark.net/image-20231108112054144-20240114114317080.jpg" style="display: block; margin: 0 auto; width:80%; height=auto">Resolution: 320x180
Bitrate: ABR — image 1: 40 kbps, image 2: 100 kbps
Complexity: x264: veryfast, x265: ultrafast
Conclusion: x265 ultrafast beats x264 veryfast
5.4. x265 Very Fast vs Ultra Fast
<img src="https://img.pixpark.net/image-20231108105812446-20240114114321232.jpg" style="display: block; margin: 0 auto; width:80%; height=auto">Resolution: 640x360
Bitrate: 100 kbps, ABR
Complexity: x265: veryfast, x265: ultrafast
Conclusion: x265 veryfast beats x265 ultrafast
6. Encoding Performance
- x265 360p ultrafast: CPU 55% ~ 65%, about 10% lower than veryfast
- x265 720p ultrafast: CPU 85% ~ 95%, about 50% lower than veryfast
- x265 720p hardware encode: CPU 45% ~ 50%, about 50% lower than x265 720p ultrafast, and 5%–15% lower than 360p x265 ultrafast
- AV1 encoding is clearly better than x265, with a large advantage even over x265 ultrafast
- AV1 supports SCC screen-sharing encoding — clarity, performance, and bandwidth are all much better than x265 for screen share
I only tested AV1 encoding on iPhone 11 on mobile. At 360p and 720p, CPU usage was slightly lower than on MacBook Pro 2021 (M1 Pro), possibly because baseline demo CPU usage differed. That result was a pleasant surprise — AV1 looks ready for production. Sorry, no screenshots 😅
6.1. 360p
| Resolution | Encoder | CPU | Notes |
|---|---|---|---|
| 640x360 | VideoToobox | 45%~50% | Baseline CPU |
| 640x360 | X265 ultrafast | 55% ~ 65% | |
| 640x360 | X265 veryfast | 70% ~ 75% | Higher than ultrafast |
| 640x360 | AV1 | 50% ~ 55% | Better than x265 |
6.2. 720p
| Resolution | Encoder | CPU | Notes |
|---|---|---|---|
| 1280x720 | VideoToobox | 45%~50% | Baseline CPU |
| 1280x720 | X265 ultrafast | 85% ~ 95% | |
| 1280x720 | X265 veryfast | 145% ~ 160% | |
| 1280x720 | AV1 | N/A |
6.3. Screen sharing:
| Resolution | Encoder | CPU | Notes |
|---|---|---|---|
| 1920x1246 | VideoToobox | 45%~50% | |
| 1920x1246 | X265 veryfast | 180% ~ 204% | |
| 1920x1246 | AV1 | 59% ~ 90% | Low when idle, high when scrolling |
VideoToobox encoding uses almost no CPU; 45%–50% can be treated as the demo's baseline CPU usage.
AV1 supports SCC; X265 does not {: .prompt-warning }
6.4. Low-end device results
| Device | Resolution | Encoder | CPU |
|---|---|---|---|
| 🍎360P | |||
| iphone6 | 640x360 | x264 | 95-142% |
| iphone6 | 640x360 | av1 | 93-127% |
| iphoneXR | 640x360 | x264 | 56-59% |
| iphoneXR | 640x360 | av1 | 64-67% |
| Honor Play 20 | 640x360 | x264 | 12-17% |
| Honor Play 20 | 640x360 | av1 | 14-22% |
| Honor 30 | 640x360 | x264 | 9-17% |
| Honor 30 | 640x360 | av1 | 16-21% |
| 🍎720P | |||
| iphone6 | 1280x720 | x264 | 112-129% |
| iphone6 | 1280x720 | av1 | 144-167% |
| iphoneXR | 1280x720 | x264 | 88-101% |
| iphoneXR | 1280x720 | av1 | 120% |
| Honor Play 20 | 1280x720 | x264 | 19-26% |
| Honor Play 20 | 1280x720 | av1 | 25-47% |
| Honor 30 | 1280x720 | x264 | 17-27% |
| Honor 30 | 1280x720 | av1 | 22-30% |
AV1 is slightly higher than x264 in CPU, but quality is much better — an acceptable tradeoff.
7. Rate Control
7.1. Video scene
At 180p in WebRTC, with min: 30 kbps, start: 40 kbps, max: 80 kbps, actual send bitrate. Red: AV1, green: H265 — both are close and perform well.
<img src="https://img.pixpark.net/image-20231108113313763-20240114114327736.png" style="display: block; margin: 0 auto; width:80%; height=auto">7.2. Screen sharing
AV1 send bitrate in WebRTC is excellent: bitrate rises with large desktop changes and scrolling, and stays very low on static frames.
Forgot to capture x265 screenshots 😓.
<img src="https://img.pixpark.net/image-20240114114337299.png" style="display: block; margin: 0 auto; width:80%; height=auto">Elecard analysis shows H265 keyframes and overall bitrate are lower than H264 at similar visual quality.
H264 stream:
<img src="https://img.pixpark.net/AgAABTbDqd3Kavf6WKROrK-QfWTuZzH2-20240114114341441.png" style="display: block; margin: 0 auto; width:80%; height=auto">H265 stream:
<img src="https://img.pixpark.net/AgAABTbDqd1YX4iSsftGtYPMUtYYtwnG-20240114114346691.png" style="display: block; margin: 0 auto; width:80%; height=auto">8. Decoding Performance
Tested with ffplay playback, not WebRTC. At 360p, H265 decode uses noticeably more CPU than H264; at 720p it is slightly higher. AV1 is slightly above H264 but below H265.
8.1. 360p
| Resolution | Decoder | CPU | Notes |
|---|---|---|---|
| 640x360 | H264-ffplay | 13% | |
| 640x360 | H265-ffplay | 24.3% | |
| 640x360 | AV1(ffplay-dav1d) | 22.2% |
8.2. 720p
| Resolution | Decoder | CPU | Notes |
|---|---|---|---|
| 1280x720 | H264-ffplay | 34.6% | |
| 1280x720 | H265-ffplay | 40.3% | |
| 1280x720 | AV1(ffplay-dav1d) | 36.9% |
9. Closing
These tests took a long time, and recording the data was tedious.
They gave a qualitative and quantitative picture of mainstream encoders on performance, quality, and bitrate — useful for choosing codecs in real products.
This is personal testing; mistakes are possible, especially around AV1 performance. If you run similar tests, feedback is welcome.


