Код: Выделить всё
await room.connect(sessionInfo.url, sessionInfo.access_token);
< /code>
Соединение кажется хорошим (журналы консоли показывают успешные сообщения об подключении), но по какой -то причине видео анимация становится нестабильной. < /p>
Вот мой фрагмент кода: < /p>
// ------------------------------------------------------
// 1️⃣ Create + Start a new streaming session via Flask
// ------------------------------------------------------
async function createNewSession() {
try {
updateStatus("🔄 Creating streaming session (v2)…");
const res = await fetch("/api/session/create", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
avatar_name: avatarID.value,
voice_id: voiceID.value,
}),
});
if (!res.ok) throw new Error("Backend /create failed");
const data = await res.json();
sessionInfo = {
session_id: data.session_id,
url: data.url,
access_token: data.access_token,
session_token: data.session_token,
livekit_agent_token: data.livekit_agent_token,
realtime_endpoint: data.realtime_endpoint,
};
updateStatus("✅ Session info received from server");
// --- Connect to LiveKit Room ---
room = new LivekitClient.Room({
adaptiveStream: true,
dynacast: true,
videoCaptureDefaults: {
resolution: LivekitClient.VideoPresets.h720.resolution,
},
});
// ✅ Track LiveKit connection status
room
.on(LivekitClient.RoomEvent.Connected, () => {
updateStatus("✅ [LiveKit] Connected");
})
.on(LivekitClient.RoomEvent.Reconnecting, () => {
updateStatus("⚠️ [LiveKit] Reconnecting…");
})
.on(LivekitClient.RoomEvent.Reconnected, () => {
updateStatus("🔁 [LiveKit] Reconnected");
})
.on(LivekitClient.RoomEvent.Disconnected, (reason) => {
updateStatus("❌ [LiveKit] Disconnected: " + reason);
})
.on(LivekitClient.RoomEvent.ConnectionStateChanged, (state) => {
updateStatus(`🔄 [LiveKit] state → ${state}`);
});
// Handle room events
room.on(LivekitClient.RoomEvent.DataReceived, (message) => {
const data = new TextDecoder().decode(message);
console.log("Room message:", JSON.parse(data));
});
// Handle media streams
mediaStream = new MediaStream();
room.on(LivekitClient.RoomEvent.TrackSubscribed, (track) => {
if (track.kind === "video" || track.kind === "audio") {
mediaStream.addTrack(track.mediaStreamTrack);
if (
mediaStream.getVideoTracks().length > 0 &&
mediaStream.getAudioTracks().length > 0
) {
mediaElement.srcObject = mediaStream;
mediaElement.autoplay = true;
//mediaElement.playsInline = true;
updateStatus("Media stream ready");
updateStatus(`🎬 Subscribed: ${track.kind}`);
}
}
});
// connect the vide lip-sync room
updateStatus("🔗 Connecting to LiveKit room…");
await room.connect(sessionInfo.url, sessionInfo.access_token);
updateStatus("✅ Connected to LiveKit room");
// connect the audio lip‑sync websocket
await connectWebSocket(sessionInfo.session_id, sessionInfo.session_token);
document.querySelector("#startBtn").disabled = true;
updateStatus("🚀 Session ready — send text to talk!");
} catch (err) {
console.error(err);
updateStatus(`❌ Error: ${err.message}`);
}
}
< /code>
У кого -нибудь столкнулся с аналогичной проблемой? Правильно синхронизируйте.json={
"version": "v2",
"avatar_id": "Tyler-insuit-20220721",
"voice": {"voice_id": "f5a3cb4edbfc4d37b5614ce118be7bc8",
"rate":1.0},
"quality": "high",
"video_encoding": "H264",
},
Подробнее здесь: https://stackoverflow.com/questions/797 ... nsistently