Handle "w" properly in the AV1 packetizer#1305
Merged
alfredh merged 1 commit intobaresip:mainfrom Apr 19, 2025
Merged
Conversation
Contributor
Author
|
Updated to fix the OOM sanitizer |
cspiel1
reviewed
Apr 18, 2025
cspiel1
reviewed
Apr 18, 2025
The AV1 packetizer did not properly packetize all AV1 bitstreams. It incorrectly calculated the "w" field from the AV1 RTP spec once and applied it to all RTP packets. This field needs to be determined on a per-packet basis. In practice, this meant the packetizer generated invalid RTP packets if w = 0 for the first packet (i.e. 4 or more OBUs). Rewrite the packetizer to accurately determine how many OBU fragments are present in each RTP packet. The general idea is: 1. Start with the first OBU in the user buffer 2. Fill the RTP packet with data from the current OBU 3. If there is space left over in the packet, move to the next OBU and repeat baresip#2 4. Once the RTP packet is full, report it to the handler and clear it and repeat baresip#2 Update the tests to get wider coverage of this new algorithm. Add another stream with more OBUs and test each stream with varying packet sizes. Also, fix the frame re-assembly code in the test to conform to the spec. Name this new algorithm av1_packetize_new and keep the old av1_packetize_high around for now. Library users can switch to the new implementation for testing until it replaces av1_packetize_high. AV1 RTP spec: https://aomediacodec.github.io/av1-rtp-spec/
Contributor
|
Thank Nick! |
jmontorosf
pushed a commit
to sipfront/re
that referenced
this pull request
Jun 12, 2025
The AV1 packetizer did not properly packetize all AV1 bitstreams. It incorrectly calculated the "w" field from the AV1 RTP spec once and applied it to all RTP packets. This field needs to be determined on a per-packet basis. In practice, this meant the packetizer generated invalid RTP packets if w = 0 for the first packet (i.e. 4 or more OBUs). Rewrite the packetizer to accurately determine how many OBU fragments are present in each RTP packet. The general idea is: 1. Start with the first OBU in the user buffer 2. Fill the RTP packet with data from the current OBU 3. If there is space left over in the packet, move to the next OBU and repeat baresip#2 4. Once the RTP packet is full, report it to the handler and clear it and repeat baresip#2 Update the tests to get wider coverage of this new algorithm. Add another stream with more OBUs and test each stream with varying packet sizes. Also, fix the frame re-assembly code in the test to conform to the spec. Name this new algorithm av1_packetize_new and keep the old av1_packetize_high around for now. Library users can switch to the new implementation for testing until it replaces av1_packetize_high. AV1 RTP spec: https://aomediacodec.github.io/av1-rtp-spec/ Co-authored-by: Nicholas Cook <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The AV1 packetizer did not properly packetize all AV1 bitstreams. It incorrectly calculated the "w" field from the AV1 RTP spec once and applied it to all RTP packets. This field needs to be determined on a per-packet basis. In practice, this meant the packetizer generated invalid RTP packets if w = 0 for the first packet (i.e. 4 or more OBUs).
Rewrite the packetizer to accurately determine how many OBU fragments are present in each RTP packet. The general idea is:
Update the tests to get wider coverage of this new algorithm. Add another stream with more OBUs and test each stream with varying packet sizes. Also, fix the frame re-assembly code in the test to conform to the spec.
Name this new algorithm av1_packetize_new and keep the old av1_packetize_high around for now. Library users can switch to the new implementation for testing until it replaces av1_packetize_high.
AV1 RTP spec: https://aomediacodec.github.io/av1-rtp-spec/