Resolve final stream TODOs (#1155)

* refactor a lot

* refactor a lot

* fix test

* fix test
This commit is contained in:
Henry Ruhs
2026-06-15 11:37:25 +02:00
committed by GitHub
parent d5271d21a1
commit 2854bf1db0
7 changed files with 64 additions and 81 deletions
+14 -14
View File
@@ -14,7 +14,7 @@ from facefusion.download import conditional_download
from facefusion.ffmpeg import read_audio_buffer
from facefusion.hash_helper import create_hash
from facefusion.libraries import datachannel as datachannel_module, opus as opus_module
from facefusion.types import AudioCodec, AudioFrame, FrameHandler, RtcPeer, RtcPeerAudio
from facefusion.types import AudioCodec, AudioFrame, Buffer, FrameHandler, RtcPeer, RtcPeerAudio
from .assert_helper import get_test_example_file, get_test_examples_directory
@@ -37,8 +37,11 @@ def before_each() -> None:
rtc_store.clear()
def set_ready_event(ready_event : threading.Event, track : int, close_callback : FrameHandler) -> None:
def dispatch_frame(buffer : Buffer, track : int, frame_handler : FrameHandler) -> threading.Event:
frame_handler(buffer, 0)
ready_event = threading.Event()
ready_event.set()
return ready_event
def test_run_audio_encode_loop() -> None:
@@ -48,6 +51,12 @@ def test_run_audio_encode_loop() -> None:
rtc_peer : RtcPeer =\
{
'peer_connection': peer_connection,
'audio':
{
'sender_track': 0,
'receiver_track': 0,
'codec': 'opus'
},
'video':
{
'sender_track': 0,
@@ -82,11 +91,7 @@ def test_receive_audio_frames(audio_codec : AudioCodec) -> None:
audio_frame = numpy.frombuffer(audio_buffer, dtype = numpy.int16).astype(numpy.float32) / 32768.0
audio_queue : Queue[Tuple[float, AudioFrame]] = Queue(maxsize = 300)
datachannel_mock = MagicMock()
ready_event = threading.Event()
datachannel_mock.rtcSetClosedCallback.side_effect = partial(set_ready_event, ready_event)
with patch('facefusion.libraries.datachannel.create_static_library', return_value = datachannel_mock):
with patch('facefusion.apis.stream_audio.create_receive_event', side_effect = partial(dispatch_frame, bytes([ 0 ]))):
with patch('facefusion.apis.stream_audio.decode_audio_frame', return_value = audio_frame.tobytes()):
rtc_peer_audio : RtcPeerAudio =\
{
@@ -94,12 +99,7 @@ def test_receive_audio_frames(audio_codec : AudioCodec) -> None:
'receiver_track': 0,
'codec': audio_codec
}
audio_receiver_thread = threading.Thread(target = receive_audio_frames, args = (rtc_peer_audio, audio_queue), daemon = True)
audio_receiver_thread.start()
ready_event.wait(timeout = 5.0)
datachannel_mock.rtcSetFrameCallback.call_args[0][1](0, bytes([ 0 ]), 1, None, None)
datachannel_mock.rtcSetClosedCallback.call_args[0][1](0, None)
audio_receiver_thread.join(timeout = 5.0)
receive_audio_frames(rtc_peer_audio, audio_queue)
_, temp_audio_frame = audio_queue.get_nowait()
@@ -113,7 +113,7 @@ def test_handle_audio_frame() -> None:
audio_queue : Queue[Tuple[float, AudioFrame]] = Queue(maxsize = 300)
with patch('facefusion.apis.stream_audio.decode_audio_frame', return_value = audio_frame.tobytes()):
handle_audio_frame('opus', audio_decoder_mock, audio_queue, 0, ctypes.c_void_p(), 1, ctypes.c_void_p(), ctypes.c_void_p())
handle_audio_frame('opus', audio_decoder_mock, audio_queue, bytes(), 0)
_, temp_audio_frame = audio_queue.get_nowait()