diff --git a/bin/build-player.js b/bin/build-player.js
index cf2fc78d..194ef71c 100755
--- a/bin/build-player.js
+++ b/bin/build-player.js
@@ -6,25 +6,28 @@ var path = require('path');
var order = [
'base.coffee',
+
+ 'dailymotion.coffee',
+ 'peertube.coffee',
+ 'soundcloud.coffee',
+ 'twitch.coffee',
'vimeo.coffee',
'youtube.coffee',
- 'dailymotion.coffee',
- 'videojs.coffee',
+
'playerjs.coffee',
- 'streamable.coffee',
- 'gdrive-player.coffee',
- 'raw-file.coffee',
- 'soundcloud.coffee',
+ 'iframechild.coffee',
+ 'odysee.coffee',
+ 'streamable.coffee',
'embed.coffee',
- 'twitch.coffee',
- 'livestream.com.coffee',
- 'custom-embed.coffee',
- 'rtmp.coffee',
- 'hls.coffee',
- 'twitchclip.coffee',
- 'peertube.coffee',
- 'iframechild.coffee',
- 'odysee.coffee',
+ 'custom-embed.coffee',
+ 'livestream.com.coffee',
+ 'twitchclip.coffee',
+ 'videojs.coffee',
+ 'gdrive-player.coffee',
+ 'hls.coffee',
+ 'raw-file.coffee',
+ 'rtmp.coffee',
+
'update.coffee'
];
diff --git a/player/iframechild.coffee b/player/iframechild.coffee
index 1d46b9aa..140c9c59 100644
--- a/player/iframechild.coffee
+++ b/player/iframechild.coffee
@@ -1,9 +1,9 @@
-window.IframeChild = class IframeChild extends Player
+window.IframeChild = class IframeChild extends PlayerJSPlayer
constructor: (data) ->
if not (this instanceof IframeChild)
return new IframeChild(data)
- @load(data)
+ super(data)
load: (data) ->
@setMediaProperties(data)
@@ -17,40 +17,11 @@ window.IframeChild = class IframeChild extends Player
)
removeOld(iframe)
- @setupframe(iframe[0], data)
-
- @player = new playerjs.Player(iframe[0])
- @player.on('ready', =>
- @player.on('error', (error) =>
- console.error('PlayerJS error', error.stack)
- )
- @player.on('ended', ->
- # Streamable seems to not implement this since it loops
- # gotta use the timeupdate hack below
- if CLIENT.leader
- socket.emit('playNext')
- )
- @player.on('play', ->
- @paused = false
- if CLIENT.leader
- sendVideoUpdate()
- )
- @player.on('pause', ->
- @paused = true
- if CLIENT.leader
- sendVideoUpdate()
- )
-
- @player.setVolume(VOLUME * 100)
-
- if not @paused
- @player.play()
-
- @ready = true
- )
+ @setupFrame(iframe[0], data)
+ @setupPlayer(iframe[0])
)
- setupframe: (iframe, data) ->
+ setupFrame: (iframe, data) ->
iframe.addEventListener('load', =>
iframe.contentWindow.VOLUME = VOLUME;
iframe.contentWindow.loadMediaPlayer(Object.assign({}, data, { type: 'cm' } ))
@@ -59,35 +30,3 @@ window.IframeChild = class IframeChild extends Player
adapter.ready()
typeof data?.meta?.thumbnail == 'string' and iframe.contentWindow.PLAYER.player.poster(data.meta.thumbnail)
)
-
- play: ->
- @paused = false
- if @player and @ready
- @player.play()
-
- pause: ->
- @paused = true
- if @player and @ready
- @player.pause()
-
- seekTo: (time) ->
- if @player and @ready
- @player.setCurrentTime(time)
-
- setVolume: (volume) ->
- if @player and @ready
- @player.setVolume(volume * 100)
-
- getTime: (cb) ->
- if @player and @ready
- @player.getCurrentTime(cb)
- else
- cb(0)
-
- getVolume: (cb) ->
- if @player and @ready
- @player.getVolume((volume) ->
- cb(volume / 100)
- )
- else
- cb(VOLUME)
diff --git a/player/odysee.coffee b/player/odysee.coffee
index 3babd3b8..71031a89 100644
--- a/player/odysee.coffee
+++ b/player/odysee.coffee
@@ -1,13 +1,13 @@
-window.OdyseePlayer = class OdyseePlayer extends Player
+window.OdyseePlayer = class OdyseePlayer extends PlayerJSPlayer
constructor: (data) ->
if not (this instanceof OdyseePlayer)
return new OdyseePlayer(data)
- @load(data)
+ super(data)
load: (data) ->
- @setMediaProperties(data)
@ready = false
+ @setMediaProperties(data)
waitUntilDefined(window, 'playerjs', =>
iframe = $('')
@@ -17,64 +17,5 @@ window.OdyseePlayer = class OdyseePlayer extends Player
)
removeOld(iframe)
-
- @player = new playerjs.Player(iframe[0])
- @player.on('ready', =>
- @player.on('error', (error) =>
- console.error('PlayerJS error', error.stack)
- )
- @player.on('ended', ->
- if CLIENT.leader
- socket.emit('playNext')
- )
- @player.on('play', ->
- @paused = false
- if CLIENT.leader
- sendVideoUpdate()
- )
- @player.on('pause', ->
- @paused = true
- if CLIENT.leader
- sendVideoUpdate()
- )
-
- @player.setVolume(VOLUME * 100)
-
- if not @paused
- @player.play()
-
- @ready = true
- )
+ @setupPlayer(iframe[0], data)
)
-
- play: ->
- @paused = false
- if @player and @ready
- @player.play()
-
- pause: ->
- @paused = true
- if @player and @ready
- @player.pause()
-
- seekTo: (time) ->
- if @player and @ready
- @player.setCurrentTime(time)
-
- setVolume: (volume) ->
- if @player and @ready
- @player.setVolume(volume * 100)
-
- getTime: (cb) ->
- if @player and @ready
- @player.getCurrentTime(cb)
- else
- cb(0)
-
- getVolume: (cb) ->
- if @player and @ready
- @player.getVolume((volume) ->
- cb(volume / 100)
- )
- else
- cb(VOLUME)
diff --git a/player/playerjs.coffee b/player/playerjs.coffee
index 550a4dce..114f0faf 100644
--- a/player/playerjs.coffee
+++ b/player/playerjs.coffee
@@ -8,55 +8,48 @@ window.PlayerJSPlayer = class PlayerJSPlayer extends Player
load: (data) ->
@setMediaProperties(data)
@ready = false
- @finishing = false
if not data.meta.playerjs
throw new Error('Invalid input: missing meta.playerjs')
waitUntilDefined(window, 'playerjs', =>
iframe = $('')
- .attr(src: data.meta.playerjs.src)
+ .attr(
+ src: data.meta.playerjs.src
+ allow: 'autoplay; fullscreen'
+ )
removeOld(iframe)
+ @setupPlayer(iframe[0])
+ )
- @player = new playerjs.Player(iframe[0])
- @player.on('ready', =>
- @player.on('error', (error) =>
- console.error('PlayerJS error', error.stack)
- )
- @player.on('ended', ->
- # Streamable seems to not implement this since it loops
- # gotta use the timeupdate hack below
- if CLIENT.leader
- socket.emit('playNext')
- )
- @player.on('timeupdate', (time) =>
- if time.duration - time.seconds < 1 and not @finishing
- setTimeout(=>
- if CLIENT.leader
- socket.emit('playNext')
- @pause()
- , (time.duration - time.seconds) * 1000)
- @finishing = true
- )
- @player.on('play', ->
- @paused = false
- if CLIENT.leader
- sendVideoUpdate()
- )
- @player.on('pause', ->
- @paused = true
- if CLIENT.leader
- sendVideoUpdate()
- )
-
- @player.setVolume(VOLUME * 100)
-
- if not @paused
- @player.play()
-
- @ready = true
+ setupPlayer: (iframe) ->
+ @player = new playerjs.Player(iframe)
+ @player.on('ready', =>
+ @player.on('error', (error) =>
+ console.error('PlayerJS error', error.stack)
)
+ @player.on('ended', ->
+ if CLIENT.leader
+ socket.emit('playNext')
+ )
+ @player.on('play', ->
+ @paused = false
+ if CLIENT.leader
+ sendVideoUpdate()
+ )
+ @player.on('pause', ->
+ @paused = true
+ if CLIENT.leader
+ sendVideoUpdate()
+ )
+
+ @player.setVolume(VOLUME * 100)
+
+ if not @paused
+ @player.play()
+
+ @ready = true
)
play: ->
diff --git a/player/streamable.coffee b/player/streamable.coffee
index c7f89fcf..b4bbcff3 100644
--- a/player/streamable.coffee
+++ b/player/streamable.coffee
@@ -6,7 +6,30 @@ window.StreamablePlayer = class StreamablePlayer extends PlayerJSPlayer
super(data)
load: (data) ->
- data.meta.playerjs =
- src: "https://streamable.com/e/#{data.id}"
+ @ready = false
+ @finishing = false
+ @setMediaProperties(data)
- super(data)
+ waitUntilDefined(window, 'playerjs', =>
+ iframe = $('')
+ .attr(
+ src: "https://streamable.com/e/#{data.id}"
+ allow: 'autoplay; fullscreen'
+ )
+
+ removeOld(iframe)
+ @setupPlayer(iframe[0])
+ @player.on('ready', =>
+ # Streamable does not implement ended event since it loops
+ # gotta use a timeupdate hack
+ @player.on('timeupdate', (time) =>
+ if time.duration - time.seconds < 1 and not @finishing
+ setTimeout(=>
+ if CLIENT.leader
+ socket.emit('playNext')
+ @pause()
+ , (time.duration - time.seconds) * 1000)
+ @finishing = true
+ )
+ )
+ )