Соединение с комнатой HeyGen Livekit не работает постоянноHtml

Программисты Html
Ответить
Anonymous
 Соединение с комнатой HeyGen Livekit не работает постоянно

Сообщение Anonymous »

У меня возникла проблема при запуске интерактивного аватара HeyGen, который использует WebSockets для аудио и LiveKit для синхронизации видео. Похоже, проблема связана с подключением к комнате LiveKit. Иногда он подключается и работает правильно, иногда запускается, а затем зависает, и большую часть времени видео загружается, но не отвечает на отправляемые мной текстовые запросы.
Я подозреваю, что проблема связана с тем, как соединения WebSocket и LiveKit обрабатываются параллельно.
Все сообщения отладки указывают на то, что соединения успешны — я вижу, что события комнаты протекают нормально, а журналы подтверждают, что комната LiveKit правильно подключена. Однако, несмотря на эти положительные показатели, видеопоток периодически зависает без всякого предупреждения. Похоже, что соединение инициализируется правильно, но затем прекращает обновление или синхронизацию после запуска.
Сейчас я создаю облегченный прототип, используя JavaScript, встроенный непосредственно в HTML. Я тщательно просмотрел документацию HeyGen, но, к сожалению, четких указаний по решению этой конкретной проблемы нет. Кроме того, пример кода в документации выглядит некорректным: предоставленный аватар больше не доступен, и пример не работает успешно.
Я считаю, что проблема может возникнуть в этой строке:

Код: Выделить всё

await room.connect(sessionInfo.url, sessionInfo.access_token);
Соединение кажется нормальным (в журналах консоли отображаются сообщения об успешном подключении), но по какой-то причине после этого видеоанимация становится нестабильной.
Вот мой фрагмент кода:

Код: Выделить всё

 // ------------------------------------------------------
// 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}`);
}
}
Кто-нибудь сталкивался с подобной проблемой?
Я пробовал практически все — менять аватары, переключать голоса и настраивать различные параметры — но все равно сталкиваюсь с той же проблемой: видео зависает.
Аудиопоток, поступающий через соединение WebSocket, работает стабильно, но видео через комнату LiveKit нестабильно и иногда зависает или не синхронизируется должным образом.
Вот мои текущие настройки подключения:

Код: Выделить всё

json={
"version": "v2",
"avatar_id": "Tyler-insuit-20220721",
"voice": {"voice_id": "f5a3cb4edbfc4d37b5614ce118be7bc8",
"rate":1.0},
"quality": "high",
"video_encoding": "H264",
},
Моя учетная запись Heygen API pro с более чем 90 непогашенными кредитами.

Подробнее здесь: https://stackoverflow.com/questions/797 ... nsistently
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»