Replace Twitch.TV player
Replaced the flash player with their HTML5 API. This also lays the groundwork for VOD playback.
This commit is contained in:
parent
e17dac58fd
commit
d821fc6ccd
3 changed files with 219 additions and 45 deletions
|
|
@ -1,29 +1,91 @@
|
|||
window.twitchEventCallback = (events) ->
|
||||
if not (PLAYER instanceof TwitchPlayer)
|
||||
return false
|
||||
|
||||
events.forEach((event) ->
|
||||
if event.event == 'playerInit'
|
||||
PLAYER.twitch.unmute()
|
||||
PLAYER.twitch.ready = true
|
||||
)
|
||||
|
||||
window.TwitchPlayer = class TwitchPlayer extends EmbedPlayer
|
||||
window.TwitchPlayer = class TwitchPlayer extends Player
|
||||
constructor: (data) ->
|
||||
if not (this instanceof TwitchPlayer)
|
||||
return new TwitchPlayer(data)
|
||||
|
||||
@load(data)
|
||||
@setMediaProperties(data)
|
||||
waitUntilDefined(window, 'Twitch', =>
|
||||
waitUntilDefined(Twitch, 'Player', =>
|
||||
@init(data)
|
||||
)
|
||||
)
|
||||
|
||||
init: (data) ->
|
||||
removeOld()
|
||||
options =
|
||||
channel: data.id
|
||||
@twitch = new Twitch.Player('ytapiplayer', options)
|
||||
@twitch.addEventListener(Twitch.Player.READY, =>
|
||||
@setVolume(VOLUME)
|
||||
@twitch.setQuality(@mapQuality(USEROPTS.default_quality))
|
||||
@twitch.addEventListener(Twitch.Player.PLAY, =>
|
||||
if CLIENT.leader
|
||||
sendVideoUpdate()
|
||||
)
|
||||
@twitch.addEventListener(Twitch.Player.PAUSE, =>
|
||||
if CLIENT.leader
|
||||
sendVideoUpdate()
|
||||
)
|
||||
@twitch.addEventListener(Twitch.Player.ENDED, =>
|
||||
if CLIENT.leader
|
||||
socket.emit('playNext')
|
||||
)
|
||||
)
|
||||
|
||||
load: (data) ->
|
||||
data.meta.embed =
|
||||
src: '//www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf'
|
||||
tag: 'object'
|
||||
params:
|
||||
flashvars: "embed=1&\
|
||||
hostname=localhost&\
|
||||
channel=#{data.id}&
|
||||
eventsCallback=twitchEventCallback&\
|
||||
auto_play=true&\
|
||||
start_volume=#{Math.floor(VOLUME * 100)}"
|
||||
super(data)
|
||||
@setMediaProperties(data)
|
||||
try
|
||||
@twitch.setChannel(data.id)
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
pause: ->
|
||||
try
|
||||
@twitch.pause()
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
play: ->
|
||||
try
|
||||
@twitch.play()
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
seekTo: (time) ->
|
||||
try
|
||||
@twitch.seek(time)
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
getTime: (cb) ->
|
||||
try
|
||||
cb(@twitch.getVolume())
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
setVolume: (volume) ->
|
||||
try
|
||||
@twitch.setVolume(volume)
|
||||
if volume > 0
|
||||
@twitch.setMuted(false)
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
getVolume: (cb) ->
|
||||
try
|
||||
if @twitch.isPaused()
|
||||
cb(0)
|
||||
else
|
||||
cb(@twitch.getVolume())
|
||||
catch error
|
||||
console.error(error)
|
||||
|
||||
mapQuality: (quality) ->
|
||||
switch String(quality)
|
||||
when '1080' then 'chunked'
|
||||
when '720' then 'high'
|
||||
when '480' then 'medium'
|
||||
when '360' then 'low'
|
||||
when '240' then 'mobile'
|
||||
when 'best' then 'chunked'
|
||||
else ''
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue