72 lines
1.4 KiB
JavaScript
72 lines
1.4 KiB
JavaScript
export function createPlayer({ onError } = {}) {
|
|
let nativePlayer = null
|
|
try {
|
|
// Available only after the native plugin is added in HBuilderX.
|
|
nativePlayer = uni.requireNativePlugin && uni.requireNativePlugin('SyncTV-VLC')
|
|
} catch (err) {
|
|
nativePlayer = null
|
|
}
|
|
|
|
return {
|
|
hasNative: !!nativePlayer,
|
|
|
|
open(source, server) {
|
|
const url = source.url && source.url.startsWith('/api/')
|
|
? server.replace(/\/$/, '') + source.url
|
|
: source.url
|
|
if (nativePlayer) {
|
|
nativePlayer.open({
|
|
url,
|
|
headers: source.headers || {},
|
|
username: source.username || '',
|
|
password: source.password || '',
|
|
isLive: !!source.isLive
|
|
})
|
|
}
|
|
return url
|
|
},
|
|
|
|
play() {
|
|
if (nativePlayer) {
|
|
nativePlayer.play()
|
|
return true
|
|
}
|
|
return false
|
|
},
|
|
|
|
pause() {
|
|
if (nativePlayer) {
|
|
nativePlayer.pause()
|
|
return true
|
|
}
|
|
return false
|
|
},
|
|
|
|
seek(positionMs) {
|
|
if (nativePlayer) {
|
|
nativePlayer.seek({ positionMs })
|
|
return true
|
|
}
|
|
return false
|
|
},
|
|
|
|
getPosition(callback) {
|
|
if (nativePlayer) {
|
|
nativePlayer.getPosition(callback)
|
|
return
|
|
}
|
|
callback({ positionMs: 0 })
|
|
},
|
|
|
|
release() {
|
|
if (nativePlayer) {
|
|
nativePlayer.release()
|
|
}
|
|
},
|
|
|
|
error(message) {
|
|
if (onError) onError(message)
|
|
}
|
|
}
|
|
}
|