BBBStream

Hướng dẫn

Cách dùng BBStream — từ tạo thư viện đến nhúng video vào website

🚀 Bắt đầu nhanh (5 phút)

1
1. Tạo thư viện đầu tiên

Vào trang Thư viện → bấm 'Tạo thư viện' → đặt tên (vd: 'Khóa học của tôi'). Hệ thống tự sinh API Key + Webhook Secret — LƯU NGAY vì chỉ hiện 1 lần.

2
2. Dán API Key vào dashboard

Vào thư viện vừa tạo → tab Cài đặt → ô AccessKey → dán Key vừa copy → bấm Lưu. Key này lưu trong trình duyệt, không bao giờ gửi lên server BBStream.

3
3. Upload video

Tab Video → bấm 'Tải video lên' → kéo thả file MP4/MOV (max 5GB) → đặt tiêu đề → upload. Hệ thống tự transcode HLS 480p/720p/1080p (~10-30s tùy độ dài).

4
4. Lấy mã nhúng

Khi video Sẵn sàng → click vào video → tab Embed → tùy chỉnh options (Autoplay/Loop/...) → Copy iframe HTML → dán vào website của bạn.

🎬 Tính năng video

1
Thumbnail picker

BBStream tự cắt 6 frame ở các thời điểm khác nhau. Click chọn 1 frame ưng ý làm ảnh đại diện, hoặc upload ảnh tùy chỉnh.

2
Chapters / Chương

Chia video dài thành chương (timestamp + tên). Player hiện markers trên seek bar, học viên click jump nhanh.

3
Captions / Phụ đề

Upload file .vtt nhiều ngôn ngữ. Player tự hiện menu chọn caption (browser native UI).

4
Collections

Gom video theo chủ đề/chương. Tổ chức 30+ video không bị rối.

5
Stats

Theo dõi lượt xem, băng thông tiêu thụ theo ngày. Biểu đồ 30 ngày + raw data.

🔒 Bảo mật

1
Signed URL

Mỗi link nhúng có token HMAC + thời hạn (mặc định 1h). Sau đó hết hạn — không thể share lậu.

2
Domain whitelist

Cài đặt 'Allowed referers' → chỉ website của bạn được nhúng iframe. Domain khác copy iframe code = 403.

3
Rotate API Key

Mất API Key? Vào thư viện → Rotate → key cũ ngừng hoạt động ngay, nhận key mới. Cập nhật cho mọi client đang dùng.

🔌 Tích hợp với app

1
Server-side: Sign URL

Mỗi lần render trang chứa video, app gọi POST /library/<lib>/videos/<vid>/sign với header AccessKey + body { ttlSeconds: 3600 }. Trả về iframeHtml để render.

2
Webhooks

Cấu hình webhookUrl. Khi video.ready, BBStream POST event tới URL với HMAC signature → app tự update state (vd: lesson.video_status=ready).

3
Stats API

GET /library/<lib>/stats trả tổng quan + top videos. GET /library/<lib>/videos/<vid>/stats trả timeseries từng video.

🎮 Player API — điều khiển iframe từ parent

1
Gửi lệnh

iframe.contentWindow.postMessage({ source: 'bbstream', cmd: 'play' }, '*'). Lệnh: play, pause, togglePlay, seek (arg=seconds), seekPercent (arg=0..1), setMuted, setVolume, setPlaybackRate, requestFullscreen, exitFullscreen, getState.

2
Nhận events

window.addEventListener('message', e => { if (e.data?.source==='bbstream') console.log(e.data.event, e.data) }). Events: ready, play, pause, ended, waiting, timeupdate (250ms throttle), volumechange, ratechange, state, error.

3
Use case

LMS theo dõi tiến độ học (timeupdate.percent), nút Next Lesson tự bấm khi 'ended', đồng bộ play giữa nhiều iframe — đều làm được mà không cần đụng vào player.

📚 API Reference đầy đủ

Chi tiết tất cả endpoint, payload, response — xem file docs/API.md trong repo BBStream.

💡 Tip: dùng curl để test API trước khi tích hợp vào code thật. Mọi endpoint đều có ví dụ trong README.

💬 Cần hỗ trợ?

BBStream là sản phẩm self-hosted của BlueBolt Software. Nếu gặp issue, liên hệ team admin hoặc check log container bbstream-api /bbstream-worker trên VPS.