mirror of
https://github.com/facefusion/facefusion.git
synced 2026-08-23 01:07:11 +02:00
Implement basic webrtc stream (#1054)
* implement basic webrtc_stream * add aiortc to requirements.txt * update aiortc version * rename variables with rtc_ prefix * changes * changes * change helper to assert_helper and stream_helper * rename variables with rtc_ prefix * add error handling * return whole connection * remove monkey patch and some cleaning * cleanup * tiny adjustments * tiny adjustments * proper typing and naming for rtc offer set * - remove async from on_video_track method - rename source -> target - add audio * audio always before video --------- Co-authored-by: henryruhs <info@henryruhs.com>
This commit is contained in:
committed by
henryruhs
co-authored by
henryruhs
parent
9159f45a5f
commit
ab24cd3f2e
@@ -0,0 +1,31 @@
|
||||
import asyncio
|
||||
from typing import cast
|
||||
|
||||
from aiortc import MediaStreamTrack, RTCPeerConnection, VideoStreamTrack
|
||||
from av import VideoFrame
|
||||
|
||||
from facefusion.streamer import process_stream_frame
|
||||
|
||||
|
||||
def create_output_track(target_track : MediaStreamTrack) -> VideoStreamTrack:
|
||||
output_track = VideoStreamTrack()
|
||||
|
||||
async def read_stream_frame() -> VideoFrame:
|
||||
target_stream_frame = cast(VideoFrame, await target_track.recv())
|
||||
output_vision_frame = await asyncio.get_running_loop().run_in_executor(None, process_stream_frame, target_stream_frame.to_ndarray(format = 'bgr24'))
|
||||
output_stream_frame = VideoFrame.from_ndarray(output_vision_frame, format = 'bgr24')
|
||||
output_stream_frame.pts = target_stream_frame.pts
|
||||
output_stream_frame.time_base = target_stream_frame.time_base
|
||||
return output_stream_frame
|
||||
|
||||
output_track.recv = read_stream_frame
|
||||
return output_track
|
||||
|
||||
|
||||
def on_video_track(rtc_connection : RTCPeerConnection, target_track : MediaStreamTrack) -> None:
|
||||
if target_track.kind == 'audio':
|
||||
rtc_connection.addTrack(target_track)
|
||||
|
||||
if target_track.kind == 'video':
|
||||
output_track = create_output_track(target_track)
|
||||
rtc_connection.addTrack(output_track)
|
||||
Reference in New Issue
Block a user