mirror of
https://github.com/HumanAIGC-Engineering/gradio-webrtc.git
synced 2026-02-05 18:09:23 +08:00
first cut
This commit is contained in:
@@ -11,6 +11,7 @@ import traceback
|
||||
from abc import ABC, abstractmethod
|
||||
from collections.abc import Callable
|
||||
from typing import TYPE_CHECKING, Any, Generator, Literal, Sequence, cast
|
||||
from copy import deepcopy
|
||||
|
||||
import anyio.to_thread
|
||||
import av
|
||||
@@ -117,6 +118,12 @@ class StreamHandler(ABC):
|
||||
self.output_frame_size = output_frame_size
|
||||
self._resampler = None
|
||||
|
||||
def copy(self) -> "StreamHandler":
|
||||
try:
|
||||
return deepcopy(self)
|
||||
except Exception:
|
||||
raise ValueError("Current StreamHandler implementation cannot be deepcopied. Implement the copy method.")
|
||||
|
||||
def resample(self, frame: AudioFrame) -> Generator[AudioFrame, None, None]:
|
||||
if self._resampler is None:
|
||||
self._resampler = av.AudioResampler( # type: ignore
|
||||
@@ -622,7 +629,7 @@ class WebRTC(Component):
|
||||
elif self.modality == "audio":
|
||||
cb = AudioCallback(
|
||||
relay.subscribe(track),
|
||||
event_handler=cast(StreamHandler, self.event_handler),
|
||||
event_handler=cast(StreamHandler, self.event_handler).copy(),
|
||||
)
|
||||
self.connections[body["webrtc_id"]] = cb
|
||||
logger.debug("Adding track to peer connection %s", cb)
|
||||
|
||||
Reference in New Issue
Block a user