音频配置参数引入

This commit is contained in:
杍超
2025-02-12 14:52:27 +08:00
parent 7179a577f2
commit a1f3079232
4 changed files with 38 additions and 9 deletions

View File

@@ -97,6 +97,22 @@ with gr.Blocks(css=css) as demo:
mode="send-receive", mode="send-receive",
video_chat=True, video_chat=True,
elem_id="video-source", elem_id="video-source",
track_constraints={
"video": {
"facingMode": "user",
"width": {"ideal": 500},
"height": {"ideal": 500},
"frameRate": {"ideal": 30},
},
"audio": {
"echoCancellation": True,
"noiseSuppression": {"exact": True},
"autoGainControl": {"exact": False},
"sampleRate": {"ideal": 24000},
"sampleSize": {"ideal": 16},
"channelCount": {"exact": 1},
},
}
) )
webrtc.stream( webrtc.stream(
VideoChatHandler(), VideoChatHandler(),

Binary file not shown.

View File

@@ -81,6 +81,7 @@
on:error={({ detail }) => gradio.dispatch("error", detail)} on:error={({ detail }) => gradio.dispatch("error", detail)}
i18n={gradio.i18n} i18n={gradio.i18n}
stream_handler={(...args) => gradio.client.stream(...args)} stream_handler={(...args) => gradio.client.stream(...args)}
{track_constraints}
{height} {height}
{on_change_cb} {rtc_configuration} {on_change_cb} {rtc_configuration}
on:tick={() => gradio.dispatch("tick")} on:tick={() => gradio.dispatch("tick")}

View File

@@ -19,18 +19,30 @@ export async function get_video_stream(
include_audio: boolean | { deviceId: { exact: string } }, include_audio: boolean | { deviceId: { exact: string } },
video_source: HTMLVideoElement, video_source: HTMLVideoElement,
device_id?: string, device_id?: string,
track_constraints?: MediaTrackConstraints track_constraints?:
| MediaTrackConstraints
| { video: MediaTrackConstraints; audio: MediaTrackConstraints }
): Promise<MediaStream> { ): Promise<MediaStream> {
const fallback_constraints = track_constraints || { console.log(track_constraints);
width: { ideal: 500 }, const video_fallback_constraints = (track_constraints as any)?.video ||
height: { ideal: 500 }, track_constraints || {
}; width: { ideal: 500 },
height: { ideal: 500 },
};
const audio_fallback_constraints = (track_constraints as any)?.audio ||
track_constraints || {
echoCancellation: true,
noiseSuppression: true,
autoGainControl: true,
};
const constraints = { const constraints = {
video: device_id video: device_id
? { deviceId: { exact: device_id }, ...fallback_constraints } ? { deviceId: { exact: device_id }, ...video_fallback_constraints }
: fallback_constraints, : video_fallback_constraints,
audio: include_audio, audio:
typeof include_audio === "object"
? { ...include_audio, ...audio_fallback_constraints }
: include_audio,
}; };
return navigator.mediaDevices return navigator.mediaDevices