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:
2026-06-20 13:48:26 +08:00
parent 3dc2015a91
commit ae9a27c300
7 changed files with 385 additions and 4 deletions

View File

@@ -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,