@nusaplayer/hls
v1.0.0
Published
Hls plugin for NusaPlayer
Readme
@nusaplayer/hls
HLS plugin for NusaPlayer.
Install
npm i @nusaplayer/hls hls.js<script src="https://cdn.jsdelivr.net/npm/@nusaplayer/core@latest/dist/index.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@nusaplayer/hls@latest/dist/index.min.js"></script>
<div id="player"></div>
<script>
NusaPlayer.make('#player', {
source: {
src: 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8'
}
})
.use([NusaHls({ library: 'https://cdn.jsdelivr.net/npm/hls.js@latest/dist/hls.min.js' })])
.create()
</script>Quality / Audio / Subtitle defaults
NusaHls({
forceHLS: true,
defaultQuality(levels) {
let id = -1
for (let i = 0; i < levels.length; i++) {
if (levels[i].height <= 1080) id = i
}
return id
},
defaultAudio(tracks) {
for (const { lang, id } of tracks) {
if (lang == 'en' || lang.startsWith('en')) return id
}
return -1
},
defaultSubtitle(tracks) {
for (const { lang, id } of tracks) {
if (lang == 'en' || lang.startsWith('en')) return id
}
return -1
}
})Handle hls.js errors
NusaHls({
errorHandler(player, data) {
if (data.details == 'bufferAppendError') return
player.emit('error', {
...data,
message: data.type + ': ' + data.details
})
}
})DRM
NusaHls({
forceHLS: true,
config: {
emeEnabled: true,
drmSystems: {
'com.widevine.alpha': {
licenseUrl: 'https://widevine-proxy.appspot.com/proxy'
}
},
licenseXhrSetup(xhr) {
xhr.setRequestHeader('content-type', 'application/octet-stream')
xhr.setRequestHeader('Authorization', 'Bearer token')
}
}
})
player.context.hls.options.config = {
// ...
}