1
0
mirror of https://github.com/videojs/video.js.git synced 2024-11-28 08:58:46 +02:00

Merge branch 'stable'

Conflicts:
	dist/video-js/video-js.css
	dist/video-js/video-js.min.css
	dist/video-js/video-js.swf
	dist/video-js/video.dev.js
	dist/video-js/video.js
This commit is contained in:
Steve Heffernan 2014-08-14 16:32:26 -07:00
commit 342bdce748
19 changed files with 332 additions and 212 deletions

View File

@ -6,6 +6,9 @@ _(none)_
-------------------- --------------------
## 4.7.2 (2014-08-14)
* Fixed a case where timeupdate events were not firing, and fixed and issue with the Flash player version ([view](https://github.com/videojs/video.js/pull/1417))
## 4.7.1 (2014-08-06) ## 4.7.1 (2014-08-06)
* Fixed the broken bower.json config ([view](https://github.com/videojs/video.js/pull/1401)) * Fixed the broken bower.json config ([view](https://github.com/videojs/video.js/pull/1401))

View File

@ -1,7 +1,7 @@
{ {
"name": "video.js", "name": "video.js",
"description": "An HTML5 and Flash video player with a common API and skin for both.", "description": "An HTML5 and Flash video player with a common API and skin for both.",
"version": "4.7.1", "version": "4.7.2",
"main": [ "main": [
"dist/video-js/video.js", "dist/video-js/video.js",
"dist/video-js/video-js.css" "dist/video-js/video-js.css"

View File

@ -1,7 +1,7 @@
{ {
"name": "video.js", "name": "video.js",
"description": "An HTML5 and Flash video player with a common API and skin for both.", "description": "An HTML5 and Flash video player with a common API and skin for both.",
"version": "4.7.1", "version": "4.7.2",
"keywords": [ "keywords": [
"videojs", "videojs",
"html5", "html5",

View File

@ -345,7 +345,7 @@ _inherited from_: [src/js/component.js#L475](https://github.com/videojs/video.js
> keep the controls showing, but that shouldn't be an issue. A touch and hold on > keep the controls showing, but that shouldn't be an issue. A touch and hold on
> any controls will still keep the user active > any controls will still keep the user active
_inherited from_: [src/js/media/media.js#L45](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L45) _inherited from_: [src/js/media/media.js#L55](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L55)
--- ---
@ -406,7 +406,7 @@ _inherited from_: [src/js/component.js#L540](https://github.com/videojs/video.js
##### PARAMETERS: ##### PARAMETERS:
* __event__ * __event__
_inherited from_: [src/js/media/media.js#L132](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L132) _inherited from_: [src/js/media/media.js#L142](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L142)
--- ---
@ -414,7 +414,7 @@ _inherited from_: [src/js/media/media.js#L132](https://github.com/videojs/video.
> Handle a tap on the media element. By default it will toggle the user > Handle a tap on the media element. By default it will toggle the user
> activity state, which hides and shows the controls. > activity state, which hides and shows the controls.
_inherited from_: [src/js/media/media.js#L152](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L152) _inherited from_: [src/js/media/media.js#L162](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L162)
--- ---
@ -534,7 +534,7 @@ _inherited from_: [src/js/component.js#L683](https://github.com/videojs/video.js
> Remove the listeners used for click and tap controls. This is needed for > Remove the listeners used for click and tap controls. This is needed for
> toggling to controls disabled, where a tap/touch should do nothing. > toggling to controls disabled, where a tap/touch should do nothing.
_inherited from_: [src/js/media/media.js#L116](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L116) _inherited from_: [src/js/media/media.js#L126](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L126)
--- ---
@ -544,7 +544,7 @@ _inherited from_: [src/js/media/media.js#L116](https://github.com/videojs/video.
> Poster support for techs should be optional, so we don't want techs to > Poster support for techs should be optional, so we don't want techs to
> break if they don't have a way to set a poster. > break if they don't have a way to set a poster.
_inherited from_: [src/js/media/media.js#L162](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L162) _inherited from_: [src/js/media/media.js#L262](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L262)
--- ---

View File

@ -345,7 +345,7 @@ _inherited from_: [src/js/component.js#L475](https://github.com/videojs/video.js
> keep the controls showing, but that shouldn't be an issue. A touch and hold on > keep the controls showing, but that shouldn't be an issue. A touch and hold on
> any controls will still keep the user active > any controls will still keep the user active
_inherited from_: [src/js/media/media.js#L45](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L45) _inherited from_: [src/js/media/media.js#L55](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L55)
--- ---
@ -406,7 +406,7 @@ _inherited from_: [src/js/component.js#L540](https://github.com/videojs/video.js
##### PARAMETERS: ##### PARAMETERS:
* __event__ * __event__
_inherited from_: [src/js/media/media.js#L132](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L132) _inherited from_: [src/js/media/media.js#L142](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L142)
--- ---
@ -414,7 +414,7 @@ _inherited from_: [src/js/media/media.js#L132](https://github.com/videojs/video.
> Handle a tap on the media element. By default it will toggle the user > Handle a tap on the media element. By default it will toggle the user
> activity state, which hides and shows the controls. > activity state, which hides and shows the controls.
_inherited from_: [src/js/media/media.js#L152](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L152) _inherited from_: [src/js/media/media.js#L162](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L162)
--- ---
@ -534,7 +534,7 @@ _inherited from_: [src/js/component.js#L683](https://github.com/videojs/video.js
> Remove the listeners used for click and tap controls. This is needed for > Remove the listeners used for click and tap controls. This is needed for
> toggling to controls disabled, where a tap/touch should do nothing. > toggling to controls disabled, where a tap/touch should do nothing.
_inherited from_: [src/js/media/media.js#L116](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L116) _inherited from_: [src/js/media/media.js#L126](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L126)
--- ---
@ -544,7 +544,7 @@ _inherited from_: [src/js/media/media.js#L116](https://github.com/videojs/video.
> Poster support for techs should be optional, so we don't want techs to > Poster support for techs should be optional, so we don't want techs to
> break if they don't have a way to set a poster. > break if they don't have a way to set a poster.
_inherited from_: [src/js/media/media.js#L162](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L162) _inherited from_: [src/js/media/media.js#L262](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L262)
--- ---

View File

@ -345,7 +345,7 @@ _inherited from_: [src/js/component.js#L475](https://github.com/videojs/video.js
> keep the controls showing, but that shouldn't be an issue. A touch and hold on > keep the controls showing, but that shouldn't be an issue. A touch and hold on
> any controls will still keep the user active > any controls will still keep the user active
_defined in_: [src/js/media/media.js#L45](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L45) _defined in_: [src/js/media/media.js#L55](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L55)
--- ---
@ -406,7 +406,7 @@ _inherited from_: [src/js/component.js#L540](https://github.com/videojs/video.js
##### PARAMETERS: ##### PARAMETERS:
* __event__ * __event__
_defined in_: [src/js/media/media.js#L132](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L132) _defined in_: [src/js/media/media.js#L142](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L142)
--- ---
@ -414,7 +414,7 @@ _defined in_: [src/js/media/media.js#L132](https://github.com/videojs/video.js/b
> Handle a tap on the media element. By default it will toggle the user > Handle a tap on the media element. By default it will toggle the user
> activity state, which hides and shows the controls. > activity state, which hides and shows the controls.
_defined in_: [src/js/media/media.js#L152](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L152) _defined in_: [src/js/media/media.js#L162](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L162)
--- ---
@ -534,7 +534,7 @@ _inherited from_: [src/js/component.js#L683](https://github.com/videojs/video.js
> Remove the listeners used for click and tap controls. This is needed for > Remove the listeners used for click and tap controls. This is needed for
> toggling to controls disabled, where a tap/touch should do nothing. > toggling to controls disabled, where a tap/touch should do nothing.
_defined in_: [src/js/media/media.js#L116](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L116) _defined in_: [src/js/media/media.js#L126](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L126)
--- ---
@ -544,7 +544,7 @@ _defined in_: [src/js/media/media.js#L116](https://github.com/videojs/video.js/b
> Poster support for techs should be optional, so we don't want techs to > Poster support for techs should be optional, so we don't want techs to
> break if they don't have a way to set a poster. > break if they don't have a way to set a poster.
_defined in_: [src/js/media/media.js#L162](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L162) _defined in_: [src/js/media/media.js#L262](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L262)
--- ---

View File

@ -171,7 +171,7 @@ _inherited from_: [src/js/component.js#L672](https://github.com/videojs/video.js
##### RETURNS: ##### RETURNS:
* `Object` A mock TimeRange object (following HTML spec) * `Object` A mock TimeRange object (following HTML spec)
_defined in_: [src/js/player.js#L856](https://github.com/videojs/video.js/blob/master/src/js/player.js#L856) _defined in_: [src/js/player.js#L743](https://github.com/videojs/video.js/blob/master/src/js/player.js#L743)
--- ---
@ -183,7 +183,7 @@ _defined in_: [src/js/player.js#L856](https://github.com/videojs/video.js/blob/m
##### RETURNS: ##### RETURNS:
* `Number` The end of the last buffered time range * `Number` The end of the last buffered time range
_defined in_: [src/js/player.js#L907](https://github.com/videojs/video.js/blob/master/src/js/player.js#L907) _defined in_: [src/js/player.js#L794](https://github.com/videojs/video.js/blob/master/src/js/player.js#L794)
--- ---
@ -198,7 +198,7 @@ _defined in_: [src/js/player.js#L907](https://github.com/videojs/video.js/blob/m
##### RETURNS: ##### RETURNS:
* `Number` A decimal between 0 and 1 representing the percent * `Number` A decimal between 0 and 1 representing the percent
_defined in_: [src/js/player.js#L876](https://github.com/videojs/video.js/blob/master/src/js/player.js#L876) _defined in_: [src/js/player.js#L763](https://github.com/videojs/video.js/blob/master/src/js/player.js#L763)
--- ---
@ -216,7 +216,7 @@ _inherited from_: [src/js/component.js#L515](https://github.com/videojs/video.js
> Old naming for exitFullscreen > Old naming for exitFullscreen
**Deprecated** true **Deprecated** true
_defined in_: [src/js/player.js#L1112](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1112) _defined in_: [src/js/player.js#L999](https://github.com/videojs/video.js/blob/master/src/js/player.js#L999)
--- ---
@ -252,7 +252,7 @@ _inherited from_: [src/js/component.js#L233](https://github.com/videojs/video.js
##### RETURNS: ##### RETURNS:
* `Boolean` Controls are showing * `Boolean` Controls are showing
_defined in_: [src/js/player.js#L1387](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1387) _defined in_: [src/js/player.js#L1274](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1274)
--- ---
@ -286,7 +286,7 @@ _inherited from_: [src/js/component.js#L194](https://github.com/videojs/video.js
* `Number` The time in seconds, when not setting * `Number` The time in seconds, when not setting
* `vjs.Player` self, when the current time is set * `vjs.Player` self, when the current time is set
_defined in_: [src/js/player.js#L780](https://github.com/videojs/video.js/blob/master/src/js/player.js#L780) _defined in_: [src/js/player.js#L670](https://github.com/videojs/video.js/blob/master/src/js/player.js#L670)
--- ---
@ -298,7 +298,7 @@ _defined in_: [src/js/player.js#L780](https://github.com/videojs/video.js/blob/m
##### RETURNS: ##### RETURNS:
* `String` The source MIME type * `String` The source MIME type
_defined in_: [src/js/player.js#L1308](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1308) _defined in_: [src/js/player.js#L1195](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1195)
--- ---
@ -343,7 +343,7 @@ _defined in_: [src/js/player.js#L156](https://github.com/videojs/video.js/blob/m
##### RETURNS: ##### RETURNS:
* `Number` The duration of the video in seconds * `Number` The duration of the video in seconds
_defined in_: [src/js/player.js#L811](https://github.com/videojs/video.js/blob/master/src/js/player.js#L811) _defined in_: [src/js/player.js#L698](https://github.com/videojs/video.js/blob/master/src/js/player.js#L698)
--- ---
@ -396,7 +396,7 @@ _inherited from_: [src/js/component.js#L963](https://github.com/videojs/video.js
* `vjs.MediaError|null` when getting * `vjs.MediaError|null` when getting
* `vjs.Player` when setting * `vjs.Player` when setting
_defined in_: [src/js/player.js#L1472](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1472) _defined in_: [src/js/player.js#L1359](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1359)
--- ---
@ -408,7 +408,7 @@ _defined in_: [src/js/player.js#L1472](https://github.com/videojs/video.js/blob/
##### RETURNS: ##### RETURNS:
* `vjs.Player` self * `vjs.Player` self
_defined in_: [src/js/player.js#L1091](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1091) _defined in_: [src/js/player.js#L978](https://github.com/videojs/video.js/blob/master/src/js/player.js#L978)
--- ---
@ -536,7 +536,7 @@ _inherited from_: [src/js/component.js#L475](https://github.com/videojs/video.js
##### PARAMETERS: ##### PARAMETERS:
* __isFS__ * __isFS__
_defined in_: [src/js/player.js#L1014](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1014) _defined in_: [src/js/player.js#L901](https://github.com/videojs/video.js/blob/master/src/js/player.js#L901)
--- ---
@ -560,7 +560,7 @@ _defined in_: [src/js/player.js#L1014](https://github.com/videojs/video.js/blob/
* `Boolean` true if fullscreen, false if not * `Boolean` true if fullscreen, false if not
* `vjs.Player` self, when setting * `vjs.Player` self, when setting
_defined in_: [src/js/player.js#L1002](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1002) _defined in_: [src/js/player.js#L889](https://github.com/videojs/video.js/blob/master/src/js/player.js#L889)
--- ---
@ -594,7 +594,7 @@ _defined in_: [src/js/player.js#L116](https://github.com/videojs/video.js/blob/m
* `Boolean` True if mute is on, false if not, when getting * `Boolean` True if mute is on, false if not, when getting
* `vjs.Player` self, when setting mute * `vjs.Player` self, when setting mute
_defined in_: [src/js/player.js#L964](https://github.com/videojs/video.js/blob/master/src/js/player.js#L964) _defined in_: [src/js/player.js#L851](https://github.com/videojs/video.js/blob/master/src/js/player.js#L851)
--- ---
@ -653,7 +653,7 @@ _inherited from_: [src/js/component.js#L540](https://github.com/videojs/video.js
> A handler for events that signal that waiting has eneded > A handler for events that signal that waiting has eneded
> which is not consistent between browsers. See #1351 > which is not consistent between browsers. See #1351
_defined in_: [src/js/player.js#L549](https://github.com/videojs/video.js/blob/master/src/js/player.js#L549) _defined in_: [src/js/player.js#L439](https://github.com/videojs/video.js/blob/master/src/js/player.js#L439)
--- ---
@ -727,7 +727,7 @@ _inherited from_: [src/js/component.js#L173](https://github.com/videojs/video.js
##### RETURNS: ##### RETURNS:
* `vjs.Player` self * `vjs.Player` self
_defined in_: [src/js/player.js#L749](https://github.com/videojs/video.js/blob/master/src/js/player.js#L749) _defined in_: [src/js/player.js#L639](https://github.com/videojs/video.js/blob/master/src/js/player.js#L639)
--- ---
@ -740,7 +740,7 @@ _defined in_: [src/js/player.js#L749](https://github.com/videojs/video.js/blob/m
##### RETURNS: ##### RETURNS:
* `Boolean` false if the media is currently playing, or true otherwise * `Boolean` false if the media is currently playing, or true otherwise
_defined in_: [src/js/player.js#L762](https://github.com/videojs/video.js/blob/master/src/js/player.js#L762) _defined in_: [src/js/player.js#L652](https://github.com/videojs/video.js/blob/master/src/js/player.js#L652)
--- ---
@ -752,7 +752,7 @@ _defined in_: [src/js/player.js#L762](https://github.com/videojs/video.js/blob/m
##### RETURNS: ##### RETURNS:
* `vjs.Player` self * `vjs.Player` self
_defined in_: [src/js/player.js#L737](https://github.com/videojs/video.js/blob/master/src/js/player.js#L737) _defined in_: [src/js/player.js#L627](https://github.com/videojs/video.js/blob/master/src/js/player.js#L627)
--- ---
@ -784,7 +784,7 @@ _inherited from_: [src/js/component.js#L120](https://github.com/videojs/video.js
* `String` poster URL when getting * `String` poster URL when getting
* `vjs.Player` self when setting * `vjs.Player` self when setting
_defined in_: [src/js/player.js#L1360](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1360) _defined in_: [src/js/player.js#L1247](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1247)
--- ---
@ -832,7 +832,7 @@ _inherited from_: [src/js/component.js#L683](https://github.com/videojs/video.js
> Old naming for requestFullscreen > Old naming for requestFullscreen
**Deprecated** true **Deprecated** true
_defined in_: [src/js/player.js#L1078](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1078) _defined in_: [src/js/player.js#L965](https://github.com/videojs/video.js/blob/master/src/js/player.js#L965)
--- ---
@ -851,7 +851,7 @@ _defined in_: [src/js/player.js#L1078](https://github.com/videojs/video.js/blob/
##### RETURNS: ##### RETURNS:
* `vjs.Player` self * `vjs.Player` self
_defined in_: [src/js/player.js#L1033](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1033) _defined in_: [src/js/player.js#L920](https://github.com/videojs/video.js/blob/master/src/js/player.js#L920)
--- ---
@ -900,7 +900,7 @@ _inherited from_: [src/js/component.js#L693](https://github.com/videojs/video.js
* `String` The current video source when getting * `String` The current video source when getting
* `String` The player when setting * `String` The player when setting
_defined in_: [src/js/player.js#L1222](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1222) _defined in_: [src/js/player.js#L1109](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1109)
--- ---
@ -948,7 +948,7 @@ _inherited from_: [src/js/component.js#L644](https://github.com/videojs/video.js
* `Number` The current volume, when getting * `Number` The current volume, when getting
* `vjs.Player` self, when setting * `vjs.Player` self, when setting
_defined in_: [src/js/player.js#L934](https://github.com/videojs/video.js/blob/master/src/js/player.js#L934) _defined in_: [src/js/player.js#L821](https://github.com/videojs/video.js/blob/master/src/js/player.js#L821)
--- ---
@ -977,14 +977,14 @@ _inherited from_: [src/js/component.js#L756](https://github.com/videojs/video.js
### durationchange `EVENT` ### durationchange `EVENT`
> Fired when the duration of the media resource is first known or changed > Fired when the duration of the media resource is first known or changed
_defined in_: [src/js/player.js#L632](https://github.com/videojs/video.js/blob/master/src/js/player.js#L632) _defined in_: [src/js/player.js#L522](https://github.com/videojs/video.js/blob/master/src/js/player.js#L522)
--- ---
### ended `EVENT` ### ended `EVENT`
> Fired when the end of the media resource is reached (currentTime == duration) > Fired when the end of the media resource is reached (currentTime == duration)
_defined in_: [src/js/player.js#L621](https://github.com/videojs/video.js/blob/master/src/js/player.js#L621) _defined in_: [src/js/player.js#L511](https://github.com/videojs/video.js/blob/master/src/js/player.js#L511)
--- ---
@ -995,63 +995,63 @@ _defined in_: [src/js/player.js#L621](https://github.com/videojs/video.js/blob/m
> implementation yet, so use sparingly. If you don't have a reason to > implementation yet, so use sparingly. If you don't have a reason to
> prevent playback, use `myPlayer.one('play');` instead. > prevent playback, use `myPlayer.one('play');` instead.
_defined in_: [src/js/player.js#L578](https://github.com/videojs/video.js/blob/master/src/js/player.js#L578) _defined in_: [src/js/player.js#L468](https://github.com/videojs/video.js/blob/master/src/js/player.js#L468)
--- ---
### fullscreenchange `EVENT` ### fullscreenchange `EVENT`
> Fired when the player switches in or out of fullscreen mode > Fired when the player switches in or out of fullscreen mode
_defined in_: [src/js/player.js#L661](https://github.com/videojs/video.js/blob/master/src/js/player.js#L661) _defined in_: [src/js/player.js#L551](https://github.com/videojs/video.js/blob/master/src/js/player.js#L551)
--- ---
### loadedalldata `EVENT` ### loadedalldata `EVENT`
> Fired when the player has finished downloading the source data > Fired when the player has finished downloading the source data
_defined in_: [src/js/player.js#L526](https://github.com/videojs/video.js/blob/master/src/js/player.js#L526) _defined in_: [src/js/player.js#L416](https://github.com/videojs/video.js/blob/master/src/js/player.js#L416)
--- ---
### loadeddata `EVENT` ### loadeddata `EVENT`
> Fired when the player has downloaded data at the current playback position > Fired when the player has downloaded data at the current playback position
_defined in_: [src/js/player.js#L520](https://github.com/videojs/video.js/blob/master/src/js/player.js#L520) _defined in_: [src/js/player.js#L410](https://github.com/videojs/video.js/blob/master/src/js/player.js#L410)
--- ---
### loadedmetadata `EVENT` ### loadedmetadata `EVENT`
> Fired when the player has initial duration and dimension information > Fired when the player has initial duration and dimension information
_defined in_: [src/js/player.js#L514](https://github.com/videojs/video.js/blob/master/src/js/player.js#L514) _defined in_: [src/js/player.js#L404](https://github.com/videojs/video.js/blob/master/src/js/player.js#L404)
--- ---
### loadstart `EVENT` ### loadstart `EVENT`
> Fired when the user agent begins looking for media data > Fired when the user agent begins looking for media data
_defined in_: [src/js/player.js#L470](https://github.com/videojs/video.js/blob/master/src/js/player.js#L470) _defined in_: [src/js/player.js#L360](https://github.com/videojs/video.js/blob/master/src/js/player.js#L360)
--- ---
### pause `EVENT` ### pause `EVENT`
> Fired whenever the media has been paused > Fired whenever the media has been paused
_defined in_: [src/js/player.js#L592](https://github.com/videojs/video.js/blob/master/src/js/player.js#L592) _defined in_: [src/js/player.js#L482](https://github.com/videojs/video.js/blob/master/src/js/player.js#L482)
--- ---
### play `EVENT` ### play `EVENT`
> Fired whenever the media begins or resumes playback > Fired whenever the media begins or resumes playback
_defined in_: [src/js/player.js#L532](https://github.com/videojs/video.js/blob/master/src/js/player.js#L532) _defined in_: [src/js/player.js#L422](https://github.com/videojs/video.js/blob/master/src/js/player.js#L422)
--- ---
### progress `EVENT` ### progress `EVENT`
> Fired while the user agent is downloading media data > Fired while the user agent is downloading media data
_defined in_: [src/js/player.js#L610](https://github.com/videojs/video.js/blob/master/src/js/player.js#L610) _defined in_: [src/js/player.js#L500](https://github.com/videojs/video.js/blob/master/src/js/player.js#L500)
--- ---
@ -1065,14 +1065,14 @@ _inherited from_: [src/js/component.js#L863](https://github.com/videojs/video.js
### seeked `EVENT` ### seeked `EVENT`
> Fired when the player has finished jumping to a new time > Fired when the player has finished jumping to a new time
_defined in_: [src/js/player.js#L565](https://github.com/videojs/video.js/blob/master/src/js/player.js#L565) _defined in_: [src/js/player.js#L455](https://github.com/videojs/video.js/blob/master/src/js/player.js#L455)
--- ---
### seeking `EVENT` ### seeking `EVENT`
> Fired whenever the player is jumping to a new time > Fired whenever the player is jumping to a new time
_defined in_: [src/js/player.js#L557](https://github.com/videojs/video.js/blob/master/src/js/player.js#L557) _defined in_: [src/js/player.js#L447](https://github.com/videojs/video.js/blob/master/src/js/player.js#L447)
--- ---
@ -1082,21 +1082,21 @@ _defined in_: [src/js/player.js#L557](https://github.com/videojs/video.js/blob/m
> During playback this is fired every 15-250 milliseconds, depnding on the > During playback this is fired every 15-250 milliseconds, depnding on the
> playback technology in use. > playback technology in use.
_defined in_: [src/js/player.js#L604](https://github.com/videojs/video.js/blob/master/src/js/player.js#L604) _defined in_: [src/js/player.js#L494](https://github.com/videojs/video.js/blob/master/src/js/player.js#L494)
--- ---
### volumechange `EVENT` ### volumechange `EVENT`
> Fired when the volume changes > Fired when the volume changes
_defined in_: [src/js/player.js#L655](https://github.com/videojs/video.js/blob/master/src/js/player.js#L655) _defined in_: [src/js/player.js#L545](https://github.com/videojs/video.js/blob/master/src/js/player.js#L545)
--- ---
### waiting `EVENT` ### waiting `EVENT`
> Fired whenever the media begins wating > Fired whenever the media begins wating
_defined in_: [src/js/player.js#L541](https://github.com/videojs/video.js/blob/master/src/js/player.js#L541) _defined in_: [src/js/player.js#L431](https://github.com/videojs/video.js/blob/master/src/js/player.js#L431)
--- ---

View File

@ -1,7 +1,7 @@
{ {
"name": "video.js", "name": "video.js",
"description": "An HTML5 and Flash video player with a common API and skin for both.", "description": "An HTML5 and Flash video player with a common API and skin for both.",
"version": "4.7.1", "version": "4.7.2",
"copyright": "Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE", "copyright": "Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE",
"keywords": [ "keywords": [
"videojs", "videojs",
@ -21,7 +21,7 @@
}, },
"main": "./dist/video-js/video.js", "main": "./dist/video-js/video.js",
"dependencies": { "dependencies": {
"videojs-swf": "4.4.2" "videojs-swf": "4.4.3"
}, },
"devDependencies": { "devDependencies": {
"calcdeps": "~0.1.7", "calcdeps": "~0.1.7",

View File

@ -756,15 +756,6 @@ vjs.parseUrl = function(url) {
return details; return details;
}; };
// if there's no console then don't try to output messages
// they will still be stored in vjs.log.history
var _noop = function(){};
var _console = window['console'] || {
'log': _noop,
'warn': _noop,
'error': _noop
};
/** /**
* Log messags to the console and history based on the type of message * Log messags to the console and history based on the type of message
* *
@ -773,8 +764,20 @@ var _console = window['console'] || {
* @private * @private
*/ */
function _logType(type, args){ function _logType(type, args){
var argsArray, noop, console;
// convert args to an array to get array functions // convert args to an array to get array functions
var argsArray = Array.prototype.slice.call(args); argsArray = Array.prototype.slice.call(args);
// if there's no console then don't try to output messages
// they will still be stored in vjs.log.history
// Was setting these once outside of this function, but containing them
// in the function makes it easier to test cases where console doesn't exist
noop = function(){};
console = window['console'] || {
'log': noop,
'warn': noop,
'error': noop
};
if (type) { if (type) {
// add the type to the front of the message // add the type to the front of the message
@ -791,11 +794,11 @@ function _logType(type, args){
argsArray.unshift('VIDEOJS:'); argsArray.unshift('VIDEOJS:');
// call appropriate log function // call appropriate log function
if (_console[type].apply) { if (console[type].apply) {
_console[type].apply(_console, argsArray); console[type].apply(console, argsArray);
} else { } else {
// ie8 doesn't allow error.apply, but it will just join() the array anyway // ie8 doesn't allow error.apply, but it will just join() the array anyway
_console[type](argsArray.join(' ')); console[type](argsArray.join(' '));
} }
} }

View File

@ -145,6 +145,7 @@ vjs.Flash.prototype.src = function(src){
vjs.Flash.prototype['setCurrentTime'] = function(time){ vjs.Flash.prototype['setCurrentTime'] = function(time){
this.lastSeekTarget_ = time; this.lastSeekTarget_ = time;
this.el_.vjs_setProperty('currentTime', time); this.el_.vjs_setProperty('currentTime', time);
vjs.MediaTechController.prototype.setCurrentTime.call(this);
}; };
vjs.Flash.prototype['currentTime'] = function(time){ vjs.Flash.prototype['currentTime'] = function(time){

View File

@ -24,6 +24,9 @@ vjs.Html5 = vjs.MediaTechController.extend({
// HTML video is able to automatically resize when going to fullscreen // HTML video is able to automatically resize when going to fullscreen
this.features['fullscreenResize'] = true; this.features['fullscreenResize'] = true;
// HTML video supports progress events
this.features['progressEvents'] = true;
vjs.MediaTechController.call(this, player, options, ready); vjs.MediaTechController.call(this, player, options, ready);
this.setupTriggers(); this.setupTriggers();

View File

@ -18,6 +18,16 @@ vjs.MediaTechController = vjs.Component.extend({
options.reportTouchActivity = false; options.reportTouchActivity = false;
vjs.Component.call(this, player, options, ready); vjs.Component.call(this, player, options, ready);
// Manually track progress in cases where the browser/flash player doesn't report it.
if (!this.features['progressEvents']) {
this.manualProgressOn();
}
// Manually track timeudpates in cases where the browser/flash player doesn't report it.
if (!this.features['timeupdateEvents']) {
this.manualTimeUpdatesOn();
}
this.initControlsListeners(); this.initControlsListeners();
} }
}); });
@ -153,6 +163,96 @@ vjs.MediaTechController.prototype.onTap = function(){
this.player().userActive(!this.player().userActive()); this.player().userActive(!this.player().userActive());
}; };
/* Fallbacks for unsupported event types
================================================================================ */
// Manually trigger progress events based on changes to the buffered amount
// Many flash players and older HTML5 browsers don't send progress or progress-like events
vjs.MediaTechController.prototype.manualProgressOn = function(){
this.manualProgress = true;
// Trigger progress watching when a source begins loading
this.trackProgress();
};
vjs.MediaTechController.prototype.manualProgressOff = function(){
this.manualProgress = false;
this.stopTrackingProgress();
};
vjs.MediaTechController.prototype.trackProgress = function(){
this.progressInterval = setInterval(vjs.bind(this, function(){
// Don't trigger unless buffered amount is greater than last time
var bufferedPercent = this.player().bufferedPercent();
if (this.bufferedPercent_ != bufferedPercent) {
this.player().trigger('progress');
}
this.bufferedPercent_ = bufferedPercent;
if (bufferedPercent === 1) {
this.stopTrackingProgress();
}
}), 500);
};
vjs.MediaTechController.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };
/*! Time Tracking -------------------------------------------------------------- */
vjs.MediaTechController.prototype.manualTimeUpdatesOn = function(){
this.manualTimeUpdates = true;
this.player().on('play', vjs.bind(this, this.trackCurrentTime));
this.player().on('pause', vjs.bind(this, this.stopTrackingCurrentTime));
// timeupdate is also called by .currentTime whenever current time is set
// Watch for native timeupdate event
this.one('timeupdate', function(){
// Update known progress support for this playback technology
this.features['timeupdateEvents'] = true;
// Turn off manual progress tracking
this.manualTimeUpdatesOff();
});
};
vjs.MediaTechController.prototype.manualTimeUpdatesOff = function(){
this.manualTimeUpdates = false;
this.stopTrackingCurrentTime();
this.off('play', this.trackCurrentTime);
this.off('pause', this.stopTrackingCurrentTime);
};
vjs.MediaTechController.prototype.trackCurrentTime = function(){
if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }
this.currentTimeInterval = setInterval(vjs.bind(this, function(){
this.player().trigger('timeupdate');
}), 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15
};
// Turn off play progress tracking (when paused or dragging)
vjs.MediaTechController.prototype.stopTrackingCurrentTime = function(){
clearInterval(this.currentTimeInterval);
// #1002 - if the video ends right before the next timeupdate would happen,
// the progress bar won't make it all the way to the end
this.player().trigger('timeupdate');
};
vjs.MediaTechController.prototype.dispose = function() {
// Turn off any manual progress or timeupdate tracking
if (this.manualProgress) { this.manualProgressOff(); }
if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }
vjs.Component.prototype.dispose.call(this);
};
vjs.MediaTechController.prototype.setCurrentTime = function() {
// improve the accuracy of manual timeupdates
if (this.manualTimeUpdates) { this.player().trigger('timeupdate'); }
};
/** /**
* Provide a default setPoster method for techs * Provide a default setPoster method for techs
* *

View File

@ -163,10 +163,6 @@ vjs.Player.prototype.dispose = function(){
if (this.tag && this.tag['player']) { this.tag['player'] = null; } if (this.tag && this.tag['player']) { this.tag['player'] = null; }
if (this.el_ && this.el_['player']) { this.el_['player'] = null; } if (this.el_ && this.el_['player']) { this.el_['player'] = null; }
// Ensure that tracking progress and time progress will stop and plater deleted
this.stopTrackingProgress();
this.stopTrackingCurrentTime();
if (this.tech) { this.tech.dispose(); } if (this.tech) { this.tech.dispose(); }
// Component dispose // Component dispose
@ -311,16 +307,6 @@ vjs.Player.prototype.loadTech = function(techName, source){
var techReady = function(){ var techReady = function(){
this.player_.triggerReady(); this.player_.triggerReady();
// Manually track progress in cases where the browser/flash player doesn't report it.
if (!this.features['progressEvents']) {
this.player_.manualProgressOn();
}
// Manually track timeudpates in cases where the browser/flash player doesn't report it.
if (!this.features['timeupdateEvents']) {
this.player_.manualTimeUpdatesOn();
}
}; };
// Grab tech-specific options from player options and add source and parent element to use. // Grab tech-specific options from player options and add source and parent element to use.
@ -344,11 +330,6 @@ vjs.Player.prototype.loadTech = function(techName, source){
vjs.Player.prototype.unloadTech = function(){ vjs.Player.prototype.unloadTech = function(){
this.isReady_ = false; this.isReady_ = false;
// Turn off any manual progress or timeupdate tracking
if (this.manualProgress) { this.manualProgressOff(); }
if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }
this.tech.dispose(); this.tech.dispose();
this.tech = false; this.tech = false;
@ -368,98 +349,7 @@ vjs.Player.prototype.unloadTech = function(){
// vjs.log('loadedTech') // vjs.log('loadedTech')
// }, // },
/* Fallbacks for unsupported event types
================================================================================ */
// Manually trigger progress events based on changes to the buffered amount
// Many flash players and older HTML5 browsers don't send progress or progress-like events
vjs.Player.prototype.manualProgressOn = function(){
this.manualProgress = true;
// Trigger progress watching when a source begins loading
this.trackProgress();
// Watch for a native progress event call on the tech element
// In HTML5, some older versions don't support the progress event
// So we're assuming they don't, and turning off manual progress if they do.
// As opposed to doing user agent detection
if (this.tech) {
this.tech.one('progress', function(){
// Update known progress support for this playback technology
this.features['progressEvents'] = true;
// Turn off manual progress tracking
this.player_.manualProgressOff();
});
}
};
vjs.Player.prototype.manualProgressOff = function(){
this.manualProgress = false;
this.stopTrackingProgress();
};
vjs.Player.prototype.trackProgress = function(){
this.progressInterval = setInterval(vjs.bind(this, function(){
// Don't trigger unless buffered amount is greater than last time
var bufferedPercent = this.bufferedPercent();
if (this.cache_.bufferedPercent != bufferedPercent) {
this.trigger('progress');
}
this.cache_.bufferedPercent = bufferedPercent;
if (bufferedPercent == 1) {
this.stopTrackingProgress();
}
}), 500);
};
vjs.Player.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };
/*! Time Tracking -------------------------------------------------------------- */
vjs.Player.prototype.manualTimeUpdatesOn = function(){
this.manualTimeUpdates = true;
this.on('play', this.trackCurrentTime);
this.on('pause', this.stopTrackingCurrentTime);
// timeupdate is also called by .currentTime whenever current time is set
// Watch for native timeupdate event
if (this.tech) {
this.tech.one('timeupdate', function(){
// Update known progress support for this playback technology
this.features['timeupdateEvents'] = true;
// Turn off manual progress tracking
this.player_.manualTimeUpdatesOff();
});
}
};
vjs.Player.prototype.manualTimeUpdatesOff = function(){
this.manualTimeUpdates = false;
this.stopTrackingCurrentTime();
this.off('play', this.trackCurrentTime);
this.off('pause', this.stopTrackingCurrentTime);
};
vjs.Player.prototype.trackCurrentTime = function(){
if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }
this.currentTimeInterval = setInterval(vjs.bind(this, function(){
this.trigger('timeupdate');
}), 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15
};
// Turn off play progress tracking (when paused or dragging)
vjs.Player.prototype.stopTrackingCurrentTime = function(){
clearInterval(this.currentTimeInterval);
// #1002 - if the video ends right before the next timeupdate would happen,
// the progress bar won't make it all the way to the end
this.trigger('timeupdate');
};
// /* Player event handlers (how the player reacts to certain events) // /* Player event handlers (how the player reacts to certain events)
// ================================================================================ */ // ================================================================================ */
@ -782,9 +672,6 @@ vjs.Player.prototype.currentTime = function(seconds){
this.techCall('setCurrentTime', seconds); this.techCall('setCurrentTime', seconds);
// improve the accuracy of manual timeupdates
if (this.manualTimeUpdates) { this.trigger('timeupdate'); }
return this; return this;
} }

View File

@ -29,6 +29,7 @@
'test/unit/mediafaker.js', 'test/unit/mediafaker.js',
'test/unit/player.js', 'test/unit/player.js',
'test/unit/core.js', 'test/unit/core.js',
'test/unit/media.js',
'test/unit/media.html5.js', 'test/unit/media.html5.js',
'test/unit/controls.js', 'test/unit/controls.js',
'test/unit/poster.js', 'test/unit/poster.js',

View File

@ -6,6 +6,8 @@ function sinon(){}
sinon.stub = function(){}; sinon.stub = function(){};
sinon.spy = function(){}; sinon.spy = function(){};
sinon.mock = function(){}; sinon.mock = function(){};
sinon.useFakeTimers = function(){};
sinon.clock.tick = function(){};
Function.prototype.alwaysCalledOn = function(){}; Function.prototype.alwaysCalledOn = function(){};
Function.prototype.alwaysCalledWith = function(){}; Function.prototype.alwaysCalledWith = function(){};

View File

@ -69,7 +69,9 @@ test('currentTime is the seek target during seeking', function() {
parentEl = document.createElement('div'), parentEl = document.createElement('div'),
tech = new vjs.Flash({ tech = new vjs.Flash({
id: noop, id: noop,
bufferedPercent: noop,
on: noop, on: noop,
trigger: noop,
options_: {} options_: {}
}, { }, {
'parentEl': parentEl 'parentEl': parentEl
@ -103,6 +105,7 @@ test('dispose removes the object element even before ready fires', function() {
tech = new vjs.Flash({ tech = new vjs.Flash({
id: noop, id: noop,
on: noop, on: noop,
trigger: noop,
options_: {} options_: {}
}, { }, {
'parentEl': parentEl 'parentEl': parentEl

View File

@ -294,56 +294,54 @@ test('vjs.findPosition should find top and left position', function() {
// LOG TESTS // LOG TESTS
test('should confirm logging functions work', function() { test('should confirm logging functions work', function() {
var console = window['console']; var console, log, error, warn, origConsole, origLog, origWarn, origError;
var origLog = console.log;
var origWarn = console.warn;
var origError = console.error;
origConsole = window['console'];
// replace the native console for testing
// in ie8 console.log is apparently not a 'function' so sinon chokes on it // in ie8 console.log is apparently not a 'function' so sinon chokes on it
// https://github.com/cjohansen/Sinon.JS/issues/386 // https://github.com/cjohansen/Sinon.JS/issues/386
// instead we'll temporarily replace them with functions // instead we'll temporarily replace them with no-op functions
if (typeof origLog === 'object') { console = window['console'] = {
console.log = function(){}; log: function(){},
console.warn = function(){}; warn: function(){},
console.error = function(){}; error: function(){}
} };
// stub the global log functions // stub the global log functions
var log = sinon.stub(console, 'log'); log = sinon.stub(console, 'log');
var error = sinon.stub(console, 'error'); error = sinon.stub(console, 'error');
var warn = sinon.stub(console, 'warn'); warn = sinon.stub(console, 'warn');
vjs.log('log1', 'log2');
vjs.log.warn('warn1', 'warn2');
vjs.log.error('error1', 'error2');
vjs.log('asdf', 'fdsa');
ok(log.called, 'log was called'); ok(log.called, 'log was called');
equal(log.firstCall.args[0], 'VIDEOJS:'); equal(log.firstCall.args[0], 'VIDEOJS:');
equal(log.firstCall.args[1], 'asdf'); equal(log.firstCall.args[1], 'log1');
equal(log.firstCall.args[2], 'fdsa'); equal(log.firstCall.args[2], 'log2');
vjs.log.warn('asdf', 'fdsa');
ok(warn.called, 'warn was called'); ok(warn.called, 'warn was called');
equal(warn.firstCall.args[0], 'VIDEOJS:'); equal(warn.firstCall.args[0], 'VIDEOJS:');
equal(warn.firstCall.args[1], 'WARN:'); equal(warn.firstCall.args[1], 'WARN:');
equal(warn.firstCall.args[2], 'asdf'); equal(warn.firstCall.args[2], 'warn1');
equal(warn.firstCall.args[3], 'fdsa'); equal(warn.firstCall.args[3], 'warn2');
vjs.log.error('asdf', 'fdsa');
ok(error.called, 'error was called'); ok(error.called, 'error was called');
equal(error.firstCall.args[0], 'VIDEOJS:'); equal(error.firstCall.args[0], 'VIDEOJS:');
equal(error.firstCall.args[1], 'ERROR:'); equal(error.firstCall.args[1], 'ERROR:');
equal(error.firstCall.args[2], 'asdf'); equal(error.firstCall.args[2], 'error1');
equal(error.firstCall.args[3], 'fdsa'); equal(error.firstCall.args[3], 'error2');
ok(vjs.log.history.length === 3, 'there should be three messages in the log history');
// tear down sinon // tear down sinon
log.restore(); log.restore();
error.restore(); error.restore();
warn.restore(); warn.restore();
// restore ie8 // restore the native console
if (typeof origLog === 'object') { window['console'] = origConsole;
console.log = origLog;
console.warn = origWarn;
console.error = origError;
}
}); });
test('should loop through each element of an array', function() { test('should loop through each element of an array', function() {

View File

@ -11,11 +11,13 @@ module('HTML5', {
el: function(){ return el; }, el: function(){ return el; },
options_: {}, options_: {},
options: function(){ return {}; }, options: function(){ return {}; },
bufferedPercent: function() { return 0; },
controls: function(){ return false; }, controls: function(){ return false; },
usingNativeControls: function(){ return false; }, usingNativeControls: function(){ return false; },
on: function(){ return this; }, on: function(){ return this; },
off: function() { return this; }, off: function() { return this; },
ready: function(){} ready: function(){},
trigger: function(){}
}; };
tech = new vjs.Html5(player, {}); tech = new vjs.Html5(player, {});
}, },

117
test/unit/media.js Normal file
View File

@ -0,0 +1,117 @@
var noop = function() {}, clock, features;
module('Media Tech', {
'setup': function() {
clock = sinon.useFakeTimers();
features = videojs.util.mergeOptions({}, videojs.MediaTechController.prototype.features);
videojs.MediaTechController.prototype.features['progressEvents'] = false;
},
'teardown': function() {
clock.restore();
videojs.MediaTechController.prototype.features = features;
}
});
test('should synthesize timeupdate events by default', function() {
var timeupdates = 0, playHandler, i, tech;
tech = new videojs.MediaTechController({
id: noop,
on: function(event, handler) {
if (event === 'play') {
playHandler = handler;
}
},
trigger: function(event) {
if (event === 'timeupdate') {
timeupdates++;
}
}
});
playHandler.call(tech);
tech.on('timeupdate', function() {
timeupdates++;
});
clock.tick(250);
equal(timeupdates, 1, 'triggered one timeupdate');
});
test('stops timeupdates if the tech produces them natively', function() {
var timeupdates = 0, tech, playHandler, expected;
tech = new videojs.MediaTechController({
id: noop,
on: function(event, handler) {
if (event === 'play') {
playHandler = handler;
}
},
bufferedPercent: noop,
trigger: function(event) {
if (event === 'timeupdate') {
timeupdates++;
}
}
});
playHandler.call(tech);
// simulate a native timeupdate event
tech.trigger('timeupdate');
expected = timeupdates;
clock.tick(10 * 1000);
equal(timeupdates, expected, 'did not simulate timeupdates');
});
test('stops manual timeupdates while paused', function() {
var timeupdates = 0, tech, playHandler, pauseHandler, expected;
tech = new videojs.MediaTechController({
id: noop,
on: function(event, handler) {
if (event === 'play') {
playHandler = handler;
} else if (event === 'pause') {
pauseHandler = handler;
}
},
bufferedPercent: noop,
trigger: function(event) {
if (event === 'timeupdate') {
timeupdates++;
}
}
});
playHandler.call(tech);
clock.tick(10 * 250);
ok(timeupdates > 0, 'timeupdates fire during playback');
pauseHandler.call(tech);
timeupdates = 0;
clock.tick(10 * 250);
equal(timeupdates, 0, 'timeupdates do not fire when paused');
playHandler.call(tech);
clock.tick(10 * 250);
ok(timeupdates > 0, 'timeupdates fire when playback resumes');
});
test('should synthesize progress events by default', function() {
var progresses = 0, tech;
tech = new videojs.MediaTechController({
id: noop,
on: noop,
bufferedPercent: function() {
return 0;
},
trigger: function(event) {
if (event === 'progress') {
progresses++;
}
}
});
tech.on('progress', function() {
progresses++;
});
clock.tick(500);
equal(progresses, 1, 'triggered one event');
});