srs/trunk
Haibo Chen(陈海博) 6208b6fe61
Fix H.264 B-frame detection logic to comply with specification. v5.0.224 v6.0.169 v7.0.46 (#4414)
For H.264, only when the NAL Type is 1, 2, 3, or 4 is it possible for
B-frames to be present; that is, non-IDR pictures and slice data.

The current `SrsVideoFrame::parse_avc_bframe()` function uses incorrect
logic to determine if a NALU can contain B-frames. The original
implementation only checked for specific NALU types (IDR, SPS, PPS) to
mark as non-B-frames, but this approach misses many other NALU types
that cannot contain B-frames according to the H.264 specification.

According to H.264 specification (ISO_IEC_14496-10-AVC-2012.pdf, Table
7-1), B-frames can **only** exist in these specific NALU types:
- Type 1: Non-IDR coded slice (`SrsAvcNaluTypeNonIDR`)
- Type 2: Coded slice data partition A (`SrsAvcNaluTypeDataPartitionA`) 
- Type 3: Coded slice data partition B (`SrsAvcNaluTypeDataPartitionB`)
- Type 4: Coded slice data partition C (`SrsAvcNaluTypeDataPartitionC`)

All other NALU types (IDR=5, SEI=6, SPS=7, PPS=8, AUD=9, etc.) cannot
contain B-frames by definition.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2025-07-10 09:08:05 -04:00
..
3rdparty Refine code and add tests for #4289. v7.0.45 (#4412) 2025-07-04 17:26:12 -04:00
auto Refine code and add tests for #4289. v7.0.45 (#4412) 2025-07-04 17:26:12 -04:00
conf Update docs link to latest in code. 2025-07-05 09:32:11 -04:00
doc Fix H.264 B-frame detection logic to comply with specification. v5.0.224 v6.0.169 v7.0.46 (#4414) 2025-07-10 09:08:05 -04:00
etc/init.d Squash: Fix bugs 2022-01-13 18:26:28 +08:00
gdb The identifier "ShowCouroutines" needs to be modified to "ShowCoroutines" in order to rectify the typographical error. v6.0.63 (#3703) 2023-07-27 08:12:39 +08:00
ide/srs_clion Build: update build version to v7. v7.0.29 (#4294) 2025-03-21 19:15:05 +08:00
modules Moduels: Refine the description 2021-04-21 11:18:35 +08:00
packaging Windows: Refine cygwin pipeline (#3260) 2022-11-21 14:32:26 +08:00
research Player: Get codec by webrtc api: pc.getStats. v7.0.42 (#4310) 2025-06-04 10:28:46 -04:00
scripts AI: Add guide for Augment. (#4404) 2025-06-27 07:23:45 -04:00
src Fix H.264 B-frame detection logic to comply with specification. v5.0.224 v6.0.169 v7.0.46 (#4414) 2025-07-10 09:08:05 -04:00
usr/lib/systemd/system Squash: Support RPM. Fix bugs. 2021-11-04 07:37:17 +08:00
.gitignore rtc2rtmp: Support RTC-to-RTMP remuxing with HEVC. v7.0.43 (#4349) 2025-07-03 08:24:42 -04:00
AUTHORS.md Update CHANGELOG for #4309. v7.0.31 2025-04-26 06:58:00 -04:00
AUTHORS.txt Update AUTHORS 2021-08-25 07:43:35 +08:00
configure Refine code and add tests for #4289. v7.0.45 (#4412) 2025-07-04 17:26:12 -04:00
Dockerfile.builds Refine code and add tests for #4289. v7.0.45 (#4412) 2025-07-04 17:26:12 -04:00
Dockerfile.cov Asan: Refine asan warning message for macOS. 2022-12-31 21:20:51 +08:00
Dockerfile.pkg Merge branch v5.0.103 into develop 2022-12-03 21:15:22 +08:00
Dockerfile.test Refine code and add tests for #4289. v7.0.45 (#4412) 2025-07-04 17:26:12 -04:00