feat: 结束视频后保留对话,支持继续文字聊天
- useVisionSession 新增 stopVideo 回调(停媒体流,保持连接和消息) - App.tsx 控制区从二态改为三态(initial/video/textOnly) - 文字对话态显示「重新开始视频」和「结束会话」按钮 - 新增 CSS 样式(video-ended-hint、btn--outline) - 新增 i18n key(stopVideo/endSession/resumeVideo/video.ended) - 新增设计方案文档
This commit is contained in:
@@ -363,6 +363,22 @@ export function useVisionSession(accessToken?: string | null) {
|
||||
setIsMicOn(false);
|
||||
}, [stopObserving, stopVAD, stopMic, stopCamera, disconnect]);
|
||||
|
||||
/** 结束视频,保留聊天和连接 */
|
||||
const stopVideo = useCallback(async () => {
|
||||
stopObserving();
|
||||
setMode("dialogue");
|
||||
await stopVAD();
|
||||
stopMic();
|
||||
stopCamera();
|
||||
ttsPlayerRef.current?.stop();
|
||||
setIsAudioPlaying(false);
|
||||
setCurrentReply("");
|
||||
setIsProcessing(false);
|
||||
setIsCameraOn(false);
|
||||
setIsMicOn(false);
|
||||
// 不断开 WebSocket,不清空消息、历史、统计
|
||||
}, [stopObserving, stopVAD, stopMic, stopCamera]);
|
||||
|
||||
/** 摄像头开关 */
|
||||
const toggleCamera = useCallback(async () => {
|
||||
if (isCameraOn) {
|
||||
@@ -479,6 +495,7 @@ export function useVisionSession(accessToken?: string | null) {
|
||||
toggleMode,
|
||||
startSession,
|
||||
stopSession,
|
||||
stopVideo,
|
||||
interrupt,
|
||||
isCameraOn,
|
||||
isMicOn,
|
||||
|
||||
Reference in New Issue
Block a user