BlastLIVE SDK

BLAST LIVE

Phiên live tiếp theo bắt đầu từ đây.

Kiểm tra thiết bị, bắt đầu phát và mời mọi người tham gia.

Hướng dẫn tích hợp ↓
  1. 1Chuẩn bị
  2. 2Studio
  3. 3Đang live
  4. 4Hoàn tất

Kết nối phiên của bạn

SDK chưa kết nối

Token chỉ được giữ trong bộ nhớ của phiên này.

Xem trước camera

OFFLINE00:00
Sẵn sàng lên sóng?Bật xem trước để kiểm tra camera và microphone.

Phiên live —

Trạng thái phiên

Chưa kết nối

Demo live chưa được cấu hình trên môi trường này.

TRƯỚC KHI LÊN SÓNG

Chuẩn bị phiên live

Đặt tên phiên và kiểm tra hình ảnh, âm thanh trước khi vào studio.

  • ○ Camera và microphone
  • ○ Kết nối SDK

Bấm Kiểm tra camera ở khung bên cạnh.

Bạn chưa phát live ở bước này.

Chat trong phiên live

Chưa kết nối

Nhắn tin cùng những người đang xem.

    Chat sẽ kết nối khi bạn bắt đầu live.

    Hướng dẫn tích hợp SDK

    01 / INTEGRATION

    Khởi tạo một lần. Bắt đầu live.

    Browser · TypeScript
    1

    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.77
    2

    Cấp quyền từ backend

    Backend ứ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.

    3

    Chuẩn bị trình duyệt

    Chrome desktop, HTTPS hoặc loopback, camera/mic. Trả header COOP same-origin và COEP require-corp; WASM cần MIME đúng.

    publisher.ts
    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

    Gửi và nhận tin nhắn trong phiên live

    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().

    Backend cần cung cấp quyền chat. 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.
    chat.ts · sau publisher.start()
    // 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.