Shaka Player adalah perpustakaan JavaScript sumber terbuka untuk media adaptif. Ia memainkan format media adaptif (seperti DASH, HLS dan MSS) di browser, tanpa menggunakan plugin atau Flash. Sebaliknya, Shaka Player menggunakan Standar Web Terbuka Ekstensi MediaSource dan Ekstensi Media Terenkripsi.
Shaka Player juga mendukung penyimpanan offline dan pemutaran media menggunakan IndexedDB. Konten dapat disimpan di browser apa pun. Penyimpanan lisensi bergantung pada dukungan browser.
Tujuan utama kami adalah mempermudah streaming video dan audio dengan kecepatan bit adaptif menggunakan teknologi browser modern. Kami mencoba menjaga perpustakaan tetap ringan, sederhana, dan bebas dari ketergantungan pihak ketiga. Semua yang Anda perlukan untuk membangun dan menerapkan ada di sumbernya.
Untuk detail tentang apa yang akan terjadi selanjutnya, lihat peta jalan pengembangan kami.
Cabang yang dipelihara
Lihat cabang yang dikelola.md untuk daftar terkini cabang Shaka Player yang dikelola.
Matriks dukungan platform dan browser
Peramban | jendela | Mac | Linux | Android | iOS >= 9 | iOS >= 17.1 | iPadOS >= 13 | ChromeOS | Lainnya |
---|
krom¹ | Y | Y | Y | Y | Warga asli | Warga asli | Warga asli | Y | - |
Firefox¹ | Y | Y | Y | belum teruji⁵ | Warga asli | Warga asli | Warga asli | - | - |
Tepi¹ | Y | - | - | - | - | - | - | - | - |
Tepi Kromium | Y | Y | Y | belum teruji⁵ | Warga asli | Warga asli | Warga asli | - | - |
YAITU | N | - | - | - | - | - | - | - | - |
Safari¹ | - | Y | - | - | Warga asli | Y | Y | - | - |
Opera¹ | Y | Y | Y | belum teruji⁵ | Warga asli | - | - | - | - |
Chromecast². | - | - | - | - | - | - | - | - | Y |
Tizen TV³ | - | - | - | - | - | - | - | - | Y |
WebOS⁶ | - | - | - | - | - | - | - | - | Y |
Hisense⁷ | - | - | - | - | - | - | - | - | Y |
Xbox Satu | - | - | - | - | - | - | - | - | Y |
Playstation 4⁷ | - | - | - | - | - | - | - | - | Y |
Playstation 5⁷ | - | - | - | - | - | - | - | - | Y |
CATATAN:
- ¹: Di macOS, hanya Safari 9+ yang didukung. Di iOS, hanya iOS 9+ yang didukung. Versi yang lebih lama akan ditolak.
- ²: Firmware Chromecast stabil terbaru telah diuji. Baik pengirim maupun penerima dapat diimplementasikan dengan Shaka Player.
- ³: Model Tizen 2017 diuji secara aktif dan didukung oleh tim Shaka Player. Model Tizen 2016 didukung komunitas dan belum kami uji.
- ⁵: Ini diharapkan berfungsi, tetapi tidak diuji secara aktif oleh tim Shaka Player.
- ⁶: Ini diharapkan berhasil, tetapi didukung oleh komunitas dan belum kami uji.
- Dukungan resmi untuk LG WebOS TV: #1330
- ⁷: Ini diharapkan berhasil, tetapi didukung oleh komunitas dan belum kami uji.
CATATAN untuk iOS dan iPadOS:
- Kami mendukung iOS 9+ melalui pemutar HLS asli Apple. Kami menyediakan API tingkat atas yang sama, tetapi kami hanya menyetel elemen
src
video ke manifes/media. Jadi kita bergantung pada browser yang mendukung manifes. - Karena Ekstensi MediaSource iPadOS 13 didukung
- Sejak iPadOS 17 dan iOS 17.1 ManagedMediaSource Extensions didukung
Matriks dukungan format manifes
Format | Video Sesuai Permintaan | Hidup | Peristiwa | Perekaman Sedang Berlangsung |
---|
BERJALAN | Y | Y | - | Y |
HLS | Y | Y | Y | - |
MSS | Y | - | - | - |
Anda juga dapat membuat plugin parser manifes untuk mendukung format manifes khusus.
fitur DASH
Fitur DASH yang didukung:
- Rekaman VOD, Langsung, dan Sedang Berlangsung (konten VOD dinamis)
- MPD@timeShiftBufferDepth untuk melihat ke belakang dalam streaming langsung
- Konten multi-periode (statis dan dinamis)
- Elemen Xlink (aktuasi=hanya onLoad, resolusi ke nol, konten cadangan)
- Segala bentuk info indeks segmen: SegmentBase@indexRange, SegmentTimeline, SegmentTemplate@duration, SegmentTemplate@index, SegmentList
- Manifes multi-codec/multi-kontainer (kami akan menegosiasikan dukungan dengan browser dan memilih yang terbaik)
- Konten terenkripsi (termasuk skema ContentProtection khusus, PSSH dalam manifes)
- Rotasi kunci
- Trek mode trik
- WebVTT dan TTML
- Keterangan CEA-608/708
- Varian multi-codec (pada platform dengan dukungan changeType)
- Rangkaian MPD
- Pembaruan Patch MPD untuk SegmentTemplate dengan $Nomor$ , SegmenTimeline dengan $Nomor$ dan SegmentTimeline dengan $Waktu$
Fitur DASH tidak didukung:
- Xlink dengan actuate=onRequest
- Manifes tanpa info segmen apa pun: #1088
- Beberapa trek mode trik untuk resolusi yang sama pada framerate atau bitrate yang berbeda-beda
- Skala waktu sangat besar sehingga stempel waktu tidak dapat direpresentasikan sebagai bilangan bulat dalam JavaScript (2^53): #1667
- Memodifikasi elemen dengan atribut @schemeIdUri melalui MPD Patch
- Dereferensi Xlink dengan MPD Patch
Fitur HLS
Fitur HLS yang didukung:
- Jenis VOD, Siaran Langsung, dan Acara
- Streaming berlatensi rendah dengan segmen parsial, petunjuk pramuat, pembaruan delta, dan memblokir pemuatan ulang daftar putar
- Pemegatan
- Dukungan ISO-BMFF / MP4 / CMAF
- Dukungan MPEG-2 TS
- WebVTT dan TTML
- Keterangan CEA-608/708
- Konten terenkripsi dengan PlayReady dan Widevine
- Konten terenkripsi dengan FairPlay (khusus Safari di macOS dan iOS 9+)
- Dukungan AES-128, AES-256 dan AES-256-CTR pada browser dengan dukungan Web Crypto API
- Dukungan SAMPLE-AES dan SAMPLE-AES-CTR (identitas) pada browser dengan dukungan ClearKey
- Rotasi kunci
- AAC mentah, MP3, AC-3 dan EC-3 (tanpa wadah MP4)
- Daftar putar I-frame saja (untuk permainan trik dan thumbnail)
- #EXT-X-IMAGE-STREAM-INF untuk thumbnail
- Pengantara
- Perubahan wadah selama pemutaran (misalnya: MP4 ke TS, atau AAC ke TS)
Fitur HLS tidak didukung:
- Atribut X-SNAP di interstisial
Tag HLS yang didukung
Untuk detail tentang format HLS dan arti tag ini, lihat https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
Tag Daftar Putar Multivarian
-
#EXT-X-STREAM-INF:
-
#EXT-X-MEDIA:
-
#EXT-X-IMAGE-STREAM-INF:
-
#EXT-XI-FRAME-STREAM-INF:
-
#EXT-X-SESSION-DATA:
-
#EXT-X-SESSION-KEY:
Pemilihan dan pramuat Sistem Kunci EME -
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-CONTENT-STEERING:
Pengarah Konten -
#EXT-X-DEFINE:
Substitusi Variabel (atribut NAME,VALUE,QUERYPARAM
)
Tag Daftar Putar Media
-
#EXTM3U
-
#EXTINF:,[]
-
#EXT-X-PLAYLIST-TYPE:
-
#EXT-X-ENDLIST
-
#EXT-X-MEDIA-SEQUENCE=
-
#EXT-X-TARGETDURATION=
-
#EXT-X-DISCONTINUITY
-
#EXT-X-DISCONTINUITY-SEQUENCE=
-
#EXT-X-BYTERANGE=[@]
-
#EXT-X-MAP:
-
#EXT-X-KEY:
( KEYFORMAT="identity",METHOD=SAMPLE-AES
hanya mendukung segmen MP4) -
#EXT-X-PROGRAM-DATE-TIME:
-
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-SERVER-CONTROL:
-
#EXT-X-PART-INF:PART-TARGET=
-
#EXT-X-PART:
-
#EXT-X-SKIP:
Daftar Putar Delta -
#EXT-X-DATERANGE:
Metadata -
#EXT-X-DEFINE:
Impor dan Substitusi Variabel (atribut NAME,VALUE,IMPORT,QUERYPARAM
) -
#EXT-X-GAP
-
#EXT-X-PRELOAD-HINT:
-
#EXT-X-BITRATE
Dukungan MPEG-5 Part2 LCEVC
Hanya didukung pada browser dengan dukungan Media Source Extensions SourceBuffer
Dukungan decoding LCEVC MPEG-5 Part2 (decoding disediakan oleh lcevc_dec.js, harus disertakan secara terpisah)
Dokumentasi integrasi: dokumen
Lebih lanjut tentang MPEG-5 Part2 LCEVC
fitur MSS
Fitur MSS yang didukung:
- VOD
- AAC dan H.264
- Konten terenkripsi (PlayReady)
- TTML/DFXP
- Hanya didukung dengan codem-isoboxer
Fitur MSS tidak didukung:
Matriks dukungan DRM
Peramban | Widevine | Mainkan Siap | Permainan Adil | ClearKey⁶ |
---|
krom¹ | Y | - | - | Y |
Firefox² | Y | - | - | Y |
Tepi³ | - | Y | - | - |
Tepi Kromium | Y | Y | - | Y |
Safari | - | - | Y | - |
Opera | Y | - | - | Y |
Chromecast | Y | Y | - | Y |
TV Tizen | Y | Y | - | Y |
WebOS⁷ | belum teruji⁷ | belum teruji⁷ | - | belum teruji⁷ |
Hisense⁷ | belum teruji⁷ | belum teruji⁷ | - | belum teruji⁷ |
Xbox Satu | - | Y | - | - |
Playstation 4⁷ | - | belum teruji⁷ | - | belum teruji⁷ |
Playstation 5⁷ | - | belum teruji⁷ | - | belum teruji⁷ |
Sistem DRM lain seharusnya dapat langsung berfungsi jika dapat dioperasikan dan mematuhi spesifikasi EME.
CATATAN:
- ¹: Hanya versi Chrome resmi yang berisi CDM Widevine. Chromium yang dibuat dari sumber tidak mendukung DRM.
- ²: DRM harus diaktifkan oleh pengguna. Saat pertama kali pengguna Firefox mengunjungi situs dengan media terenkripsi, pengguna akan diminta untuk mengaktifkan DRM.
- ³: PlayReady di Edge sepertinya tidak berfungsi pada VM atau melalui Remote Desktop.
- ⁶: ClearKey adalah alat yang berguna untuk debugging, dan tidak memberikan keamanan konten yang sebenarnya.
- ⁷: Ini diharapkan berhasil, tetapi didukung oleh komunitas dan belum kami uji.
Tampak | Widevine | Mainkan Siap | Permainan Adil | Kunci Jelas |
---|
BERJALAN | Y | Y | - | Y |
HLS | Y | Y | kamu ¹ | - |
MSS | - | Y | - | - |
CATATAN:
- ¹: Secara default, FairPlay ditangani menggunakan pemutar HLS asli Apple, saat menggunakan Safari. Namun kami mendukung FairPlay melalui MSE/EME. Lihat nilai konfigurasi
streaming.useNativeHlsForFairPlay
.
Wadah media dan dukungan subtitle
Shaka Pemain mendukung:
- ISO-BMFF / CMAF / MP4
- Tergantung pada dukungan browser untuk penampung melalui MediaSource
- Dapat mengurai kotak "sidx" untuk SegmentBase@indexRange dan SegmentTemplate@index DASH
- Dapat menemukan dan mengurai kotak "tfdt" untuk menemukan waktu mulai segmen di HLS
- Untuk MSS, diperlukan codem-isoboxer v0.3.7+
- WebM
- Tergantung pada dukungan browser untuk penampung melalui MediaSource
- Dapat mengurai elemen data isyarat untuk SegmentBase@indexRange dan SegmentTemplate@index DASH
- Tidak didukung di HLS
- MPEG-2TS
- Dapat diputar di browser apa pun yang mendukung MP4
- Dapat menemukan dan mengurai stempel waktu untuk menemukan waktu mulai segmen di HLS
- WebVTT
- Didukung dalam bentuk teks dan tertanam dalam MP4
- TTML
- Didukung dalam bentuk XML dan tertanam dalam MP4
- CEA-608
- Didukung tertanam dalam MP4 dan TS
- CEA-708
- Didukung tertanam di MP4 dan TS
- AAC mentah
- Didukung dalam wadah AAC mentah dan transmuxing ke AAC dalam wadah MP4 (tergantung pada dukungan browser melalui MediaSource).
- MP3 mentah
- Didukung dalam wadah MP3 mentah dan transmuxing ke MP3 dalam wadah MP4 (tergantung pada dukungan browser melalui MediaSource).
- AC-3 mentah
- Didukung dalam wadah AC-3 mentah dan transmuxing ke AC-3 dalam wadah MP4 (tergantung pada dukungan browser melalui MediaSource).
- EC-3 mentah
- Didukung dalam wadah EC-3 mentah dan transmuxing ke EC-3 dalam wadah MP4 (tergantung pada dukungan browser melalui MediaSource).
- SubRip (SRT)
- Lirik (LRC)
- SubStasiun Alfa (SSA, ASS)
- SubViewer (SBV)
Subtitle dirender oleh browser secara default. Aplikasi dapat membuat plugin tampilan teks untuk rendering pelanggan agar melampaui atribut yang didukung browser.
Dukungan transmuxer
Shaka Pemain mendukung:
- AAC mentah ke AAC dalam MP4
- MP3 mentah ke MP3 dalam MP4
- AC-3 mentah hingga AC-3 dalam MP4
- EC-3 mentah hingga EC-3 dalam MP4
- AAC di MPEG-2 TS ke AAC di MP4
- AC-3 di MPEG-2 TS hingga AC-3 di MP4
- EC-3 di MPEG-2 TS hingga EC-3 di MP4
- MP3 di MPEG-2 TS ke MP3 di MP4
- MP3 dalam MPEG-2 TS ke MP3 mentah
- Opus di MPEG-2 TS ke MP3 di MP4
- H.264 dalam MPEG-2 TS hingga H.264 dalam MP4
- H.265 dalam MPEG-2 TS hingga H.265 dalam MP4
- Konten yang dicampur dalam MPEG-2 TS dengan codec sebelumnya
Dukungan thumbnail
Shaka Pemain mendukung:
- Thumbnail DASH internal. Menggunakan Set Adaptasi Gambar IOP DASH-IF
- Thumbnail HLS internal. Menggunakan Daftar Putar Media Gambar HLS
- Thumbnail HLS internal. Menggunakan daftar putar I-frame saja dengan codec mjpg
- WebVTT eksternal dengan gambar/sprite (hanya untuk VoD)
Monetisasi dengan Iklan
Shaka Pemain mendukung:
- IMA SDK untuk Penyisipan Iklan Sisi Klien
- IMA DAI SDK untuk Penyisipan Iklan Sisi Server
- AWS MediaTailor untuk Sisi Klien
- AWS MediaTailor untuk Sisi Server
- Hamparan AWS MediaTailor
- Interstisial HLS
- Penyisipan Presentasi Media DASH (alternatif MPD)
- Pengantara Khusus
- Dukungan dasar VAST dan VMAP tanpa IMA (pemutaran tanpa pelacakan)
Dukungan Pengarah Konten
Shaka Player mendukung Pengarah Konten (v1) di DASH dan HLS.
Fitur Pengarah Konten yang didukung:
- TTL, jika tidak ada, nilai defaultnya adalah 300 detik.
- RELOAD-URI, jika hilang kami menggunakan url yang disediakan dalam manifes sebagai cadangan.
- Penggantian HOST hanya PRIORITAS JALAN
Fitur Pengarah Konten tidak didukung:
- PATHWAY-CLONES pengganti selain HOST.
dukungan VR
Shaka Player mendukung VR ketika:
- Konten secara otomatis diperlakukan sebagai VR jika memenuhi kriteria berikut:
- Manifes HLS atau DASH
- segmen fMP4
- Segmen init berisi kotak
prji
dan hfov
- Atau, jika diaktifkan secara manual melalui konfigurasi UI.
Mode VR yang didukung:
- Proyeksi persegi panjang dengan bidang pandang horizontal 360 derajat.
- Proyeksi peta kubus dengan bidang pandang horizontal 360 derajat.
CATATAN:
- VR hanya didukung untuk streaming jernih atau streaming HLS-AES. DRM mencegah akses ke piksel video untuk transformasi.
Dokumentasi & Tautan Penting
- Demo (sumber)
- Demo Malam
- Indeks demo
- dokumentasi API
- Tutorial
- Build yang dihosting di Perpustakaan yang Dihosting Google
- Dihosting dibangun di jsDelivr
- Peta jalan pembangunan
- Daftar pengumuman (bergabung untuk pengumuman dan survei yang jarang terjadi)
- Berlangganan rilis dengan mengikuti instruksi dari blog ini
Pertanyaan Umum
Untuk bantuan umum dan sebelum melaporkan bug apa pun, harap baca FAQ.
Berkontribusi
Jika Anda memiliki perbaikan atau perbaikan, kami akan dengan senang hati menerima kontribusi Anda. Silakan baca CONTRIBUTING.md untuk informasi lebih lanjut tentang proses yang kami ingin agar diikuti oleh kontributor.
Integrasi Kerangka
Tim Shaka tidak memiliki bandwidth dan pengalaman untuk memberikan panduan dan dukungan untuk mengintegrasikan Shaka Player dengan kerangka kerja tertentu, namun beberapa pengguna kami telah berhasil melakukannya dan membuat tutorial untuk membantu pemula lainnya.
Perpustakaan Shaka + ReactJS
- https://github.com/winoffrg/limeplay
Integrasi Shaka + ReactJS:
- https://github.com/matvp91/shaka-player-react
- https://github.com/amit08255/shaka-player-react-with-ui-config
Integrasi Shaka + Next.js:
- https://github.com/amit08255/shaka-player-react-with-ui-config/tree/master/nextjs-shaka-player
Integrasi Shaka + Vue.js:
- https://github.com/davidjamesherzog/shaka-player-vuejs
Integrasi Shaka + Nuxt.js:
- https://github.com/davidjamesherzog/shaka-player-nuxtjs
Integrasi Shaka + video.js:
- https://github.com/davidjamesherzog/videojs-shaka
Integrasi Shaka + Sudut:
- https://github.com/PatrickKalkman/shaka-player-angular
Jika Anda telah menerbitkan kode/tutorial Integrasi Shaka, silakan kirimkan PR untuk menambahkannya ke daftar ini, kami dengan senang hati akan menyetujuinya!