From b8d00d6389d7a9d48d425f598665c8419ebdb808 Mon Sep 17 00:00:00 2001 From: henryruhs Date: Thu, 14 May 2026 16:44:09 +0200 Subject: [PATCH] get rid of aom obus stuff again --- facefusion/apis/stream_helper.py | 5 ++-- facefusion/codecs/aom.py | 43 +---------------------------- facefusion/libraries/datachannel.py | 1 + facefusion/rtc.py | 1 + tests/test_codec_opus.py | 2 +- 5 files changed, 6 insertions(+), 46 deletions(-) diff --git a/facefusion/apis/stream_helper.py b/facefusion/apis/stream_helper.py index f45fc95b..eae236a4 100644 --- a/facefusion/apis/stream_helper.py +++ b/facefusion/apis/stream_helper.py @@ -10,7 +10,7 @@ from starlette.websockets import WebSocket, WebSocketState from facefusion import rtc_store, session_context, session_manager, state_manager from facefusion.apis.api_helper import get_sec_websocket_protocol from facefusion.apis.session_helper import extract_access_token -from facefusion.codecs.aom import create_aom_encoder, destroy_aom_encoder, encode_aom_buffer, extract_aom_obus +from facefusion.codecs.aom import create_aom_encoder, destroy_aom_encoder, encode_aom_buffer from facefusion.codecs.opus import create_opus_encoder, destroy_opus_encoder, encode_opus_buffer from facefusion.codecs.vpx import create_vpx_encoder, destroy_vpx_encoder, encode_vpx_buffer from facefusion.streamer import process_vision_frame @@ -65,8 +65,7 @@ def run_aom_encode_loop(vision_frame_deque : deque[VisionFrame], session_id : Se frame_buffer = encode_aom_buffer(aom_encoder, yuv_frame.tobytes(), frame_resolution, pts) if frame_buffer: - for obu_buffer in extract_aom_obus(frame_buffer): - rtc_store.send_rtc_video(session_id, obu_buffer) + rtc_store.send_rtc_video(session_id, frame_buffer) pts += 1 diff --git a/facefusion/codecs/aom.py b/facefusion/codecs/aom.py index 5164b4af..a005ebd5 100644 --- a/facefusion/codecs/aom.py +++ b/facefusion/codecs/aom.py @@ -1,6 +1,6 @@ import ctypes import struct -from typing import List, Optional +from typing import Optional from facefusion.libraries import aom as aom_module from facefusion.types import AomEncoder, BitRate, Resolution @@ -65,47 +65,6 @@ def collect_aom_buffer(aom_encoder : AomEncoder) -> bytes: return output_buffer -# TODO: try to eliminate this -def extract_aom_obus(frame_buffer : bytes) -> List[bytes]: - obu_list : List[bytes] = [] - offset = 0 - - while offset < len(frame_buffer): - header_offset = offset - header = frame_buffer[offset] - obu_type = (header >> 3) & 0x0F - has_extension = (header >> 2) & 0x01 - has_size = (header >> 1) & 0x01 - offset += 1 + has_extension - - obu_size = 0 - - if has_size: - shift = 0 - - while offset < len(frame_buffer): - leb_byte = frame_buffer[offset] - offset += 1 - obu_size |= (leb_byte & 0x7F) << shift - shift += 7 - - if not (leb_byte & 0x80): - break - - payload_offset = offset - offset += obu_size - - if obu_type != 2: - clean_header = bytes([ header & 0xFD ]) - - if has_extension: - clean_header += frame_buffer[header_offset + 1:header_offset + 2] - - obu_list.append(clean_header + frame_buffer[payload_offset:payload_offset + obu_size]) - - return obu_list - - def destroy_aom_encoder(aom_encoder : AomEncoder) -> None: aom_library = aom_module.create_static_library() diff --git a/facefusion/libraries/datachannel.py b/facefusion/libraries/datachannel.py index 9db8dda3..59618926 100644 --- a/facefusion/libraries/datachannel.py +++ b/facefusion/libraries/datachannel.py @@ -258,6 +258,7 @@ def define_rtc_packetizer_init() -> ctypes.Structure: ('sequenceNumber', ctypes.c_uint16), ('timestamp', ctypes.c_uint32), ('maxFragmentSize', ctypes.c_uint16), + ('nalSeparator', ctypes.c_int), ('obuPacketization', ctypes.c_int) ] })() diff --git a/facefusion/rtc.py b/facefusion/rtc.py index edf74b02..f3102849 100644 --- a/facefusion/rtc.py +++ b/facefusion/rtc.py @@ -122,6 +122,7 @@ def add_video_track(peer_connection : PeerConnection, media_direction : MediaDir video_packetizer.maxFragmentSize = 1200 if video_codec == 'av1': + video_packetizer.obuPacketization = 1 datachannel_library.rtcSetAV1Packetizer(video_track, ctypes.byref(video_packetizer)) if video_codec == 'vp8': datachannel_library.rtcSetVP8Packetizer(video_track, ctypes.byref(video_packetizer)) diff --git a/tests/test_codec_opus.py b/tests/test_codec_opus.py index e42c2a85..c3021135 100644 --- a/tests/test_codec_opus.py +++ b/tests/test_codec_opus.py @@ -36,7 +36,7 @@ def test_encode_opus_buffer() -> None: assert create_hash(encode_opus_buffer(opus_encoder, audio_sample.tobytes(), 960)) == '8abe71cf' if is_macos(): - assert create_hash(encode_opus_buffer(opus_encoder, audio_sample.tobytes(), 960)) == '8ecd1108' + assert create_hash(encode_opus_buffer(opus_encoder, audio_sample.tobytes(), 960)) == 'f595020f' def test_destroy_opus_encoder() -> None: