Cài package
Cài package private từ GitHub Packages, rồi copy toàn bộ dist/assets vào public/blast-live/. JS và assets phải cùng phiên bản.
npm install @luongducquyen/blast-live-sdk@0.4.77BLAST LIVE
Kiểm tra thiết bị, bắt đầu phát và mời mọi người tham gia.
Cảm ơn bạn đã live cùng Blast.
Phiên live —
Demo live chưa được cấu hình trên môi trường này.
TRƯỚC KHI LÊN SÓNG
Đặt tên phiên và kiểm tra hình ảnh, âm thanh trước khi vào studio.
Bấm Kiểm tra camera ở khung bên cạnh.
Bạn chưa phát live ở bước này.Nhắn tin cùng những người đang xem.
Chat sẽ kết nối khi bạn bắt đầu live.
01 / INTEGRATION
Cài package private từ GitHub Packages, rồi copy toàn bộ dist/assets vào public/blast-live/. JS và assets phải cùng phiên bản.
npm install @luongducquyen/blast-live-sdk@0.4.77Backend ứng dụng cấp quyền phát live cho người dùng. Chuẩn bị application bearer từ phiên đăng nhập để SDK kết nối.
Chrome desktop, HTTPS hoặc loopback, camera/mic. Trả header COOP same-origin và COEP require-corp; WASM cần MIME đúng.
import { BlastLive } from '@luongducquyen/blast-live-sdk';
const sdk = await BlastLive.create({
assetsBaseUrl: '/blast-live/',
runtime: {
development: false, allowLocalHttp: false,
frontendPort: 443,
consumerOrigin: 'https://api.example.com',
workerOrigin: 'https://control.example.com',
trustedRuntimeOrigins: ['https://media.example.com:4433'],
tls: { mode: 'system' },
},
});
await sdk.authenticate(applicationBearer);
// Gọi từ nút bấm của người dùng.
await sdk.publisher.start({
title: 'Hello, Blast', video: true, audio: true,
recordHls: false,
});
preview.muted = true;
preview.srcObject = sdk.publisher.preview();
await preview.play();
// Khi người dùng kết thúc phiên live.
await sdk.publisher.stop();
await sdk.destroy();03 / CHAT
Sau khi bắt đầu live, xin cấu hình chat từ backend cho đúng phiên và người tham gia. Kết nối bằng sdk.chat.connectChat(), nhận tin qua sự kiện message và gửi bằng sendMessage().
getChatOptionsFromYourBackend trong ví dụ là hàm bạn triển khai, không phải API có sẵn của SDK. Hàm trả về ConnectChatOptions: admission (ticket, endpoint, expiresAtMs, configRevision), scope (consumerId, projectId, sessionId, participantId, role), trustedOrigins và tls. Dùng thông tin do backend cấp; không tự tạo ticket ở trình duyệt. Các hàm render/show trong ví dụ là phần UI của ứng dụng.// Sau khi bắt đầu live: dùng cùng sdk, không tạo instance mới.
// Backend ứng dụng cấp ConnectChatOptions cho đúng session/participant.
// options gồm admission, scope, trustedOrigins và tls.
const options = await getChatOptionsFromYourBackend({
sessionId: sdk.state().publisher.sessionId,
participantId: sdk.state().publisher.participantId,
});
const offState = sdk.chat.on('state', state => {
sendButton.disabled = !state.canSend;
});
const offMessage = sdk.chat.on('message', event => {
if (event.type === 'chat.deleted' || event.deleted) {
removeMessage(event.messageId);
return;
}
// Hiển thị bằng textContent; không dùng innerHTML cho tin nhắn.
renderMessage(event.messageId, event.text);
});
const offError = sdk.chat.on('error', error => {
showChatError(error.code); // Chỉ cập nhật chat; live vẫn tiếp tục.
});
try {
await sdk.chat.connectChat(options);
} catch (error) {
showChatError(error); // Không dừng phiên live khi chat lỗi.
}
// Khi người dùng bấm Gửi, bắt cả lỗi và kết quả chưa xác định.
async function sendChat(text) {
try {
const result = await sdk.chat.sendMessage({
text, clientMessageId: crypto.randomUUID(),
});
if (result.state === 'accepted') {
markSent(result.clientMessageId);
} else if (result.state === 'unknown') {
// Giữ lại ID để người dùng thử lại; không gửi bằng ID mới.
showRetry(result.clientMessageId);
} else {
showChatError(result.code);
}
} catch (error) {
showChatError(error);
}
}
// Khi người dùng chọn thử lại tin chưa xác định:
// await sdk.chat.retryMessage(clientMessageId);
// Đóng chat khi không cần nữa; phiên live vẫn tiếp tục.
await sdk.chat.disconnectChat();
offState(); offMessage(); offError();
// Khi kết thúc cả phiên: publisher.stop() rồi sdk.destroy().Chỉ bật nút gửi khi state.canSend là true. Tin ở trạng thái unknown có thể đã được nhận: thử lại bằng cùng ID với retryMessage(). Đóng chat không kết thúc live. Demo phía trên hiện chỉ chạy publisher; đoạn code này hướng dẫn nối chat vào UI của bạn.