mirror of
https://github.com/facefusion/facefusion.git
synced 2026-07-11 20:56:35 +02:00
Replace aiortc with libdatachannel direct pipeline (#1083)
* fix stdin close error * Refactor stream endpoint, fix encoder thread safety and improve tests * fix and improve test * remove not None * use Enum * use Enum and add todo * remove poll
This commit is contained in:
@@ -1,9 +1,6 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from facefusion import ffmpeg_builder
|
||||
from facefusion.apis.stream_helper import calculate_bitrate, calculate_buffer_size, forward_stream_frame, get_websocket_stream_mode, read_pipe_buffer
|
||||
from facefusion.vision import pack_resolution
|
||||
from facefusion.apis.stream_helper import calculate_bitrate, calculate_buffer_size, get_websocket_stream_mode, read_pipe_buffer
|
||||
|
||||
|
||||
def make_scope(protocol : str) -> dict[str, object]:
|
||||
@@ -30,7 +27,7 @@ def test_calculate_buffer_size() -> None:
|
||||
assert calculate_buffer_size((3840, 2160)) == 14000
|
||||
|
||||
|
||||
def test_get_websocket_stream_mode() -> None:
|
||||
def test_get_stream_mode() -> None:
|
||||
assert get_websocket_stream_mode(make_scope('image')) == 'image'
|
||||
assert get_websocket_stream_mode(make_scope('video')) == 'video'
|
||||
|
||||
@@ -47,23 +44,4 @@ def test_read_pipe_buffer() -> None:
|
||||
os.close(read_fd)
|
||||
|
||||
|
||||
def test_forward_frames() -> None:
|
||||
resolution = (320, 240)
|
||||
frame_size = resolution[0] * resolution[1] * 3
|
||||
commands = ffmpeg_builder.run(ffmpeg_builder.chain(
|
||||
ffmpeg_builder.capture_video(),
|
||||
ffmpeg_builder.set_media_resolution(pack_resolution(resolution)),
|
||||
ffmpeg_builder.set_input_fps(30),
|
||||
ffmpeg_builder.set_input('-'),
|
||||
ffmpeg_builder.set_video_encoder('libvpx'),
|
||||
ffmpeg_builder.set_encoder_deadline('realtime'),
|
||||
ffmpeg_builder.set_stream_quality(400),
|
||||
ffmpeg_builder.set_muxer('ivf'),
|
||||
ffmpeg_builder.set_output('-')
|
||||
))
|
||||
encoder = subprocess.Popen(commands, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
|
||||
encoder.stdin.write(bytes(frame_size))
|
||||
encoder.stdin.close()
|
||||
|
||||
for stream_buffer in forward_stream_frame(encoder):
|
||||
assert 0 < len(stream_buffer) < frame_size
|
||||
# TODO: add remaining tests
|
||||
|
||||
Reference in New Issue
Block a user