libdatachannel implementation Part 1 (#1077)

* add libdatachannel

* move some methods to rtc_helper.py

* move some methods to rtc_helper.py

* open_vp8_encoder -> spawn_stream_encoder

* update url (linux only)

* fix lint

* remove RTC_STATE and add unit tests

* remove convert_to_raw_rgb

* remove 'utf-8' from decode

* cleanup

* cleanup

* cleanup

* move rtc types to rtc_bindings.py

* remove load_library

* cleanup

* add todos and some cleanup

* fix lint
This commit is contained in:
Harisreedhar
2026-04-21 17:33:26 +05:30
committed by henryruhs
parent 701a1b5f9e
commit db545b8ae4
7 changed files with 378 additions and 7 deletions
+25 -1
View File
@@ -1,4 +1,5 @@
import os
import struct
import subprocess
import tempfile
@@ -7,7 +8,7 @@ import pytest
import facefusion.ffmpeg
from facefusion import process_manager, state_manager
from facefusion.download import conditional_download
from facefusion.ffmpeg import concat_video, extract_frames, merge_video, read_audio_buffer, replace_audio, restore_audio, sanitize_audio, sanitize_image, sanitize_video, spawn_frames
from facefusion.ffmpeg import concat_video, extract_frames, merge_video, read_audio_buffer, replace_audio, restore_audio, sanitize_audio, sanitize_image, sanitize_video, spawn_frames, spawn_stream
from facefusion.ffprobe import probe_entries
from facefusion.filesystem import copy_file, is_image
from facefusion.temp_helper import clear_temp_directory, create_temp_directory, get_temp_file_path, resolve_temp_frame_paths
@@ -253,3 +254,26 @@ def test_sanitize_video() -> None:
assert sanitize_video(file_content, output_paths[1], 'moderate') is True
assert probe_entries(output_paths[1], [ 'codec_name' ]).get('codec_name') == 'hevc'
def test_spawn_stream() -> None: # TODO: Improve test
test_set =\
[
((426, 240), 25, 500),
((640, 360), 30, 1000),
((1280, 720), 30, 2000)
]
for resolution, stream_fps, stream_bitrate in test_set:
encoder = spawn_stream(resolution, stream_fps, stream_bitrate)
frame_size = resolution[0] * resolution[1] * 3
stdout, _ = encoder.communicate(input = bytes(frame_size))
assert len(stdout) > 32
frame_header = stdout[:32]
assert frame_header[:4] == b'DKIF'
output_width = struct.unpack_from('<H', frame_header, 12)[0]
output_height = struct.unpack_from('<H', frame_header, 14)[0]
assert (output_width, output_height) == resolution