Kontrol & Event Player (JavaScript Bridge)
Panduan mengontrol video player, melakukan jump durasi (seek), dan mendeteksi event start, pause, timeupdate, serta selesai (ended) via postMessage untuk integrasi LMS dan website kursus.
DeweStream menyediakan antarmuka komunikasi dua arah berbasis peramban bernama Embed Bridge. Melalui antarmuka ini, halaman website atau platform kursus online (Learning Management System / LMS) tempat video disematkan dapat berinteraksi langsung dengan iframe video player DeweStream secara aman, ringan, dan tanpa memerlukan library eksternal tambahan.
Fitur ini dirancang khusus bagi pemilik website atau pengembang aplikasi yang ingin:
- Melacak progres belajar siswa: Mengetahui detik berapa yang sedang ditonton secara berkala.
- Mengaktifkan tombol penyelesaian materi secara otomatis: Mengetahui kapan siswa selesai menonton video hingga tuntas (
ended). - Melanjutkan pemutaran (Resume Playback): Mengembalikan siswa ke menit terakhir saat mereka membuka kembali modul pelajaran.
- Membuat daftar bab / timestamp eksternal: Menyediakan tombol atau daftar isi di luar bingkai video yang saat diklik langsung melompat (duration jump) ke menit tertentu.
Prinsip Keamanan & Prasyarat
Embed Bridge memanfaatkan API standar peramban window.postMessage. Untuk mencegah pembajakan dan kebocoran data pemutaran:
- Origin Verification: Player DeweStream hanya akan memproses perintah jika pesan dikirimkan oleh jendela induk (
window.parent) dan berasal dari alamat domain (origin) yang diizinkan sesuai aturan Domain yang Diizinkan. - Target Origin Ketat: Jangan pernah menggunakan tanda bintang (
*) sebagai target pengirimanpostMessage. Selalu tentukan origin player DeweStream secara eksplisit (misalnyahttps://app.dewe.stream). - Versi Protokol: Semua komunikasi pesan menggunakan nomor versi kontrak terstruktur (
version: 1).
1. Mendeteksi Event dari Player (Outbound Events)
Saat video dimuat dan diputar di dalam iframe, player DeweStream secara berkala memancarkan data status ke halaman website induk Anda. Anda dapat menangkap data tersebut menggunakan pendengar event (event listener) pada jendela peramban.
Struktur Pesan dari Player
Setiap pesan yang dipancarkan oleh player memiliki struktur data JSON berikut:
Jenis-Jenis Event
dewe-stream:ready: Dipancarkan satu kali segera setelah metadata video (durasi dan daftar bab) berhasil dimuat. Ini adalah momen yang tepat untuk mengecek riwayat tontonan siswa dan melompatkan posisi video (resume playback).dewe-stream:state: Dipancarkan setiap kali terjadi perubahan status pemutaran video, meliputi:- Mulai / Memutar (Play): Nilai
paused: falsedanended: false. JikacurrentTimebernilai 0, berarti video baru pertama kali dimulai. - Jeda (Pause): Nilai
paused: truedanended: false. - Selesai (Ended): Nilai
ended: true. - Selesai Melompat (Seeked): Nilai waktu
currentTimetelah berpindah ke posisi baru.
- Mulai / Memutar (Play): Nilai
dewe-stream:timeupdate: Dipancarkan secara kontinu mengikuti pemutaran video (beberapa kali per detik). Berisi nilaicurrentTimeterbaru. Disarankan menggunakan teknik debounce (misalnya menyimpan posisi tiap 10–15 detik) jika Anda mencatat progres ke database server Anda.
2. Mengontrol Player (Inbound Seek Command)
Untuk memerintahkan player melompat ke menit tertentu (seek / duration jump), kirimkan objek perintah melalui postMessage ke contentWindow milik elemen iframe:
seconds(Wajib): Posisi detik tujuan pemutaran. Jika detik yang diminta melebihi durasi video, player otomatis membatasi ke durasi maksimal video.play(Opsional): Jika diisitrue, player akan otomatis mencoba melanjutkan pemutaran. Aturan autoplay peramban tetap berlaku jika pengguna belum pernah berinteraksi dengan video.
3. Contoh Implementasi Praktis
Berikut adalah contoh kode HTML dan JavaScript siap pakai yang menggabungkan kontrol lompat durasi dan pemantauan status video untuk kebutuhan LMS.
4. Rekomendasi Alur Integrasi LMS
Untuk memastikan pengalaman belajar siswa yang mulus:
- Gunakan
ended: truesebagai Tolok Ukur Penyelesaian: Jangan membandingkan kesetaraan desimalcurrentTime === durationkarena perbedaan presisi peramban dapat menyebabkan selisih beberapa milidetik. Gunakan selalu kondisidata.ended === truedari eventdewe-stream:state. - Penyimpanan Progres Berkala:
Hindari mengirim request HTTP ke server Anda di setiap event
timeupdate. Simpan waktu terakhir ke variabel lokal, dan kirimkan rekaman progres ke server secara berkala (misal setiap 10–15 detik) serta saat event jeda (pause) atau saat siswa menutup halaman (pagehide). - Resume Cerdas: Jika posisi terakhir siswa tersimpan di detik-detik paling akhir video (misalnya 3 detik sebelum selesai), lakukan resume beberapa detik lebih awal agar siswa tetap dapat melihat akhir video dan memicu status selesai secara natural.
Panduan Terkait
Last updated Oct 20, 2026