Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 93e996d889 |
@@ -4,6 +4,7 @@ Include a [reduced test case](https://css-tricks.com/reduced-test-cases/), we ha
|
||||
|
||||
## Steps to reproduce
|
||||
Explain in detail the exact steps necessary to reproduce the issue.
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
@@ -3,6 +3,7 @@ Please describe the change as necessary.
|
||||
If it's a feature or enhancement please be as detailed as possible.
|
||||
If it's a bug fix, please link the issue that it fixes or describe the bug in as much detail.
|
||||
|
||||
|
||||
## Specific Changes proposed
|
||||
Please list the specific changes involved in this pull request.
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
CHANGELOG.md
|
||||
@@ -1,84 +0,0 @@
|
||||
var remarkrc = {
|
||||
settings: {
|
||||
bullet: '*',
|
||||
fence: '`',
|
||||
strong: '*',
|
||||
emphasis: '_',
|
||||
listItemIndent: 1,
|
||||
incrementListMarker: false
|
||||
},
|
||||
plugins: {
|
||||
'toc': {
|
||||
tight: true
|
||||
},
|
||||
}
|
||||
};
|
||||
var args = process.argv;
|
||||
|
||||
// only lint in non-output mode
|
||||
if (args.indexOf('-o') === -1 && args.indexOf('--output') === -1) {
|
||||
remarkrc['validate-links'] = {};
|
||||
remarkrc.plugins.lint = {
|
||||
'blockquote-indentation': ['error', 2],
|
||||
'checkbox-character-style': ['warn'],
|
||||
'checkbox-content-indent': ['error'],
|
||||
'code-block-style': ['error', 'fenced'],
|
||||
'definition-case': ['off'],
|
||||
'definition-spacing': ['error'],
|
||||
'emphasis-marker': ['error', '_'],
|
||||
'fenced-code-flag': ['error'],
|
||||
'fenced-code-marker': ['error', '`'],
|
||||
'file-extension': ['error'],
|
||||
'final-definition': ['error'],
|
||||
'final-newline': ['off'],
|
||||
'first-heading-level': ['warn', 1],
|
||||
'hard-break-spaces': ['off'],
|
||||
'heading-increment': ['error'],
|
||||
'heading-style': ['error', 'atx'],
|
||||
'link-title-style': ['warn', '"'],
|
||||
'list-item-bullet-indent': ['error'],
|
||||
'list-item-content-indent': ['warn'],
|
||||
'list-item-indent': ['error', 'space'],
|
||||
'list-item-spacing': ['off'],
|
||||
'maximum-heading-length': ['off'],
|
||||
'maximum-line-length': ['off'],
|
||||
'no-auto-link-without-protocol': ['error'],
|
||||
'no-blockquote-without-caret': ['error'],
|
||||
'no-consecutive-blank-lines': ['error'],
|
||||
'no-duplicate-definitions': ['error'],
|
||||
'no-duplicate-headings-in-section': ['error'],
|
||||
'no-duplicate-headings': ['off'],
|
||||
'no-emphasis-as-heading': ['error'],
|
||||
'no-file-name-articles': ['off'],
|
||||
'no-file-name-consecutive-dashes': ['off'],
|
||||
'no-file-name-irregular-characters': ['warn', '\\.a-zA-Z0-9-_'],
|
||||
'no-file-name-mixed-case': ['error'],
|
||||
'no-file-name-outer-dashes': ['error'],
|
||||
'no-heading-content-indent': ['error'],
|
||||
'no-heading-indent': ['error'],
|
||||
'no-heading-punctuation': ['off'],
|
||||
'no-html': ['off'],
|
||||
'no-inline-padding': ['error'],
|
||||
'no-literal-urls': ['off'],
|
||||
'no-missing-blank-lines': ['off'],
|
||||
'no-multiple-toplevel-headings': ['error'],
|
||||
'no-reference-like-url': ['error'],
|
||||
'no-shell-dollars': ['error'],
|
||||
'no-shortcut-reference-iamge': ['off'],
|
||||
'no-shortcut-reference-link': ['off'],
|
||||
'no-table-indentation': ['error'],
|
||||
'no-tabs': ['error'],
|
||||
'no-undefined-references': ['error'],
|
||||
'no-unused-definitions': ['error'],
|
||||
'ordered-list-marker-style': ['error', '.'],
|
||||
'ordered-list-marker-value': ['error', 'one'],
|
||||
'rule-style': ['error', '***'],
|
||||
'strong-marker': ['error', '*'],
|
||||
'table-cell-padding': ['warn', 'padded'],
|
||||
'table-cell-alignment': ['warn'],
|
||||
'table-pipes': ['warn'],
|
||||
'unordered-list-marker-style': ['warn', '*']
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = remarkrc;
|
||||
@@ -13,8 +13,6 @@ notifications:
|
||||
on_success: never
|
||||
webhooks:
|
||||
- http://pam.videojs.com/savage/travis
|
||||
slack:
|
||||
secure: LrF8K6mCYWlUt6SvdbGHazyQZSk/opKoiB/wgoGYaGc9+3wYXkVexY0WkO1m6wBKhUqXRAMVMFszr1wqKgdcxtItmFMMj8HqTLI1MVqgKqYX4Ux3CnEHJQiwxIk0aVL7lHLsZTXV/2Y0QIOYmAnCrgy46klETrk0ZuXf5okpu2Q=
|
||||
env:
|
||||
global:
|
||||
- secure: K6JpKwMkfNaJix3Bb0tLjVMzHMJgtBXdd/dvfw1BMb9DCBpd81PqXbDs7yXCddUxnUPTBPxZCrQgWsw71Wn+qEoIG5MU3uOT5A2rBbx/yZonVAGv5ed/9w0xk0OzO383CmPMFqwqtp9YmdmqGjQBkYXVXJjTvNTOAExFSdhO+3U=
|
||||
|
||||
-238
@@ -1,241 +1,3 @@
|
||||
<a name="5.20.4"></a>
|
||||
## [5.20.4](https://github.com/videojs/video.js/compare/v5.20.3...v5.20.4) (2017-10-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Make boolean attributes set and check both the associated property and the attribute ([#4631](https://github.com/videojs/video.js/issues/4631)) ([0f8de52](https://github.com/videojs/video.js/commit/0f8de52)), closes [#4351](https://github.com/videojs/video.js/issues/4351)
|
||||
|
||||
<a name="5.20.3"></a>
|
||||
## [5.20.3](https://github.com/videojs/video.js/compare/v5.20.2...v5.20.3) (2017-08-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* tracks are disabled and cuepoints are cleared in iOS native player ([#4569](https://github.com/videojs/video.js/issues/4569)) ([424d021](https://github.com/videojs/video.js/commit/424d021))
|
||||
|
||||
### Chores
|
||||
|
||||
* **CHANGELOG:** update CHANGELOG for 5.20.2 ([#4529](https://github.com/videojs/video.js/issues/4529)) ([935ec1e](https://github.com/videojs/video.js/commit/935ec1e))
|
||||
|
||||
<a name="5.20.2"></a>
|
||||
## [5.20.2](https://github.com/videojs/video.js/compare/v5.20.1...v5.20.2) (2017-07-26)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* adjust volume ranges so muted(true) and vol=0 do not use the same icons ([#4425](https://github.com/videojs/video.js/issues/4425)) ([b314268](https://github.com/videojs/video.js/commit/b314268))
|
||||
* only change focus from BPB if not a mouse click ([#4523](https://github.com/videojs/video.js/issues/4523)) ([d90c945](https://github.com/videojs/video.js/commit/d90c945))
|
||||
* Only update text track mode if changed ([#4368](https://github.com/videojs/video.js/issues/4368)) ([a1763dc](https://github.com/videojs/video.js/commit/a1763dc))
|
||||
* player.duration() should return NaN if duration is not known ([#4456](https://github.com/videojs/video.js/issues/4456)) ([2576eda](https://github.com/videojs/video.js/commit/2576eda))
|
||||
* Safari picture-in-picture triggers fullscreenchange ([#4442](https://github.com/videojs/video.js/issues/4442)) ([c17c003](https://github.com/videojs/video.js/commit/c17c003))
|
||||
* Use passive event listeners for touchstart/touchmove ([#4445](https://github.com/videojs/video.js/issues/4445)) ([8599c8e](https://github.com/videojs/video.js/commit/8599c8e)), closes [#4432](https://github.com/videojs/video.js/issues/4432)
|
||||
|
||||
### Chores
|
||||
|
||||
* add a release script to makes things easier ([#4517](https://github.com/videojs/video.js/issues/4517)) ([9ca9989](https://github.com/videojs/video.js/commit/9ca9989))
|
||||
* move imports up so bundlers wont trip up ([#4363](https://github.com/videojs/video.js/issues/4363)) ([0d725df](https://github.com/videojs/video.js/commit/0d725df))
|
||||
* **package:** update to swf 5.4.1 ([#4516](https://github.com/videojs/video.js/issues/4516)) ([a145dd2](https://github.com/videojs/video.js/commit/a145dd2))
|
||||
* **package:** update videojs-vtt.js to 0.12.4 ([#4364](https://github.com/videojs/video.js/issues/4364)) ([3f7e215](https://github.com/videojs/video.js/commit/3f7e215))
|
||||
|
||||
<a name="5.20.1"></a>
|
||||
## [5.20.1](https://github.com/videojs/video.js/compare/v5.20.0...v5.20.1) (2017-05-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* only disable user-selection on sliders ([#4355](https://github.com/videojs/video.js/issues/4355)) ([0d60720](https://github.com/videojs/video.js/commit/0d60720))
|
||||
* prevent dupe events on enabled ClickableComponents ([#4357](https://github.com/videojs/video.js/issues/4357)) ([3faea9f](https://github.com/videojs/video.js/commit/3faea9f))
|
||||
|
||||
<a name="5.20.0"></a>
|
||||
# [5.20.0](https://github.com/videojs/video.js/compare/v5.19.2...v5.20.0) (2017-05-11)
|
||||
|
||||
### Features
|
||||
|
||||
* add 'playsinline' player option ([#4325](https://github.com/videojs/video.js/issues/4325)) ([946f84b](https://github.com/videojs/video.js/commit/946f84b))
|
||||
* Add a version class to the player ([#4335](https://github.com/videojs/video.js/issues/4335)) ([b855bfb](https://github.com/videojs/video.js/commit/b855bfb))
|
||||
* Add getVideoPlaybackQuality API ([#4286](https://github.com/videojs/video.js/issues/4286)) ([c970474](https://github.com/videojs/video.js/commit/c970474))
|
||||
* remove playbackRate blacklist for recent Android Chrome ([#4336](https://github.com/videojs/video.js/issues/4336)) ([3fe22e9](https://github.com/videojs/video.js/commit/3fe22e9))
|
||||
|
||||
### Chores
|
||||
|
||||
* add slack travis notifications ([#4339](https://github.com/videojs/video.js/issues/4339)) ([ab110ff](https://github.com/videojs/video.js/commit/ab110ff))
|
||||
* **package:** pin karma to 1.3.0 for IE8 support ([#4340](https://github.com/videojs/video.js/issues/4340)) ([6cf7327](https://github.com/videojs/video.js/commit/6cf7327))
|
||||
|
||||
### Tests
|
||||
|
||||
* fix playsinline test for IE8 ([#4347](https://github.com/videojs/video.js/issues/4347)) ([823f6c7](https://github.com/videojs/video.js/commit/823f6c7))
|
||||
|
||||
<a name="5.19.2"></a>
|
||||
## [5.19.2](https://github.com/videojs/video.js/compare/v5.19.1...v5.19.2) (2017-04-13)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* set IE_VERSION correctly for IE11 ([#4280](https://github.com/videojs/video.js/issues/4280)) ([207730e](https://github.com/videojs/video.js/commit/207730e)), closes [#4278](https://github.com/videojs/video.js/issues/4278)
|
||||
|
||||
<a name="5.19.1"></a>
|
||||
## [5.19.1](https://github.com/videojs/video.js/compare/v5.19.0...v5.19.1) (2017-03-27)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* not showing default text tracks over video ([#4217](https://github.com/videojs/video.js/issues/4217)) ([4653922](https://github.com/videojs/video.js/commit/4653922))
|
||||
* removeCue should work with native passed in cue ([#4209](https://github.com/videojs/video.js/issues/4209)) ([3974944](https://github.com/videojs/video.js/commit/3974944))
|
||||
|
||||
### Chores
|
||||
|
||||
* **package:** update videojs-vtt.js to 0.12.3 ([#4223](https://github.com/videojs/video.js/issues/4223)) ([ad770fb](https://github.com/videojs/video.js/commit/ad770fb))
|
||||
|
||||
<a name="5.19.0"></a>
|
||||
# [5.19.0](https://github.com/videojs/video.js/compare/v5.18.4...v5.19.0) (2017-03-15)
|
||||
|
||||
### Features
|
||||
|
||||
* Make pause on open optional for ModalDialog via options ([#4187](https://github.com/videojs/video.js/issues/4187)) ([4ec3b56](https://github.com/videojs/video.js/commit/4ec3b56))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* make load progress buffered regions height 100% ([#4191](https://github.com/videojs/video.js/issues/4191)) ([398c6e9](https://github.com/videojs/video.js/commit/398c6e9))
|
||||
* make sure audio track hides with one item ([#4203](https://github.com/videojs/video.js/issues/4203)) ([c069655](https://github.com/videojs/video.js/commit/c069655))
|
||||
|
||||
<a name="5.18.4"></a>
|
||||
## [5.18.4](https://github.com/videojs/video.js/compare/v5.18.3...v5.18.4) (2017-03-08)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **vttjs:** wait till tech el in DOM before loading vttjs ([#4176](https://github.com/videojs/video.js/issues/4176)) ([ad86eec](https://github.com/videojs/video.js/commit/ad86eec))
|
||||
|
||||
<a name="5.18.3"></a>
|
||||
## [5.18.3](https://github.com/videojs/video.js/compare/v5.18.2...v5.18.3) (2017-03-06)
|
||||
|
||||
<a name="5.18.1"></a>
|
||||
## [5.18.1](https://github.com/videojs/video.js/compare/v5.18.0...v5.18.1) (2017-03-03)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **cues:** only copy cue props that don't exist ([#4146](https://github.com/videojs/video.js/issues/4146)) ([de08669](https://github.com/videojs/video.js/commit/de08669))
|
||||
* cue-points with a startTime of 0 ([#4148](https://github.com/videojs/video.js/issues/4148)) ([e7d4b47](https://github.com/videojs/video.js/commit/e7d4b47))
|
||||
* make sure that cues copy over their id ([#4154](https://github.com/videojs/video.js/issues/4154)) ([072c277](https://github.com/videojs/video.js/commit/072c277))
|
||||
* **MenuButton:** Unify behavior of showing/hiding ([#3993](https://github.com/videojs/video.js/issues/3993)) ([4367c69](https://github.com/videojs/video.js/commit/4367c69))
|
||||
* **playback rate menu:** playback rate menu items should be selectable ([#4150](https://github.com/videojs/video.js/issues/4150)) ([288edd1](https://github.com/videojs/video.js/commit/288edd1))
|
||||
|
||||
### Chores
|
||||
|
||||
* **build:** lint errors only and silence webpack ([#4153](https://github.com/videojs/video.js/issues/4153)) ([b1ca344](https://github.com/videojs/video.js/commit/b1ca344))
|
||||
* **package:** update video-js-swf to 5.3.0 ([#4161](https://github.com/videojs/video.js/issues/4161)) ([2bcfe21](https://github.com/videojs/video.js/commit/2bcfe21))
|
||||
|
||||
<a name="5.18.0"></a>
|
||||
# [5.18.0](https://github.com/videojs/video.js/compare/v5.17.0...v5.18.0) (2017-02-27)
|
||||
|
||||
### Features
|
||||
|
||||
* focus play toggle from Big Play Btn on play ([#4132](https://github.com/videojs/video.js/issues/4132)) ([dcc615a](https://github.com/videojs/video.js/commit/dcc615a)), closes [#2729](https://github.com/videojs/video.js/issues/2729)
|
||||
* update videojs-vtt.js and wrap native cues in TextTrack ([#4131](https://github.com/videojs/video.js/issues/4131)) ([3d4aebc](https://github.com/videojs/video.js/commit/3d4aebc)), closes [#4093](https://github.com/videojs/video.js/issues/4093)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **sass:** import path has cwd once again ([#4076](https://github.com/videojs/video.js/issues/4076)) ([c02c6c6](https://github.com/videojs/video.js/commit/c02c6c6))
|
||||
* addChild instance names should be toTitleCased ([#4117](https://github.com/videojs/video.js/issues/4117)) ([fa97309](https://github.com/videojs/video.js/commit/fa97309))
|
||||
* make mergeOptions behave the same across browsers ([#4090](https://github.com/videojs/video.js/issues/4090)) ([ce19ed5](https://github.com/videojs/video.js/commit/ce19ed5))
|
||||
* synchronously shim vtt.js when possible ([#4082](https://github.com/videojs/video.js/issues/4082)) ([b5727a6](https://github.com/videojs/video.js/commit/b5727a6))
|
||||
|
||||
<a name="5.17.0"></a>
|
||||
# [5.17.0](https://github.com/videojs/video.js/compare/v5.16.0...v5.17.0) (2017-02-07)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Patch a memory leak caused by un-removed track listener(s). ([#3975](https://github.com/videojs/video.js/issues/3975)) ([bca44c0](https://github.com/videojs/video.js/commit/bca44c0))
|
||||
* remove title attribute on menu items, fixes [#3699](https://github.com/videojs/video.js/issues/3699) ([#4009](https://github.com/videojs/video.js/issues/4009)) ([91874a3](https://github.com/videojs/video.js/commit/91874a3))
|
||||
|
||||
### Chores
|
||||
|
||||
* change accessibility test in grunt.js to remove unnecessary warning message. ([#4008](https://github.com/videojs/video.js/issues/4008)) ([daad492](https://github.com/videojs/video.js/commit/daad492))
|
||||
* **package:** update swf to 5.2.0 ([#4040](https://github.com/videojs/video.js/issues/4040)) ([dab893b](https://github.com/videojs/video.js/commit/dab893b))
|
||||
|
||||
### Documentation
|
||||
|
||||
* minor fix to currentTime() comment: "setting" not "getting" ([#3944](https://github.com/videojs/video.js/issues/3944)) ([6578ed9](https://github.com/videojs/video.js/commit/6578ed9))
|
||||
|
||||
<a name="5.16.0"></a>
|
||||
# [5.16.0](https://github.com/videojs/video.js/compare/v5.15.1...v5.16.0) (2017-01-12)
|
||||
|
||||
### Features
|
||||
|
||||
* Show big play button on pause if specified ([#3892](https://github.com/videojs/video.js/issues/3892)) ([b547214](https://github.com/videojs/video.js/commit/b547214))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* give techs a name ([#3934](https://github.com/videojs/video.js/issues/3934)) ([94fd5c1](https://github.com/videojs/video.js/commit/94fd5c1)), closes [#1786](https://github.com/videojs/video.js/issues/1786)
|
||||
* Pause player before seeking in seek bar mousedown ([#3921](https://github.com/videojs/video.js/issues/3921)) ([2ceed0a](https://github.com/videojs/video.js/commit/2ceed0a)), closes [#3839](https://github.com/videojs/video.js/issues/3839) [#3886](https://github.com/videojs/video.js/issues/3886)
|
||||
* player el ingest when parent doesn't have `hasAttribute` method ([#3929](https://github.com/videojs/video.js/issues/3929)) ([bbe8253](https://github.com/videojs/video.js/commit/bbe8253))
|
||||
* showing custom poster with controls disabled ([#3933](https://github.com/videojs/video.js/issues/3933)) ([305e5ea](https://github.com/videojs/video.js/commit/305e5ea)), closes [#1625](https://github.com/videojs/video.js/issues/1625)
|
||||
|
||||
### Chores
|
||||
|
||||
* better dev experience ([#3896](https://github.com/videojs/video.js/issues/3896)) ([9ec5587](https://github.com/videojs/video.js/commit/9ec5587))
|
||||
* don't run tests on travis if only docs were changed ([#3908](https://github.com/videojs/video.js/issues/3908)) ([c239bd5](https://github.com/videojs/video.js/commit/c239bd5))
|
||||
* **development:** fix `npm start` file watching ([#3922](https://github.com/videojs/video.js/issues/3922)) ([02da697](https://github.com/videojs/video.js/commit/02da697))
|
||||
* **release:** add es5 folder to the tagged commit ([#3913](https://github.com/videojs/video.js/issues/3913)) ([d120ea2](https://github.com/videojs/video.js/commit/d120ea2))
|
||||
* **sass:** upgrade to latest version of grunt-sass ([#3897](https://github.com/videojs/video.js/issues/3897)) ([83d453b](https://github.com/videojs/video.js/commit/83d453b)), closes [#3692](https://github.com/videojs/video.js/issues/3692)
|
||||
* fix typo in collaborator guide ([#3931](https://github.com/videojs/video.js/issues/3931)) ([f35de1c](https://github.com/videojs/video.js/commit/f35de1c))
|
||||
|
||||
### Code Refactoring
|
||||
|
||||
* require `videojs-vtt.js` via require rather than concat ([#3919](https://github.com/videojs/video.js/issues/3919)) ([d290db1](https://github.com/videojs/video.js/commit/d290db1))
|
||||
|
||||
### Documentation
|
||||
|
||||
* **faq:** add a question about autoplay ([#3898](https://github.com/videojs/video.js/issues/3898)) ([e5a240a](https://github.com/videojs/video.js/commit/e5a240a))
|
||||
* **faq:** add FAQ question about RTMP url ([#3899](https://github.com/videojs/video.js/issues/3899)) ([9c74116](https://github.com/videojs/video.js/commit/9c74116))
|
||||
* **troubleshooting:** updates to troubleshooting doc ([#3912](https://github.com/videojs/video.js/issues/3912)) ([0ce7cd4](https://github.com/videojs/video.js/commit/0ce7cd4))
|
||||
|
||||
<a name="5.15.1"></a>
|
||||
## [5.15.1](https://github.com/videojs/video.js/compare/v5.15.0...v5.15.1) (2016-12-23)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* extra warn logs on already initialized player references ([#3888](https://github.com/videojs/video.js/issues/3888)) ([b7c384e](https://github.com/videojs/video.js/commit/b7c384e))
|
||||
* Support require()-ing video.js ([#3889](https://github.com/videojs/video.js/issues/3889)) ([ac0b03f](https://github.com/videojs/video.js/commit/ac0b03f)), closes [#3869](https://github.com/videojs/video.js/issues/3869)
|
||||
|
||||
<a name="5.15.0"></a>
|
||||
# [5.15.0](https://github.com/videojs/video.js/compare/v5.14.1...v5.15.0) (2016-12-22)
|
||||
|
||||
### Features
|
||||
|
||||
* **player:** ingest a player div for videojs ([#3856](https://github.com/videojs/video.js/issues/3856)) ([74530d8](https://github.com/videojs/video.js/commit/74530d8))
|
||||
* deprecate the use of `starttime` in player.js ([#3838](https://github.com/videojs/video.js/issues/3838)) ([22cf3dd](https://github.com/videojs/video.js/commit/22cf3dd))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **html5:** (un)patchCanPlayType could set native canPlayType to null ([#3863](https://github.com/videojs/video.js/issues/3863)) ([559297a](https://github.com/videojs/video.js/commit/559297a))
|
||||
* **seeking:** don't always pause in mouse down ([#3886](https://github.com/videojs/video.js/issues/3886)) ([e92db4f](https://github.com/videojs/video.js/commit/e92db4f)), closes [#3839](https://github.com/videojs/video.js/issues/3839)
|
||||
* don't emit tap events on tech when using native controls ([#3873](https://github.com/videojs/video.js/issues/3873)) ([42507f8](https://github.com/videojs/video.js/commit/42507f8))
|
||||
* remote text track deprecation warnings ([#3864](https://github.com/videojs/video.js/issues/3864)) ([a7ffa34](https://github.com/videojs/video.js/commit/a7ffa34))
|
||||
* remove vjs-seeking on src change ([#3846](https://github.com/videojs/video.js/issues/3846)) ([83cbeec](https://github.com/videojs/video.js/commit/83cbeec)), closes [#3765](https://github.com/videojs/video.js/issues/3765)
|
||||
|
||||
### Chores
|
||||
|
||||
* **docs:** Documentation Linting and TOC generation ([#3841](https://github.com/videojs/video.js/issues/3841)) ([0493f54](https://github.com/videojs/video.js/commit/0493f54))
|
||||
* **faq:** move FAQ and troubleshooting guide to docs/ ([#3883](https://github.com/videojs/video.js/issues/3883)) ([26789e7](https://github.com/videojs/video.js/commit/26789e7))
|
||||
* **package:** update dependencies (enable Greenkeeper) 🌴 ([#3777](https://github.com/videojs/video.js/issues/3777)) ([d20e9ce](https://github.com/videojs/video.js/commit/d20e9ce))
|
||||
* **videojs-standard:** update to version 6.0.1 ([#3884](https://github.com/videojs/video.js/issues/3884)) ([eb389c5](https://github.com/videojs/video.js/commit/eb389c5))
|
||||
|
||||
### Documentation
|
||||
|
||||
* move examples out of code into docs ([642ad4b](https://github.com/videojs/video.js/commit/642ad4b))
|
||||
|
||||
### Tests
|
||||
|
||||
* **hooks:** move vjs hooks QUnit module into separate file ([#3862](https://github.com/videojs/video.js/issues/3862)) ([87cd26d](https://github.com/videojs/video.js/commit/87cd26d))
|
||||
* **hooks:** remove errors logged in tests ([#3865](https://github.com/videojs/video.js/issues/3865)) ([3f724f9](https://github.com/videojs/video.js/commit/3f724f9))
|
||||
|
||||
<a name="5.14.1"></a>
|
||||
## [5.14.1](https://github.com/videojs/video.js/compare/v5.14.0...v5.14.1) (2016-12-05)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **throttle:** Fix error in Fn.throttle that broke MouseTimeDisplay ([#3833](https://github.com/videojs/video.js/issues/3833)) ([014c6b8](https://github.com/videojs/video.js/commit/014c6b8))
|
||||
|
||||
### Tests
|
||||
|
||||
* add Edge to browserstack tests ([#3834](https://github.com/videojs/video.js/issues/3834)) ([5ec46b0](https://github.com/videojs/video.js/commit/5ec46b0))
|
||||
* **events:** silence error logging in tests ([#3835](https://github.com/videojs/video.js/issues/3835)) ([214e01c](https://github.com/videojs/video.js/commit/214e01c))
|
||||
|
||||
<a name="5.14.0"></a>
|
||||
# [5.14.0](https://github.com/videojs/video.js/compare/v5.13.2...v5.14.0) (2016-12-02)
|
||||
|
||||
|
||||
+54
-56
@@ -1,28 +1,32 @@
|
||||
# Collaborator Guide
|
||||
|
||||
## Table of Contents
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
**Table of Contents**
|
||||
|
||||
* [Issues and Pull Requests](#issues-and-pull-requests)
|
||||
* [Accepting changes](#accepting-changes)
|
||||
* [Involving the TSC](#involving-the-tsc)
|
||||
* [Landing a PR](#landing-a-pr)
|
||||
* [Landing a PR manually](#landing-a-pr-manually)
|
||||
* [Landing a PR manually with several changes](#landing-a-pr-manually-with-several-changes)
|
||||
* [I just made a mistake](#i-just-made-a-mistake)
|
||||
* [I accidentally pushed a broken commit or incorrect commit to master](#i-accidentally-pushed-a-broken-commit-or-incorrect-commit-to-master)
|
||||
* [I lost changes](#i-lost-changes)
|
||||
* [I accidentally committed a broken change to master](#i-accidentally-committed-a-broken-change-to-master)
|
||||
* [video.js releases](#videojs-releases)
|
||||
* [Getting dependencies](#getting-dependencies)
|
||||
* [Install contrib](#install-contrib)
|
||||
* [npm access](#npm-access)
|
||||
* [GitHub personal access token](#github-personal-access-token)
|
||||
* [Doing a release](#doing-a-release)
|
||||
* [Doc credit](#doc-credit)
|
||||
- [Issues and Pull Requests](#issues-and-pull-requests)
|
||||
- [Accepting changes](#accepting-changes)
|
||||
- [Involving the TSC](#involving-the-tsc)
|
||||
- [Landing a PR](#landing-a-pr)
|
||||
- [Landing a PR manually](#landing-a-pr-manually)
|
||||
- [Landing a PR manually with several changes](#landing-a-pr-manually-with-several-changes)
|
||||
- [I just made a mistake](#i-just-made-a-mistake)
|
||||
- [I accidentally pushed a broken commit or incorrect commit to master](#i-accidentally-pushed-a-broken-commit-or-incorrect-commit-to-master)
|
||||
- [I lost changes](#i-lost-changes)
|
||||
- [I accidentally committed a broken change to master](#i-accidentally-committed-a-broken-change-to-master)
|
||||
- [video.js releases](#videojs-releases)
|
||||
- [Getting dependencies](#getting-dependencies)
|
||||
- [Install contrib](#install-contrib)
|
||||
- [npm access](#npm-access)
|
||||
- [GitHub personal access token](#github-personal-access-token)
|
||||
- [Doing a release](#doing-a-release)
|
||||
- [Doc credit](#doc-credit)
|
||||
|
||||
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||
|
||||
## Issues and Pull Requests
|
||||
|
||||
Full courtesy should always be shown in video.js projects.
|
||||
Full courtesey should always be shown in video.js projects.
|
||||
|
||||
Collaborators may manage issues they feel qualified to handle, being mindful of our guidelines.
|
||||
|
||||
@@ -73,7 +77,7 @@ The footer should contain things like whether this is a breaking change or what
|
||||
|
||||
Here's an example:
|
||||
|
||||
```commit
|
||||
```
|
||||
fix(html5): a regression with html5 tech
|
||||
|
||||
This is where you'd explain what the regression is.
|
||||
@@ -86,91 +90,87 @@ Fixes #123
|
||||
_Optional:_ ensure you're not in a weird rebase or merge state:
|
||||
|
||||
```sh
|
||||
git am --abort
|
||||
git rebase --abort
|
||||
$ git am --abort
|
||||
$ git rebase --abort
|
||||
```
|
||||
|
||||
Checkout and update the master branch:
|
||||
|
||||
```sh
|
||||
git checkout master
|
||||
git remote update
|
||||
git rebase upstream/master
|
||||
$ git checkout master
|
||||
$ git remote update
|
||||
$ git rebase upstream/master
|
||||
```
|
||||
|
||||
Check out the PR:
|
||||
|
||||
```sh
|
||||
git fetch upstream pull/{{PR Number}}/head:{{name of branch}}
|
||||
git checkout -t {{name of branch}}
|
||||
$ git fetch upstream pull/{{PR Number}}/head:{{name of branch}}
|
||||
$ git checkout -t {{name of branch}}
|
||||
```
|
||||
|
||||
> For example:
|
||||
>
|
||||
> ```sh
|
||||
> git fetch upstream pull/123/head:gkatsev-html5-fix
|
||||
> git checkout -t gkatsev-html5-fix
|
||||
> $ git fetch upstream pull/123/head:gkatsev-html5-fix
|
||||
> $ git checkout -t gkatsev-html5-fix
|
||||
> ```
|
||||
|
||||
_Optional:_ If necessary, rebase against master. If you have multiple features in the PR, [landing a PR manually with several changes](#landing-a-pr-manually-with-several-changes)
|
||||
|
||||
```sh
|
||||
git rebase master
|
||||
$ git rebase master
|
||||
```
|
||||
|
||||
Fix up any issues that arise from the rebase, change back to the master branch and squash merge:
|
||||
|
||||
```sh
|
||||
git checkout master
|
||||
git merge --squash --no-commit gkatsev-html5-fix
|
||||
$ git checkout master
|
||||
$ git merge --squash --no-commit gkatsev-html5-fix
|
||||
```
|
||||
|
||||
The `--no-commit` tells git not to make a commit on your behalf. It does stage everything for you, so, you can instead it:
|
||||
|
||||
```sh
|
||||
git diff --cached
|
||||
$ git diff --cached
|
||||
```
|
||||
|
||||
Now get the author from the original commit:
|
||||
|
||||
```sh
|
||||
git log -n 1 --pretty=short gkatsev-html5-fix
|
||||
$ git log -n 1 --pretty=short gkatsev-html5-fix
|
||||
```
|
||||
|
||||
Which shows:
|
||||
```
|
||||
commit 433c58224f5be34480c8e067ca6c5406ba1c1e9c
|
||||
Author: Gary Katsevman <git@gkatsev.com>
|
||||
|
||||
```txt
|
||||
commit 433c58224f5be34480c8e067ca6c5406ba1c1e9c
|
||||
Author: Gary Katsevman <git@gkatsev.com>
|
||||
|
||||
Update TOC
|
||||
Update TOC
|
||||
```
|
||||
|
||||
Now you can commit the change the change with the author, following our commit guidelines
|
||||
|
||||
```sh
|
||||
git commit --author "Gary Katsevman <git@gkatsev.com>"
|
||||
$ git commit --author "Gary Katsevman <git@gkatsev.com>"
|
||||
```
|
||||
|
||||
Now that it's committed, push to master
|
||||
|
||||
```sh
|
||||
git push upstream master
|
||||
$ git push upstream master
|
||||
```
|
||||
|
||||
Congratulate yourself for a job well done and the contributor for having his change landed in master.
|
||||
|
||||
#### Landing a PR manually with several changes
|
||||
|
||||
Follow the same steps as before but when you rebase against master, you want to do an interactive rebase and then squash the changes into just a few commits.
|
||||
|
||||
```sh
|
||||
git rebase -i master
|
||||
$ git rebase -i master
|
||||
```
|
||||
|
||||
This will give you an output like the following:
|
||||
|
||||
```txt
|
||||
```
|
||||
pick b4dc15d Update CONTRIBUTING.md with latest info
|
||||
pick 8592149 Add Dev certificate of origin
|
||||
pick 259dee6 Add grunt and doctoc npm scripts
|
||||
@@ -201,10 +201,10 @@ pick 433c582 Update TOC
|
||||
Replace `pick` to `fixup` or `edit` depending on how you want the output to look. You can also re-order the commits, if necessary.
|
||||
|
||||
> `fixup` will squash the commit it's infront of up into the commit above it
|
||||
>
|
||||
|
||||
> `edit` will allow you to edit the commit message before continuing
|
||||
|
||||
```txt
|
||||
```
|
||||
edit b4dc15d Update CONTRIBUTING.md with latest info
|
||||
fixup 8592149 Add Dev certificate of origin
|
||||
fixup f12af12 Add conventional-changelog-videojs link
|
||||
@@ -216,18 +216,17 @@ edit 259dee6 Add grunt and doctoc npm scripts
|
||||
When you get to the edit commits, git will give more information, but you'd want to run ammend the current commit while following our commit guidelines
|
||||
|
||||
```sh
|
||||
git commit --amend
|
||||
$ git commit --amend
|
||||
```
|
||||
|
||||
After going through and making the commits you want, you want to change back to master and then rebase the branch onto master so we get a clean history
|
||||
|
||||
```sh
|
||||
git rebase gkatsev-html5-fix
|
||||
$ git rebase gkatsev-html5-fix
|
||||
```
|
||||
|
||||
This will put our two commits into master:
|
||||
|
||||
```txt
|
||||
```
|
||||
b4dc15d chore(contributing.md): Update CONTRIBUTING.md with latest info <Gary Katsevman>
|
||||
259dee6 chore(package.json): Add grunt and doctoc npm scripts <Gary Katsevman>
|
||||
9e20386 v5.12.6 <Gary Katsevman>
|
||||
@@ -254,7 +253,7 @@ This is a great time to discover that something is broken. Because it hasn't bee
|
||||
To do so, just reset the branch against master.
|
||||
|
||||
```sh
|
||||
git reset --hard upstream/master
|
||||
$ git reset --hard upstream/master
|
||||
```
|
||||
|
||||
## video.js releases
|
||||
@@ -296,7 +295,7 @@ After generating one, make sure to keep it safe because GitHub will not show the
|
||||
To do a release, check out the master branch
|
||||
|
||||
```sh
|
||||
git checkout master
|
||||
$ git checkout master
|
||||
```
|
||||
|
||||
Then run the contrib command to do the next release. Don't forget to provide your GitHub token so the GitHub release goes through.
|
||||
@@ -313,8 +312,7 @@ After it's done, verify that the GitHub release has the correct changelog output
|
||||
|
||||
This collaborator guide was heavily inspired by [node.js's guide](https://github.com/nodejs/node/blob/master/COLLABORATOR_GUIDE.md)
|
||||
|
||||
|
||||
[issue template]: /.github/ISSUE_TEMPLATE.md
|
||||
|
||||
[pr template]: /.github/PULL_REQUEST_TEMPLATE.md
|
||||
|
||||
[conventions]: https://github.com/videojs/conventional-changelog-videojs/blob/master/convention.md
|
||||
|
||||
+88
-87
@@ -2,53 +2,56 @@
|
||||
|
||||
So you want to help out? Great! There's a number of ways you can get involved.
|
||||
|
||||
## Table of Contents
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
**Table of Contents**
|
||||
|
||||
* [Other repositories where issues could be filed](#other-repositories-where-issues-could-be-filed)
|
||||
* [Filing issues](#filing-issues)
|
||||
* [Reporting a Bug](#reporting-a-bug)
|
||||
* [Requesting a Feature](#requesting-a-feature)
|
||||
* [Contributing code](#contributing-code)
|
||||
* [Building video.js locally](#building-videojs-locally)
|
||||
* [Forking and cloning the repository](#forking-and-cloning-the-repository)
|
||||
* [Installing local dependencies](#installing-local-dependencies)
|
||||
* [Running tests](#running-tests)
|
||||
* [Building videojs](#building-videojs)
|
||||
* [Testing Locally](#testing-locally)
|
||||
* [Sandbox test directory](#sandbox-test-directory)
|
||||
* [Running a local web server](#running-a-local-web-server)
|
||||
* [Watching source and test changes](#watching-source-and-test-changes)
|
||||
* [Making Changes](#making-changes)
|
||||
* [Step 1: Verify](#step-1-verify)
|
||||
* [Step 2: Update remote](#step-2-update-remote)
|
||||
* [Step 3: Branch](#step-3-branch)
|
||||
* [Step 4: Commit](#step-4-commit)
|
||||
* [Step 5: Test](#step-5-test)
|
||||
* [Step 6: Push](#step-6-push)
|
||||
* [Code Style Guide](#code-style-guide)
|
||||
* [Developer's Certificate of Origin 1.1](#developers-certificate-of-origin-11)
|
||||
* [Doc Credit](#doc-credit)
|
||||
- [Other repositories where issues could be filed](#other-repositories-where-issues-could-be-filed)
|
||||
- [Filing issues](#filing-issues)
|
||||
- [Reporting a Bug](#reporting-a-bug)
|
||||
- [Requesting a Feature](#requesting-a-feature)
|
||||
- [Contributing code](#contributing-code)
|
||||
- [Building video.js locally](#building-videojs-locally)
|
||||
- [Forking and cloning the repository](#forking-and-cloning-the-repository)
|
||||
- [Installing local dependencies](#installing-local-dependencies)
|
||||
- [Running tests](#running-tests)
|
||||
- [Building videojs](#building-videojs)
|
||||
- [Testing Locally](#testing-locally)
|
||||
- [Sandbox test directory](#sandbox-test-directory)
|
||||
- [Running a local web server](#running-a-local-web-server)
|
||||
- [Watching source and test changes](#watching-source-and-test-changes)
|
||||
- [Making Changes](#making-changes)
|
||||
- [Step 1: Verify](#step-1-verify)
|
||||
- [Step 2: Update remote](#step-2-update-remote)
|
||||
- [Step 3: Branch](#step-3-branch)
|
||||
- [Step 4: Commit](#step-4-commit)
|
||||
- [Step 5: Test](#step-5-test)
|
||||
- [Step 6: Push](#step-6-push)
|
||||
- [Code Style Guide](#code-style-guide)
|
||||
- [Developer's Certificate of Origin 1.1](#developers-certificate-of-origin-11)
|
||||
- [Doc Credit](#doc-credit)
|
||||
|
||||
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||
|
||||
## Other repositories where issues could be filed
|
||||
|
||||
There's also other Video.js projects where you can help. (check the [video.js org](https://github.com/videojs) for an up-to-date list of projects)
|
||||
|
||||
* [Videojs.com](https://github.com/videojs/videojs.com)
|
||||
* [Video.js flash player](https://github.com/videojs/videojs-flash)
|
||||
* [HLS](https://github.com/videojs/videojs-contrib-hls)
|
||||
* [DASH](https://github.com/videojs/videojs-contrib-dash)
|
||||
* [Youtube Tech](https://github.com/videojs/videojs-youtube)
|
||||
* [Vimeo Tech](https://github.com/videojs/videojs-vimeo)
|
||||
* [Ads](https://github.com/videojs/videojs-contrib-ads)
|
||||
* [Plugin generator](https://github.com/videojs/generator-videojs-plugin)
|
||||
* [Linter][linter]
|
||||
* [Videojs.com](https://github.com/videojs/videojs.com)
|
||||
* [Video.js flash player](https://github.com/videojs/videojs-flash)
|
||||
* [HLS](https://github.com/videojs/videojs-contrib-hls)
|
||||
* [DASH](https://github.com/videojs/videojs-contrib-dash)
|
||||
* [Youtube Tech](https://github.com/videojs/videojs-youtube)
|
||||
* [Vimeo Tech](https://github.com/videojs/videojs-vimeo)
|
||||
* [Ads](https://github.com/videojs/videojs-contrib-ads)
|
||||
* [Plugin generator](https://github.com/videojs/generator-videojs-plugin)
|
||||
* [Linter][linter]
|
||||
|
||||
## Filing issues
|
||||
|
||||
[GitHub Issues](https://github.com/videojs/video.js/issues) are used for all discussions around the codebase, including **bugs**, **features**, and other **enhancements**.
|
||||
|
||||
When filling out an issue, make sure to fill out the questions in the
|
||||
|
||||
When filling out an issue, make sure to fill out the questions in the
|
||||
### Reporting a Bug
|
||||
|
||||
**A bug is a demonstrable problem** that is caused by the code in the repository. Good bug reports are extremely helpful. Thank You!
|
||||
@@ -56,11 +59,16 @@ When filling out an issue, make sure to fill out the questions in the
|
||||
Guidelines for bug reports:
|
||||
|
||||
1. If your issue is with a particular video.js plugin or subproject, please open an issue against that project. See [list of some potential other projects above](#other-repositories-where-issues-could-be-filed)
|
||||
1. Use the [GitHub issue search](https://github.com/videojs/video.js/issues) — check if the issue has already been reported.
|
||||
1. Check if the issue has already been fixed — try to reproduce it using the latest `master` branch in the repository.
|
||||
1. Isolate the problem — **create a [reduced test case](https://css-tricks.com/reduced-test-cases/)** with a live example. You can possibly use [this JSBin example](http://jsbin.com/axedog/edit) as a starting point -- don't forget to update it to the videojs version you use.
|
||||
|
||||
1. Use the [GitHub issue search](https://github.com/videojs/video.js/issues) — check if the issue has already been reported.
|
||||
|
||||
1. Check if the issue has already been fixed — try to reproduce it using the latest `master` branch in the repository.
|
||||
|
||||
1. Isolate the problem — **create a [reduced test case](https://css-tricks.com/reduced-test-cases/)** with a live example. You can possibly use [this JSBin example](http://jsbin.com/axedog/edit) as a starting point -- don't forget to update it to the videojs version you use.
|
||||
|
||||
1. Answer all questions in the [issue template][]. The questions in the issue template are designed to try and provide the maintainers with as much information possible to minimize back-and-forth to get the issue resolved.
|
||||
|
||||
|
||||
A good bug report should be as detailed as possible, so that others won't have to follow up for the essential details.
|
||||
|
||||
**[File a bug report](https://github.com/videojs/video.js/issues/new)**
|
||||
@@ -68,9 +76,12 @@ A good bug report should be as detailed as possible, so that others won't have t
|
||||
### Requesting a Feature
|
||||
|
||||
1. [Check the plugin list](http://videojs.com/plugins/) for any plugins that may already support the feature.
|
||||
1. [Search the issues](https://github.com/videojs/video.js/issues) for any previous requests for the same feature, and give a thumbs up or +1 on existing requests.
|
||||
1. If no previous requests exist, create a new issue. Please be as clear as possible about why the feautre is needed and the intended use case.
|
||||
1. Once again, be as details as possible and follow the [issue template][]
|
||||
|
||||
2. [Search the issues](https://github.com/videojs/video.js/issues) for any previous requests for the same feature, and give a thumbs up or +1 on existing requests.
|
||||
|
||||
2. If no previous requests exist, create a new issue. Please be as clear as possible about why the feautre is needed and the intended use case.
|
||||
|
||||
3. Once again, be as details as possible and follow the [issue template][]
|
||||
|
||||
**[Request a feature](https://github.com/videojs/video.js/issues/new)**
|
||||
|
||||
@@ -78,18 +89,17 @@ A good bug report should be as detailed as possible, so that others won't have t
|
||||
|
||||
To contibute code you'll need to be able to build a copy of Video.js and run tests locally. There are a few requirements before getting started.
|
||||
|
||||
* Node.js
|
||||
Video.js uses Node for build and test automation. Node is available for Windows, Mac OS X, Linux, and SunOS, as well as source code if that doesn't scare you. [Download and install Node.js](http://nodejs.org/download/)
|
||||
|
||||
* `grunt-cli`
|
||||
Optionally, install `grunt-cli` globally to use grunt directly. It can always be run via an npm script:
|
||||
- Node.js
|
||||
Video.js uses Node for build and test automation. Node is available for Windows, Mac OS X, Linux, and SunOS, as well as source code if that doesn't scare you. [Download and install Node.js](http://nodejs.org/download/)
|
||||
|
||||
- `grunt-cli`
|
||||
Optionally, install `grunt-cli` globally to use grunt directly. It can always be run via an npm script:
|
||||
```sh
|
||||
npm run grunt
|
||||
$ npm run grunt
|
||||
```
|
||||
|
||||
```sh
|
||||
npm install -g grunt-cli
|
||||
$ npm install -g grunt-cli
|
||||
```
|
||||
|
||||
Depending on how you have node and npm set up, you may need to run the global install (`-g`) as a superuser by prepending `sudo`.
|
||||
@@ -103,27 +113,27 @@ First, [fork](http://help.github.com/fork-a-repo/) the video.js git repository.
|
||||
Clone your fork of the repo into your code directory
|
||||
|
||||
```sh
|
||||
git clone https://github.com/<your-username>/video.js.git
|
||||
$ git clone https://github.com/<your-username>/video.js.git
|
||||
```
|
||||
|
||||
Navigate to the newly cloned directory
|
||||
|
||||
```sh
|
||||
cd video.js
|
||||
$ cd video.js
|
||||
```
|
||||
|
||||
Assign the original repo to a remote called "upstream"
|
||||
|
||||
```sh
|
||||
```
|
||||
git remote add upstream https://github.com/videojs/video.js.git
|
||||
```
|
||||
|
||||
> In the future, if you want to pull in updates to video.js that happened after you cloned the main repo, you can run:
|
||||
>
|
||||
> ```sh
|
||||
> git remote update
|
||||
> git checkout master
|
||||
> git pull upstream master
|
||||
> $ git remote update
|
||||
> $ git checkout master
|
||||
> $ git pull upstream master
|
||||
> ```
|
||||
|
||||
#### Installing local dependencies
|
||||
@@ -131,7 +141,7 @@ git remote add upstream https://github.com/videojs/video.js.git
|
||||
Install the required node.js modules using node package manager
|
||||
|
||||
```sh
|
||||
npm install
|
||||
$ npm install
|
||||
```
|
||||
|
||||
> A note to Windows developers: If you run npm commands, and you find that your command prompt colors have suddenly reversed, you can configure npm to set color to false to prevent this from happening.
|
||||
@@ -143,7 +153,7 @@ npm install
|
||||
To run the tests all you need to do is run
|
||||
|
||||
```sh
|
||||
npm test
|
||||
$ npm test
|
||||
```
|
||||
|
||||
This will build video.js locally and run the tests using [Karma](https://karma-runner.github.io/1.0/index.html) which runs our tests in actual browsers.
|
||||
@@ -153,11 +163,12 @@ This will build video.js locally and run the tests using [Karma](https://karma-r
|
||||
To build video.js, simply run
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
$ npm run build
|
||||
```
|
||||
|
||||
This outputs an `es5/` and `dist/` folder. The `es5/` folder is used by bundling tools like browserify and webpack to package video.js into projects. The `dist/` folder has pre-compiled versions of video.js, including a minified version and the CSS file. This file can be included in page via a `<script></script>` tag.
|
||||
|
||||
|
||||
#### Testing Locally
|
||||
|
||||
Besides running automated tests, you often want to run video.js manually and play around with things as you're developing. A few things are provided to make it easier.
|
||||
@@ -167,7 +178,7 @@ Besides running automated tests, you often want to run video.js manually and pla
|
||||
There's a sandbox directory where you can add any file and it won't get tracked in git. To start you can copy the example index file.
|
||||
|
||||
```sh
|
||||
cp sandbox/index.html.example sandbox/index.html
|
||||
$ cp sandbox/index.html.example sandbox/index.html
|
||||
```
|
||||
|
||||
See [the following section](#running-a-local-web-server) for how to open the page in a browser.
|
||||
@@ -182,27 +193,22 @@ This ties in nicely with the sandbox directory. You can always open the `sandbox
|
||||
To run the local webserver, you can run it in a couple of ways.
|
||||
|
||||
```sh
|
||||
grunt connect
|
||||
open http://localhost:9999/sandbox/index.html
|
||||
$ grunt connect
|
||||
$ open http://localhost:9999/sandbox/index.html
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
npm start
|
||||
$ npm start
|
||||
```
|
||||
|
||||
The latter does some extra work which will be described in the next section.
|
||||
The latter does some extra work which will be described in the [next section]
|
||||
|
||||
#### Watching source and test changes
|
||||
|
||||
As you're developing, you want the build to re-run and update itself, and potentially re-run the tests. In addition, you want to launch a local web-server that you can open the `sandbox` directory in.
|
||||
To do so, you just need to run
|
||||
|
||||
```sh
|
||||
npm start
|
||||
$ npm start
|
||||
```
|
||||
|
||||
This sets up the local webserver using connect and then watches source files, test files, and CSS files for you and rebuilds things as they happen.
|
||||
|
||||
### Making Changes
|
||||
@@ -216,9 +222,9 @@ Whether you're adding something new, making something better, or fixing a bug, y
|
||||
Before starting work, you want to update your local repository to have all the latest changes.
|
||||
|
||||
```sh
|
||||
git remote update
|
||||
git checkout master
|
||||
git rebase upstream/master
|
||||
$ git remote update
|
||||
$ git checkout master
|
||||
$ git rebase upstream/master
|
||||
```
|
||||
|
||||
#### Step 3: Branch
|
||||
@@ -226,11 +232,10 @@ git rebase upstream/master
|
||||
You want to do your work in a separate branch.
|
||||
|
||||
```sh
|
||||
git checkout -b my-branch
|
||||
$ git checkout -b my-branch
|
||||
```
|
||||
|
||||
#### Step 4: Commit
|
||||
|
||||
Commit changes as you go. Write thorough descriptions of your changes in your commit messages.
|
||||
For more information see our [conventional changelog guidelines for video.js](https://github.com/videojs/conventional-changelog-videojs/blob/master/convention.md)
|
||||
Follow these guidelines:
|
||||
@@ -240,16 +245,13 @@ Follow these guidelines:
|
||||
1. A footer can be added if this fixes a particular issue on GitHub.
|
||||
|
||||
```sh
|
||||
git add src/js/player.js
|
||||
git commit
|
||||
$ git add src/js/player.js
|
||||
$ git commit
|
||||
```
|
||||
|
||||
An example of the first line of a commit message: `fix: changed the footer to correctly display foo`
|
||||
An example commit message:
|
||||
|
||||
In the body of the commit message, we can talk about why we made the change. What the change entails.
|
||||
Any testing considerations or things to think about when looking at the commit. For Example:
|
||||
|
||||
```txt
|
||||
```
|
||||
fix: one line commit explanation
|
||||
|
||||
In the body of the commit message, we can talk about why we made the change. What the change entails.
|
||||
@@ -262,8 +264,8 @@ Fixes #123. The footer can contain Fixes messages.
|
||||
> Make sure that git knows your name and email:
|
||||
>
|
||||
> ```sh
|
||||
> git config --global user.name "Random User"
|
||||
> git config --global user.email "random.user@example.com"
|
||||
> $ git config --global user.name "Random User"
|
||||
> $ git config --global user.email "random.user@example.com"
|
||||
> ```
|
||||
|
||||
#### Step 5: Test
|
||||
@@ -272,13 +274,13 @@ Any code change should come with corresponding test changes. Especially bug fixe
|
||||
Tests attached to bug fixes should fail before the change and succeed with it.
|
||||
|
||||
```sh
|
||||
npm test
|
||||
$ npm test
|
||||
```
|
||||
|
||||
#### Step 6: Push
|
||||
|
||||
```sh
|
||||
git push origin my-branch
|
||||
$ git push origin my-branch
|
||||
```
|
||||
|
||||
Then go to the [repo page](http://github.com/videojs/video.js) and click the "Pull Request" button and fill out the [pull request template](/.github/PULL_REQUEST_TEMPLATE.md)
|
||||
@@ -313,8 +315,8 @@ By making a contribution to this project, I certify that:
|
||||
maintained indefinitely and may be redistributed consistent with
|
||||
this project or the open source license(s) involved.
|
||||
|
||||
## Doc Credit
|
||||
|
||||
## Doc Credit
|
||||
This doc was inspired by some great contribution guide examples including [contribute.md template](https://github.com/contribute-md/contribute-md-template),
|
||||
[grunt](https://github.com/gruntjs/grunt/wiki/Contributing),
|
||||
[html5 boilerplate](https://github.com/h5bp/html5-boilerplate/blob/master/CONTRIBUTING.md),
|
||||
@@ -322,5 +324,4 @@ This doc was inspired by some great contribution guide examples including [contr
|
||||
and [node.js](https://github.com/nodejs/node/blob/master/CONTRIBUTING.md).
|
||||
|
||||
[issue template]: /.github/ISSUE_TEMPLATE.md
|
||||
|
||||
[linter]: https://github.com/videojs/standard
|
||||
|
||||
+5
-20
@@ -83,40 +83,25 @@ _Video.js uses [BrowserStack][browserstack] for compatibility testing._
|
||||
|
||||
Video.js is [licensed][license] under the Apache License, Version 2.0.
|
||||
|
||||
|
||||
[browserstack]: https://browserstack.com
|
||||
|
||||
[builtwith]: https://trends.builtwith.com/media/VideoJS
|
||||
|
||||
[buildwith]: https://trends.builtwith.com/media/VideoJS
|
||||
[contributing]: CONTRIBUTING.md
|
||||
|
||||
[contributing-building]: CONTRIBUTING.md#building-your-own-copy-of-videojs
|
||||
[contributing-code]: CONTRIBUTING.md#contributing-code
|
||||
[coveralls-icon]: https://coveralls.io/repos/github/videojs/video.js/badge.svg?branch=master
|
||||
|
||||
[coveralls-link]: https://coveralls.io/github/videojs/video.js?branch=master
|
||||
|
||||
[docs]: http://docs.videojs.com
|
||||
|
||||
[fastly]: http://www.fastly.com/
|
||||
|
||||
[getting-started]: http://videojs.com/getting-started/
|
||||
|
||||
[license]: LICENSE
|
||||
|
||||
[logo]: http://videojs.com/img/logo.png
|
||||
|
||||
[npm-icon]: https://nodei.co/npm/video.js.png?downloads=true&downloadRank=true
|
||||
|
||||
[npm-link]: https://nodei.co/npm/video.js/
|
||||
|
||||
[options]: docs/guides/options.md
|
||||
|
||||
[options]: docs/options.md
|
||||
[plugins]: http://videojs.com/plugins/
|
||||
|
||||
[slack-icon]: http://slack.videojs.com/badge.svg
|
||||
|
||||
[slack-link]: http://slack.videojs.com
|
||||
|
||||
[travis-icon]: https://travis-ci.org/videojs/video.js.svg?branch=master
|
||||
|
||||
[travis-link]: https://travis-ci.org/videojs/video.js
|
||||
|
||||
[vjs]: http://videojs.com
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
echo "Release Type?"
|
||||
read -rp "> " rtype
|
||||
|
||||
echo grunt version:${rtype}
|
||||
grunt version:${rtype}
|
||||
version=$(./build/bin/version)
|
||||
|
||||
echo New version is $version
|
||||
|
||||
# echo grunt chg-release:$version
|
||||
# grunt chg-release:$version
|
||||
npm run changelog
|
||||
|
||||
echo git commit -am "v$version"
|
||||
git commit -am "v$version"
|
||||
|
||||
echo git checkout temp-release-branch
|
||||
git checkout -b temp-release-branch
|
||||
|
||||
echo grunt dist
|
||||
grunt dist
|
||||
|
||||
echo git add -f dist
|
||||
git add -f dist
|
||||
|
||||
echo git commit -m "v$version dist"
|
||||
git commit -m "v$version dist"
|
||||
|
||||
echo git tag -a "v$version" -m "v$version"
|
||||
git tag -a "v$version" -m "v$version"
|
||||
|
||||
echo git show
|
||||
git show
|
||||
|
||||
|
||||
read -p "publish? " -n 1 -r
|
||||
echo # (optional) move to a new line
|
||||
if [[ $REPLY =~ ^[Nn]$ ]]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo git push upstream
|
||||
git push upstream --tags
|
||||
git push origin --tags
|
||||
|
||||
echo npm publish --tag next-5
|
||||
npm publish --tag next-5
|
||||
|
||||
echo grunt github-release:prereleease
|
||||
grunt github-release:prerelease
|
||||
|
||||
echo git checkout -
|
||||
git checkout -
|
||||
|
||||
echo git branch -D temp-release-branch
|
||||
git branch -D temp-release-branch
|
||||
@@ -1,19 +0,0 @@
|
||||
import sh from 'shelljs';
|
||||
import path from 'path';
|
||||
|
||||
|
||||
export default function(commit, commitRange) {
|
||||
const SINGLE_COMMIT = `git diff-tree --no-commit-id --name-only -r ${commit}`;
|
||||
const COMMIT_RANGE = `git diff --name-only ${commitRange}`;
|
||||
|
||||
let command = SINGLE_COMMIT;
|
||||
|
||||
if (commitRange) {
|
||||
command = COMMIT_RANGE
|
||||
}
|
||||
|
||||
const output = sh.exec(command, {async: false, silent: true}).stdout;
|
||||
|
||||
const files = output.split('\n').filter(Boolean);
|
||||
return files.every((file) => file.startsWith('docs') || path.extname(file) === '.md');
|
||||
};
|
||||
+61
-77
@@ -1,7 +1,6 @@
|
||||
import {gruntCustomizer, gruntOptionsMaker} from './options-customizer.js';
|
||||
import chg from 'chg';
|
||||
import npmRun from 'npm-run';
|
||||
import isDocsOnly from './docs-only.js';
|
||||
|
||||
module.exports = function(grunt) {
|
||||
require('time-grunt')(grunt);
|
||||
@@ -128,14 +127,9 @@ module.exports = function(grunt) {
|
||||
},
|
||||
dist: {},
|
||||
watch: {
|
||||
dist: {
|
||||
files: [
|
||||
'build/temp/video.js',
|
||||
'build/temp/alt/video.novtt.js',
|
||||
'build/temp/video-js.css',
|
||||
'build/temp/alt/video-js-cdn.css'
|
||||
],
|
||||
tasks: ['copy:dist']
|
||||
novtt: {
|
||||
files: ['build/temp/video.js'],
|
||||
tasks: ['concat:novtt']
|
||||
},
|
||||
minify: {
|
||||
files: ['build/temp/video.js'],
|
||||
@@ -145,6 +139,14 @@ module.exports = function(grunt) {
|
||||
files: ['src/css/**/*'],
|
||||
tasks: ['skin']
|
||||
},
|
||||
babel: {
|
||||
files: ['src/js/**/*.js'],
|
||||
tasks: ['babel:es5']
|
||||
},
|
||||
jshint: {
|
||||
files: ['src/**/*', 'test/unit/**/*.js', 'Gruntfile.js'],
|
||||
tasks: 'jshint'
|
||||
}
|
||||
},
|
||||
connect: {
|
||||
dev: {
|
||||
@@ -221,7 +223,6 @@ module.exports = function(grunt) {
|
||||
chrome_bs: { browsers: ['chrome_bs'] },
|
||||
firefox_bs: { browsers: ['firefox_bs'] },
|
||||
safari_bs: { browsers: ['safari_bs'] },
|
||||
edge_bs: { browsers: ['edge_bs'] },
|
||||
ie11_bs: { browsers: ['ie11_bs'] },
|
||||
ie10_bs: { browsers: ['ie10_bs'] },
|
||||
ie9_bs: { browsers: ['ie9_bs'] },
|
||||
@@ -318,41 +319,34 @@ module.exports = function(grunt) {
|
||||
}
|
||||
},
|
||||
browserify: {
|
||||
options: browserifyGruntOptions(),
|
||||
build: {
|
||||
options: browserifyGruntOptions(),
|
||||
files: {
|
||||
'build/temp/video.js': ['es5/video.js']
|
||||
}
|
||||
},
|
||||
buildnovtt: {
|
||||
options: browserifyGruntOptions({transform: [
|
||||
['aliasify', {aliases: {'videojs-vtt.js': false}}]
|
||||
]}),
|
||||
dist: {
|
||||
options: browserifyGruntOptions({
|
||||
transform: [
|
||||
['browserify-versionify', {
|
||||
placeholder: '../node_modules/videojs-vtt.js/dist/vtt.js',
|
||||
version: 'https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js'
|
||||
}],
|
||||
]
|
||||
}),
|
||||
files: {
|
||||
'build/temp/alt/video.novtt.js': ['es5/video.js']
|
||||
'build/temp/video.js': ['es5/video.js']
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
options: browserifyGruntOptions({
|
||||
options: {
|
||||
watch: true,
|
||||
keepAlive: true,
|
||||
}),
|
||||
keepAlive: true
|
||||
},
|
||||
files: {
|
||||
'build/temp/video.js': ['es5/video.js']
|
||||
}
|
||||
},
|
||||
watchnovtt: {
|
||||
options: browserifyGruntOptions({
|
||||
transform: [
|
||||
['aliasify', {aliases: {'videojs-vtt.js': false}}]
|
||||
],
|
||||
watch: true,
|
||||
keepAlive: true,
|
||||
}),
|
||||
files: {
|
||||
'build/temp/alt/video.novtt.js': ['es5/video.js']
|
||||
}
|
||||
},
|
||||
tests: {
|
||||
options: {
|
||||
browserifyOptions: {
|
||||
@@ -389,6 +383,14 @@ module.exports = function(grunt) {
|
||||
options: {
|
||||
separator: '\n'
|
||||
},
|
||||
novtt: {
|
||||
src: ['build/temp/video.js'],
|
||||
dest: 'build/temp/alt/video.novtt.js'
|
||||
},
|
||||
vtt: {
|
||||
src: ['build/temp/video.js', 'node_modules/videojs-vtt.js/dist/vtt.js'],
|
||||
dest: 'build/temp/video.js'
|
||||
},
|
||||
ie8_addition: {
|
||||
src: ['build/temp/video-js.css', 'src/css/ie8.css'],
|
||||
dest: 'build/temp/video-js.css'
|
||||
@@ -399,23 +401,14 @@ module.exports = function(grunt) {
|
||||
logConcurrentOutput: true
|
||||
},
|
||||
tests: [
|
||||
'shell:babel',
|
||||
'watch:babel',
|
||||
'browserify:tests'
|
||||
],
|
||||
dev: [
|
||||
'shell:babel',
|
||||
'browserify:watch',
|
||||
'browserify:watchnovtt',
|
||||
'browserify:tests',
|
||||
'watch:skin',
|
||||
'watch:dist'
|
||||
],
|
||||
// Run multiple watch tasks in parallel
|
||||
// Needed so watchify can cache intelligently
|
||||
watchAll: [
|
||||
'watch',
|
||||
'browserify:watch',
|
||||
'browserify:watchnovtt',
|
||||
'browserify:tests',
|
||||
'karma:watch'
|
||||
],
|
||||
@@ -443,14 +436,8 @@ module.exports = function(grunt) {
|
||||
}
|
||||
},
|
||||
shell: {
|
||||
babel: {
|
||||
command: 'npm run babel -- --watch',
|
||||
options: {
|
||||
preferLocal: true
|
||||
}
|
||||
},
|
||||
lint: {
|
||||
command: 'npm run lint -- --errors',
|
||||
command: 'npm run lint',
|
||||
options: {
|
||||
preferLocal: true
|
||||
}
|
||||
@@ -468,7 +455,7 @@ module.exports = function(grunt) {
|
||||
}
|
||||
},
|
||||
webpack: {
|
||||
command: 'webpack --hide-modules test/require/webpack.js build/temp/webpack.js',
|
||||
command: 'webpack test/require/webpack.js build/temp/webpack.js',
|
||||
options: {
|
||||
preferLocal: true
|
||||
}
|
||||
@@ -483,8 +470,8 @@ module.exports = function(grunt) {
|
||||
error: true
|
||||
},
|
||||
ignore: [
|
||||
// Ignore warning about contrast of the "vjs-no-js" fallback link
|
||||
'WCAG2AA.Principle1.Guideline1_4.1_4_3.G18.BgImage'
|
||||
// Ignore the warning about needing <optgroup> elements
|
||||
'WCAG2AA.Principle1.Guideline1_3.1_3_1.H85.2'
|
||||
]
|
||||
|
||||
},
|
||||
@@ -498,15 +485,17 @@ module.exports = function(grunt) {
|
||||
require('load-grunt-tasks')(grunt);
|
||||
grunt.loadNpmTasks('videojs-doc-generator');
|
||||
grunt.loadNpmTasks('chg');
|
||||
grunt.loadNpmTasks('gkatsev-grunt-sass');
|
||||
grunt.loadNpmTasks('grunt-accessibility');
|
||||
|
||||
grunt.registerTask('build', [
|
||||
const buildDependents = [
|
||||
'shell:lint',
|
||||
'clean:build',
|
||||
|
||||
'babel:es5',
|
||||
'browserify:build',
|
||||
'browserify:buildnovtt',
|
||||
'concat:novtt',
|
||||
'concat:vtt',
|
||||
'usebanner:novtt',
|
||||
'usebanner:vtt',
|
||||
'uglify',
|
||||
@@ -519,11 +508,18 @@ module.exports = function(grunt) {
|
||||
'copy:swf',
|
||||
'copy:ie8',
|
||||
'vjslanguages'
|
||||
]);
|
||||
];
|
||||
|
||||
grunt.registerTask('build', buildDependents);
|
||||
|
||||
grunt.registerTask(
|
||||
'build:dist',
|
||||
buildDependents.map(task => task === 'browserify:build' ? 'browserify:dist' : task)
|
||||
);
|
||||
|
||||
grunt.registerTask('dist', [
|
||||
'clean:dist',
|
||||
'build',
|
||||
'build:dist',
|
||||
'copy:dist',
|
||||
'copy:examples',
|
||||
'zip:dist'
|
||||
@@ -535,31 +531,19 @@ module.exports = function(grunt) {
|
||||
grunt.registerTask('default', ['test']);
|
||||
|
||||
// The test script includes coveralls only when the TRAVIS env var is set.
|
||||
grunt.registerTask('test', function() {
|
||||
const tasks = [
|
||||
'build',
|
||||
'shell:noderequire',
|
||||
'shell:browserify',
|
||||
'shell:webpack',
|
||||
'karma:defaults',
|
||||
'test-a11y'
|
||||
];
|
||||
|
||||
if (process.env.TRAVIS) {
|
||||
if (isDocsOnly(process.env.TRAVIS_COMMIT, process.env.TRAVIS_COMMIT_RANGE)) {
|
||||
grunt.log.write('Not running any tests because only docs were changed');
|
||||
return;
|
||||
}
|
||||
|
||||
tasks.concat(process.env.TRAVIS && 'coveralls').filter(Boolean);
|
||||
}
|
||||
|
||||
grunt.task.run(tasks);
|
||||
});
|
||||
grunt.registerTask('test', [
|
||||
'build',
|
||||
'shell:noderequire',
|
||||
'shell:browserify',
|
||||
'shell:webpack',
|
||||
'karma:defaults',
|
||||
'test-a11y'].concat(process.env.TRAVIS && 'coveralls').filter(Boolean));
|
||||
|
||||
// Run while developing
|
||||
grunt.registerTask('dev', ['connect:dev', 'concurrent:dev']);
|
||||
grunt.registerTask('dev', ['build', 'connect:dev', 'concurrent:watchSandbox']);
|
||||
|
||||
grunt.registerTask('watchAll', ['build', 'connect:dev', 'concurrent:watchAll']);
|
||||
|
||||
grunt.registerTask('test-a11y', ['copy:a11y', 'accessibility']);
|
||||
|
||||
// Pick your testing, or run both in different terminals
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "video.js",
|
||||
"description": "An HTML5 and Flash video player with a common API and skin for both.",
|
||||
"version": "5.20.4",
|
||||
"version": "5.14.0",
|
||||
"keywords": [
|
||||
"videojs",
|
||||
"html5",
|
||||
|
||||
+2
-2
@@ -287,7 +287,7 @@
|
||||
[ "git push upstream master", "Push the dev branch changes to the repo" ],
|
||||
[ "git checkout temp-release-branch", "Checkout the temp branch again" ],
|
||||
[ "grunt dist", "Build the dist" ],
|
||||
[ "git add es5 dist --force", "Add the (otherwise ignored) release files" ],
|
||||
[ "git add dist --force", "Add the (otherwise ignored) release files" ],
|
||||
[ "git commit -m 'v{{version}} dist'", "Commit the dist changes" ],
|
||||
[ "git tag -a v{{version}} -m 'v{{version}}'", "Tag the release" ],
|
||||
[ "git push upstream --tags", "Push the new tag to the repo" ],
|
||||
@@ -311,7 +311,7 @@
|
||||
[ "git push upstream stable", "Push the release branch changes to the repo" ],
|
||||
[ "git checkout -b temp-release-branch stable","Create a temporary branch for the dist" ],
|
||||
[ "grunt dist", "Build the dist" ],
|
||||
[ "git add es5 dist --force", "Add the (otherwise ignored) release files" ],
|
||||
[ "git add dist --force", "Add the (otherwise ignored) release files" ],
|
||||
[ "git commit -m 'v{{version}} dist'", "Commit the dist changes" ],
|
||||
[ "git tag -a v{{version}} -m 'v{{version}}'", "Tag the release" ],
|
||||
[ "git push upstream --tags", "Push the new tag to the repo" ],
|
||||
|
||||
externo
+1295
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
+1
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
+23287
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
externo
+15
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+330
@@ -0,0 +1,330 @@
|
||||
WEBVTT
|
||||
|
||||
1
|
||||
00:00:15.042 --> 00:00:18.625
|
||||
...إلى... إلى الشمال يمكن أن نرى
|
||||
...يمكن أن نرى الـ
|
||||
|
||||
2
|
||||
00:00:18.750 --> 00:00:20.958
|
||||
...إلى اليمين يمكن أن نرى الـ
|
||||
|
||||
3
|
||||
00:00:21.000 --> 00:00:23.125
|
||||
طاحنات الرؤوس...
|
||||
|
||||
4
|
||||
00:00:23.208 --> 00:00:25.208
|
||||
كل شيئ آمن
|
||||
آمن كلية
|
||||
|
||||
5
|
||||
00:00:26.333 --> 00:00:28.333
|
||||
إيمو ؟
|
||||
|
||||
6
|
||||
00:00:28.875 --> 00:00:30.958
|
||||
! حذاري
|
||||
|
||||
7
|
||||
00:00:47.125 --> 00:00:49.167
|
||||
هل أصبت ؟
|
||||
|
||||
8
|
||||
00:00:52.125 --> 00:00:54.833
|
||||
...لا أظن ذلك
|
||||
وأنت ؟
|
||||
|
||||
9
|
||||
00:00:55.625 --> 00:00:57.625
|
||||
أنا بخير
|
||||
|
||||
10
|
||||
00:00:57.667 --> 00:01:01.667
|
||||
،قم يا إيمو
|
||||
المكان هنا غير آمن
|
||||
|
||||
11
|
||||
00:01:02.208 --> 00:01:04.083
|
||||
لنذهب
|
||||
|
||||
12
|
||||
00:01:04.167 --> 00:01:06.167
|
||||
وماذا بعد ؟
|
||||
|
||||
13
|
||||
00:01:06.167 --> 00:01:08.583
|
||||
...سترى... سترى
|
||||
|
||||
14
|
||||
00:01:16.167 --> 00:01:18.375
|
||||
إيمو، من هنا
|
||||
|
||||
15
|
||||
00:01:34.958 --> 00:01:37.000
|
||||
! إتبعني
|
||||
|
||||
16
|
||||
00:02:11.125 --> 00:02:13.625
|
||||
! أسرع يا إيمو
|
||||
|
||||
17
|
||||
00:02:48.375 --> 00:02:50.375
|
||||
! لست منتبها
|
||||
|
||||
18
|
||||
00:02:50.750 --> 00:02:54.500
|
||||
...أريد فقط أن أجيب الـ
|
||||
الهاتف...
|
||||
|
||||
19
|
||||
00:02:55.000 --> 00:02:58.500
|
||||
،إيمو، أنظر
|
||||
أقصد أنصت
|
||||
|
||||
20
|
||||
00:02:59.750 --> 00:03:03.292
|
||||
عليك أن تتعلم الإصغاء
|
||||
|
||||
21
|
||||
00:03:03.625 --> 00:03:05.917
|
||||
هذا ليس ضربا من اللهو
|
||||
|
||||
22
|
||||
00:03:06.083 --> 00:03:09.958
|
||||
...إنك
|
||||
أقصد إننا قد نموت بسهولة في هذا المكان
|
||||
|
||||
23
|
||||
00:03:10.208 --> 00:03:14.125
|
||||
...أنصت
|
||||
أنصت إلى أصوات الآلة
|
||||
|
||||
24
|
||||
00:03:18.333 --> 00:03:20.417
|
||||
أنصت إلى نَفَسِك
|
||||
|
||||
25
|
||||
00:04:27.208 --> 00:04:29.250
|
||||
ألا تمل أبدا من هذا ؟
|
||||
|
||||
26
|
||||
00:04:29.583 --> 00:04:31.583
|
||||
أمل ؟!؟
|
||||
نعم -
|
||||
|
||||
27
|
||||
00:04:31.750 --> 00:04:34.667
|
||||
إيمو؛ الآلة في دقتها... مثل الساعة
|
||||
|
||||
28
|
||||
00:04:35.500 --> 00:04:37.708
|
||||
...حركة ناشزة واحدة قد
|
||||
|
||||
29
|
||||
00:04:37.833 --> 00:04:39.875
|
||||
تطرحك معجونا
|
||||
|
||||
30
|
||||
00:04:41.042 --> 00:04:43.083
|
||||
...أو ليست
|
||||
|
||||
31
|
||||
00:04:43.125 --> 00:04:46.542
|
||||
! عجينة يا إيمو
|
||||
أ هذا ما تريد ؟ أن تصبح عجينة ؟
|
||||
|
||||
32
|
||||
00:04:48.083 --> 00:04:50.083
|
||||
أيمو، أ هذا هدفك في الحياة ؟
|
||||
|
||||
33
|
||||
00:04:50.583 --> 00:04:52.667
|
||||
أن تصير عجينة ؟
|
||||
|
||||
34
|
||||
00:05:41.833 --> 00:05:43.875
|
||||
إيمو، أغمض عينيك
|
||||
|
||||
35
|
||||
00:05:44.917 --> 00:05:47.000
|
||||
لماذا ؟
|
||||
! الآن -
|
||||
|
||||
36
|
||||
00:05:53.750 --> 00:05:56.042
|
||||
حسن
|
||||
|
||||
37
|
||||
00:05:59.542 --> 00:06:02.792
|
||||
ماذا ترى إلى شمالك يا إيمو ؟
|
||||
|
||||
38
|
||||
00:06:04.417 --> 00:06:06.500
|
||||
لا شيئ
|
||||
حقا ؟ -
|
||||
|
||||
39
|
||||
00:06:06.542 --> 00:06:08.625
|
||||
لا، لا شيئ البتة
|
||||
|
||||
40
|
||||
00:06:08.625 --> 00:06:12.417
|
||||
وماذا ترى إلى جهتك اليمنى يا إيمو ؟
|
||||
|
||||
41
|
||||
00:06:13.667 --> 00:06:17.833
|
||||
،نفس الشيئ يا بروغ
|
||||
! نفس الشيئ بالضبط؛ لا شيئ
|
||||
|
||||
42
|
||||
00:06:17.875 --> 00:06:19.917
|
||||
عظيم
|
||||
|
||||
43
|
||||
00:06:40.625 --> 00:06:42.958
|
||||
أنصت يا بروغ ! هل تسمع ذلك ؟
|
||||
|
||||
44
|
||||
00:06:43.625 --> 00:06:45.625
|
||||
هل نستطيع الذهاب إلى هناك ؟
|
||||
|
||||
45
|
||||
00:06:45.708 --> 00:06:47.792
|
||||
هناك ؟
|
||||
نعم -
|
||||
|
||||
46
|
||||
00:06:47.833 --> 00:06:49.833
|
||||
إنه غير آمن يا إيمو
|
||||
|
||||
47
|
||||
00:06:49.917 --> 00:06:52.500
|
||||
صدقني، إنه غير آمن
|
||||
|
||||
48
|
||||
00:06:53.292 --> 00:06:55.375
|
||||
...لكن لعلي أستطيع
|
||||
|
||||
49
|
||||
00:06:55.417 --> 00:06:57.417
|
||||
...لكن
|
||||
! لا -
|
||||
|
||||
50
|
||||
00:06:57.667 --> 00:06:59.667
|
||||
! لا
|
||||
|
||||
51
|
||||
00:07:00.875 --> 00:07:03.750
|
||||
هل من أسئلة أخرى يا إيمو ؟
|
||||
|
||||
52
|
||||
00:07:04.250 --> 00:07:06.333
|
||||
لا
|
||||
|
||||
53
|
||||
00:07:09.458 --> 00:07:11.542
|
||||
...إيمو
|
||||
نعم -
|
||||
|
||||
54
|
||||
00:07:11.875 --> 00:07:13.958
|
||||
...لماذا يا إيمو... لماذا
|
||||
|
||||
55
|
||||
00:07:15.292 --> 00:07:18.792
|
||||
لماذا لا تستطيع أن ترى حُسْن هذا المكان
|
||||
|
||||
56
|
||||
00:07:18.833 --> 00:07:20.833
|
||||
...والطريقة التي يعمل بها
|
||||
|
||||
57
|
||||
00:07:20.875 --> 00:07:24.000
|
||||
وكيف... وكيف أنه غاية في الكمال
|
||||
|
||||
58
|
||||
00:07:24.083 --> 00:07:27.417
|
||||
! لا يا بروغ، لا أرى ذلك
|
||||
|
||||
59
|
||||
00:07:27.542 --> 00:07:30.333
|
||||
لا أرى ذلك لأنه لا يوجد شيئ هناك
|
||||
|
||||
60
|
||||
00:07:31.500 --> 00:07:35.333
|
||||
ثم لماذا يجب علي أن أسلم حياتي
|
||||
لشيئ لا وجود له ؟
|
||||
|
||||
61
|
||||
00:07:35.583 --> 00:07:37.625
|
||||
هل يمكنك أن تخبرني ؟
|
||||
|
||||
62
|
||||
00:07:37.708 --> 00:07:39.750
|
||||
! أجبني
|
||||
|
||||
63
|
||||
00:07:43.208 --> 00:07:47.333
|
||||
...بروغ
|
||||
! أنت معتوه يا هذا
|
||||
|
||||
64
|
||||
00:07:47.375 --> 00:07:49.417
|
||||
! إبعد عني
|
||||
|
||||
65
|
||||
00:07:52.583 --> 00:07:55.083
|
||||
! لا يا إيمو ! إنه فخ
|
||||
|
||||
66
|
||||
00:07:55.833 --> 00:07:57.875
|
||||
...إنه فخ
|
||||
|
||||
67
|
||||
00:07:57.917 --> 00:08:01.750
|
||||
إلى جنبك الأيسر يمكنك أن ترى
|
||||
حدائق بابل المعلقة
|
||||
|
||||
68
|
||||
00:08:02.250 --> 00:08:04.292
|
||||
هل تعجبك كفخ ؟
|
||||
|
||||
69
|
||||
00:08:05.458 --> 00:08:07.542
|
||||
لا يا أيمو
|
||||
|
||||
70
|
||||
00:08:09.417 --> 00:08:12.792
|
||||
...إلى جنبك الأيمن يمكنك رؤية
|
||||
حزر ماذا ؟
|
||||
|
||||
71
|
||||
00:08:13.000 --> 00:08:15.042
|
||||
! عملاق رودس
|
||||
|
||||
72
|
||||
00:08:15.125 --> 00:08:16.417
|
||||
! لا
|
||||
|
||||
73
|
||||
00:08:16.458 --> 00:08:20.500
|
||||
،عملاق رودس
|
||||
وهو هنا خصيصا من أجلك يا بروغ
|
||||
|
||||
74
|
||||
00:08:20.583 --> 00:08:22.583
|
||||
فقط من أجلك
|
||||
|
||||
75
|
||||
00:08:51.333 --> 00:08:53.375
|
||||
إنه هناك
|
||||
|
||||
76
|
||||
00:08:53.417 --> 00:08:55.500
|
||||
أنا أؤكد لك... إيمو
|
||||
|
||||
77
|
||||
00:08:57.333 --> 00:09:00.000
|
||||
...إنه
|
||||
+334
@@ -0,0 +1,334 @@
|
||||
WEBVTT
|
||||
|
||||
1
|
||||
00:00:15.000 --> 00:00:17.951
|
||||
At the left we can see...
|
||||
|
||||
2
|
||||
00:00:18.166 --> 00:00:20.083
|
||||
At the right we can see the...
|
||||
|
||||
3
|
||||
00:00:20.119 --> 00:00:21.962
|
||||
...the head-snarlers
|
||||
|
||||
4
|
||||
00:00:21.999 --> 00:00:24.368
|
||||
Everything is safe.
|
||||
Perfectly safe.
|
||||
|
||||
5
|
||||
00:00:24.582 --> 00:00:27.035
|
||||
Emo?
|
||||
|
||||
6
|
||||
00:00:28.206 --> 00:00:29.996
|
||||
Watch out!
|
||||
|
||||
7
|
||||
00:00:47.037 --> 00:00:48.494
|
||||
Are you hurt?
|
||||
|
||||
8
|
||||
00:00:51.994 --> 00:00:53.949
|
||||
I don't think so.
|
||||
You?
|
||||
|
||||
9
|
||||
00:00:55.160 --> 00:00:56.985
|
||||
I'm Ok.
|
||||
|
||||
10
|
||||
00:00:57.118 --> 00:01:01.111
|
||||
Get up.
|
||||
Emo. it's not safe here.
|
||||
|
||||
11
|
||||
00:01:02.034 --> 00:01:03.573
|
||||
Let's go.
|
||||
|
||||
12
|
||||
00:01:03.610 --> 00:01:05.114
|
||||
What's next?
|
||||
|
||||
13
|
||||
00:01:05.200 --> 00:01:09.146
|
||||
You'll see!
|
||||
|
||||
14
|
||||
00:01:16.032 --> 00:01:18.022
|
||||
Emo.
|
||||
This way.
|
||||
|
||||
15
|
||||
00:01:34.237 --> 00:01:35.481
|
||||
Follow me!
|
||||
|
||||
16
|
||||
00:02:11.106 --> 00:02:12.480
|
||||
Hurry Emo!
|
||||
|
||||
17
|
||||
00:02:48.059 --> 00:02:49.930
|
||||
You're not paying attention!
|
||||
|
||||
18
|
||||
00:02:50.142 --> 00:02:54.052
|
||||
I just want to answer the...
|
||||
...phone.
|
||||
|
||||
19
|
||||
00:02:54.974 --> 00:02:57.972
|
||||
Emo. look.
|
||||
I mean listen.
|
||||
|
||||
20
|
||||
00:02:59.140 --> 00:03:02.008
|
||||
You have to learn to listen.
|
||||
|
||||
21
|
||||
00:03:03.140 --> 00:03:04.965
|
||||
This is not some game.
|
||||
|
||||
22
|
||||
00:03:05.056 --> 00:03:09.345
|
||||
You. I mean we.
|
||||
we could easily die out here.
|
||||
|
||||
23
|
||||
00:03:10.014 --> 00:03:13.959
|
||||
Listen.
|
||||
listen to the sounds of the machine.
|
||||
|
||||
24
|
||||
00:03:18.054 --> 00:03:20.009
|
||||
Listen to your breathing.
|
||||
|
||||
25
|
||||
00:04:27.001 --> 00:04:28.956
|
||||
Well. don't you ever get tired of this?
|
||||
|
||||
26
|
||||
00:04:29.084 --> 00:04:30.909
|
||||
Tired?!?
|
||||
|
||||
27
|
||||
00:04:31.126 --> 00:04:34.491
|
||||
Emo. the machine is like clockwork.
|
||||
|
||||
28
|
||||
00:04:35.083 --> 00:04:37.074
|
||||
One move out of place...
|
||||
|
||||
29
|
||||
00:04:37.166 --> 00:04:39.121
|
||||
...and you're ground to a pulp.
|
||||
|
||||
30
|
||||
00:04:40.958 --> 00:04:42.004
|
||||
But isn't it -
|
||||
|
||||
31
|
||||
00:04:42.041 --> 00:04:46.034
|
||||
Pulp. Emo!
|
||||
Is that what you want. pulp?
|
||||
|
||||
32
|
||||
00:04:47.040 --> 00:04:48.995
|
||||
Emo. your goal in life...
|
||||
|
||||
33
|
||||
00:04:50.081 --> 00:04:51.953
|
||||
...pulp?
|
||||
|
||||
34
|
||||
00:05:41.156 --> 00:05:43.028
|
||||
Emo. close your eyes.
|
||||
|
||||
35
|
||||
00:05:44.156 --> 00:05:46.027
|
||||
Why?
|
||||
- Now!
|
||||
|
||||
36
|
||||
00:05:51.155 --> 00:05:52.102
|
||||
Ok.
|
||||
|
||||
37
|
||||
00:05:53.113 --> 00:05:54.688
|
||||
Good.
|
||||
|
||||
38
|
||||
00:05:59.070 --> 00:06:02.103
|
||||
What do you see at your left side. Emo?
|
||||
|
||||
39
|
||||
00:06:04.028 --> 00:06:05.899
|
||||
Nothing.
|
||||
- Really?
|
||||
|
||||
40
|
||||
00:06:06.027 --> 00:06:07.105
|
||||
No. nothing at all.
|
||||
|
||||
41
|
||||
00:06:07.944 --> 00:06:11.984
|
||||
And at your right.
|
||||
what do you see at your right side. Emo?
|
||||
|
||||
42
|
||||
00:06:13.151 --> 00:06:16.102
|
||||
The same Proog. exactly the same...
|
||||
|
||||
43
|
||||
00:06:16.942 --> 00:06:19.098
|
||||
...nothing!
|
||||
- Great.
|
||||
|
||||
44
|
||||
00:06:40.105 --> 00:06:42.724
|
||||
Listen Proog! Do you hear that!
|
||||
|
||||
45
|
||||
00:06:43.105 --> 00:06:44.894
|
||||
Can we go here?
|
||||
|
||||
46
|
||||
00:06:44.979 --> 00:06:47.894
|
||||
There?
|
||||
It isn't safe. Emo.
|
||||
|
||||
47
|
||||
00:06:49.145 --> 00:06:52.013
|
||||
But...
|
||||
- Trust me. it's not.
|
||||
|
||||
48
|
||||
00:06:53.020 --> 00:06:54.145
|
||||
Maybe I could...
|
||||
|
||||
49
|
||||
00:06:54.181 --> 00:06:55.969
|
||||
No.
|
||||
|
||||
50
|
||||
00:06:57.102 --> 00:06:59.934
|
||||
NO!
|
||||
|
||||
51
|
||||
00:07:00.144 --> 00:07:03.058
|
||||
Any further questions. Emo?
|
||||
|
||||
52
|
||||
00:07:03.976 --> 00:07:05.090
|
||||
No.
|
||||
|
||||
53
|
||||
00:07:09.059 --> 00:07:10.089
|
||||
Emo?
|
||||
|
||||
54
|
||||
00:07:11.142 --> 00:07:13.058
|
||||
Emo. why...
|
||||
|
||||
55
|
||||
00:07:13.095 --> 00:07:14.022
|
||||
Emo...
|
||||
|
||||
56
|
||||
00:07:14.058 --> 00:07:18.003
|
||||
...why can't you see
|
||||
the beauty of this place?
|
||||
|
||||
57
|
||||
00:07:18.141 --> 00:07:20.048
|
||||
The way it works.
|
||||
|
||||
58
|
||||
00:07:20.140 --> 00:07:23.895
|
||||
How perfect it is.
|
||||
|
||||
59
|
||||
00:07:23.932 --> 00:07:26.964
|
||||
No. Proog. I don't see.
|
||||
|
||||
60
|
||||
00:07:27.056 --> 00:07:29.970
|
||||
I don't see because there's nothing there.
|
||||
|
||||
61
|
||||
00:07:31.055 --> 00:07:34.965
|
||||
And why should I trust my
|
||||
life to something that isn't there?
|
||||
|
||||
62
|
||||
00:07:35.055 --> 00:07:36.926
|
||||
Well can you tell me that?
|
||||
|
||||
63
|
||||
00:07:37.054 --> 00:07:38.926
|
||||
Answer me!
|
||||
|
||||
64
|
||||
00:07:42.970 --> 00:07:44.000
|
||||
Proog...
|
||||
|
||||
65
|
||||
00:07:45.053 --> 00:07:46.985
|
||||
...you're a sick man!
|
||||
|
||||
66
|
||||
00:07:47.022 --> 00:07:48.918
|
||||
Stay away from me!
|
||||
|
||||
67
|
||||
00:07:52.052 --> 00:07:54.884
|
||||
No! Emo! It's a trap!
|
||||
|
||||
68
|
||||
00:07:55.135 --> 00:07:56.931
|
||||
Hah. it's a trap.
|
||||
|
||||
69
|
||||
00:07:56.968 --> 00:08:01.043
|
||||
At the left side you can see
|
||||
the hanging gardens of Babylon!
|
||||
|
||||
70
|
||||
00:08:01.967 --> 00:08:03.957
|
||||
How's that for a trap?
|
||||
|
||||
71
|
||||
00:08:05.050 --> 00:08:06.922
|
||||
No. Emo.
|
||||
|
||||
72
|
||||
00:08:09.008 --> 00:08:12.088
|
||||
At the right side you can see...
|
||||
...well guess what...
|
||||
|
||||
73
|
||||
00:08:12.924 --> 00:08:14.665
|
||||
...the colossus of Rhodes!
|
||||
|
||||
74
|
||||
00:08:15.132 --> 00:08:16.053
|
||||
No!
|
||||
|
||||
75
|
||||
00:08:16.090 --> 00:08:21.919
|
||||
The colossus of Rhodes
|
||||
and it is here just for you Proog.
|
||||
|
||||
76
|
||||
00:08:51.001 --> 00:08:52.923
|
||||
It is there...
|
||||
|
||||
77
|
||||
00:08:52.959 --> 00:08:56.040
|
||||
I'm telling you.
|
||||
Emo...
|
||||
|
||||
78
|
||||
00:08:57.000 --> 00:08:59.867
|
||||
...it is.
|
||||
+326
@@ -0,0 +1,326 @@
|
||||
WEBVTT
|
||||
|
||||
1
|
||||
00:00:15.042 --> 00:00:18.042
|
||||
左に見えるのは…
|
||||
|
||||
2
|
||||
00:00:18.750 --> 00:00:20.333
|
||||
右に見えるのは…
|
||||
|
||||
3
|
||||
00:00:20.417 --> 00:00:21.917
|
||||
…首刈り機
|
||||
|
||||
4
|
||||
00:00:22.000 --> 00:00:24.625
|
||||
すべて安全
|
||||
完璧に安全だ
|
||||
|
||||
5
|
||||
00:00:26.333 --> 00:00:27.333
|
||||
イーモ?
|
||||
|
||||
6
|
||||
00:00:28.875 --> 00:00:30.250
|
||||
危ない!
|
||||
|
||||
7
|
||||
00:00:47.125 --> 00:00:48.250
|
||||
ケガはないか?
|
||||
|
||||
8
|
||||
00:00:51.917 --> 00:00:53.917
|
||||
ええ、多分…
|
||||
あなたは?
|
||||
|
||||
9
|
||||
00:00:55.625 --> 00:00:57.125
|
||||
わしは平気だ
|
||||
|
||||
10
|
||||
00:00:57.583 --> 00:01:01.667
|
||||
起きてくれイーモ
|
||||
ここは危ない
|
||||
|
||||
11
|
||||
00:01:02.208 --> 00:01:03.667
|
||||
行こう
|
||||
|
||||
12
|
||||
00:01:03.750 --> 00:01:04.917
|
||||
どこに?
|
||||
|
||||
13
|
||||
00:01:05.875 --> 00:01:07.875
|
||||
すぐにわかるさ!
|
||||
|
||||
14
|
||||
00:01:16.167 --> 00:01:18.375
|
||||
イーモ、こっちだ
|
||||
|
||||
15
|
||||
00:01:34.958 --> 00:01:36.958
|
||||
ついて来るんだ!
|
||||
|
||||
16
|
||||
00:02:11.583 --> 00:02:12.792
|
||||
イーモ、早く!
|
||||
|
||||
17
|
||||
00:02:48.375 --> 00:02:50.083
|
||||
むやみにさわるな!
|
||||
|
||||
18
|
||||
00:02:50.750 --> 00:02:54.500
|
||||
僕はただ、電話に
|
||||
…出ようと
|
||||
|
||||
19
|
||||
00:02:55.000 --> 00:02:58.208
|
||||
イーモ、見るんだ…
|
||||
いや、聞いてくれ
|
||||
|
||||
20
|
||||
00:02:59.750 --> 00:03:02.292
|
||||
君は「聞き方」を知る必要がある
|
||||
|
||||
21
|
||||
00:03:03.625 --> 00:03:05.125
|
||||
これは遊びじゃない
|
||||
|
||||
22
|
||||
00:03:06.167 --> 00:03:10.417
|
||||
我々はここでは
|
||||
たやすく死ぬ
|
||||
|
||||
23
|
||||
00:03:11.208 --> 00:03:14.125
|
||||
機械の声を聞くんだ
|
||||
|
||||
24
|
||||
00:03:18.333 --> 00:03:22.417
|
||||
君の息づかいを聞くんだ
|
||||
|
||||
25
|
||||
00:04:27.208 --> 00:04:29.250
|
||||
そんなことして疲れない?
|
||||
|
||||
26
|
||||
00:04:29.583 --> 00:04:31.083
|
||||
疲れる?!
|
||||
|
||||
27
|
||||
00:04:31.750 --> 00:04:34.667
|
||||
この機械は非常に正確で
|
||||
|
||||
28
|
||||
00:04:35.500 --> 00:04:37.708
|
||||
一つ間違えば…
|
||||
|
||||
29
|
||||
00:04:37.833 --> 00:04:40.792
|
||||
…地面に落ちてバラバラだ
|
||||
|
||||
30
|
||||
00:04:41.042 --> 00:04:42.375
|
||||
え、でも―
|
||||
|
||||
31
|
||||
00:04:42.417 --> 00:04:46.542
|
||||
バラバラだぞ、イーモ!
|
||||
それでいいのか?
|
||||
|
||||
32
|
||||
00:04:48.083 --> 00:04:50.000
|
||||
バラバラで死ぬんだぞ?
|
||||
|
||||
33
|
||||
00:04:50.583 --> 00:04:52.250
|
||||
バラバラだ!
|
||||
|
||||
34
|
||||
00:05:41.833 --> 00:05:43.458
|
||||
イーモ、目を閉じるんだ
|
||||
|
||||
35
|
||||
00:05:44.917 --> 00:05:46.583
|
||||
なぜ?
|
||||
―早く!
|
||||
|
||||
36
|
||||
00:05:53.750 --> 00:05:56.042
|
||||
それでいい
|
||||
|
||||
37
|
||||
00:05:59.542 --> 00:06:03.792
|
||||
左に見えるものは何だ、イーモ?
|
||||
|
||||
38
|
||||
00:06:04.417 --> 00:06:06.000
|
||||
え…何も
|
||||
―本当か?
|
||||
|
||||
39
|
||||
00:06:06.333 --> 00:06:07.917
|
||||
全く何も
|
||||
|
||||
40
|
||||
00:06:08.042 --> 00:06:12.833
|
||||
では右は
|
||||
何か見えるか、イーモ?
|
||||
|
||||
41
|
||||
00:06:13.875 --> 00:06:16.917
|
||||
同じだよプルーグ、全く同じ…
|
||||
|
||||
42
|
||||
00:06:17.083 --> 00:06:18.583
|
||||
何もない!
|
||||
|
||||
43
|
||||
00:06:40.625 --> 00:06:43.208
|
||||
プルーグ!何か聞こえない?
|
||||
|
||||
44
|
||||
00:06:43.625 --> 00:06:45.042
|
||||
あそこに行かないか?
|
||||
|
||||
45
|
||||
00:06:45.208 --> 00:06:48.042
|
||||
あそこ?
|
||||
…安全じゃない
|
||||
|
||||
46
|
||||
00:06:49.917 --> 00:06:52.500
|
||||
でも…
|
||||
―本当に危ないぞ
|
||||
|
||||
47
|
||||
00:06:53.292 --> 00:06:54.792
|
||||
大丈夫だよ…
|
||||
|
||||
48
|
||||
00:06:54.833 --> 00:06:56.333
|
||||
だめだ
|
||||
|
||||
49
|
||||
00:06:57.667 --> 00:07:00.167
|
||||
だめだ!
|
||||
|
||||
50
|
||||
00:07:00.875 --> 00:07:03.750
|
||||
まだ続ける気か、イーモ?
|
||||
|
||||
51
|
||||
00:07:04.250 --> 00:07:05.917
|
||||
いいえ…
|
||||
|
||||
52
|
||||
00:07:09.458 --> 00:07:10.833
|
||||
イーモ?
|
||||
|
||||
53
|
||||
00:07:11.875 --> 00:07:13.542
|
||||
イーモ、なぜ…
|
||||
|
||||
54
|
||||
00:07:13.583 --> 00:07:14.458
|
||||
イーモ…
|
||||
|
||||
55
|
||||
00:07:14.500 --> 00:07:18.500
|
||||
…なぜここの美しさが
|
||||
見えない?
|
||||
|
||||
56
|
||||
00:07:18.833 --> 00:07:20.750
|
||||
仕組みがこんなに…
|
||||
|
||||
57
|
||||
00:07:20.875 --> 00:07:24.000
|
||||
こんなに完全なのに
|
||||
|
||||
58
|
||||
00:07:24.083 --> 00:07:27.417
|
||||
もういいよ!プルーグ!
|
||||
|
||||
59
|
||||
00:07:27.542 --> 00:07:30.333
|
||||
そこには何もないんだから
|
||||
|
||||
60
|
||||
00:07:31.500 --> 00:07:35.333
|
||||
なぜ命を「ない」物に
|
||||
ゆだねなきゃ?
|
||||
|
||||
61
|
||||
00:07:35.583 --> 00:07:37.125
|
||||
教えてくれないか?
|
||||
|
||||
62
|
||||
00:07:37.500 --> 00:07:39.167
|
||||
さあ!
|
||||
|
||||
63
|
||||
00:07:43.208 --> 00:07:44.583
|
||||
プルーグ…
|
||||
|
||||
64
|
||||
00:07:45.500 --> 00:07:47.333
|
||||
あなたは病気なんだ
|
||||
|
||||
65
|
||||
00:07:47.375 --> 00:07:49.208
|
||||
僕から離れてくれ
|
||||
|
||||
66
|
||||
00:07:52.583 --> 00:07:55.083
|
||||
いかん!イーモ!ワナだ!
|
||||
|
||||
67
|
||||
00:07:55.833 --> 00:07:57.167
|
||||
ワナだ? ふーん
|
||||
|
||||
68
|
||||
00:07:57.208 --> 00:08:01.750
|
||||
左に何が見える?
|
||||
バビロンの空中庭園!
|
||||
|
||||
69
|
||||
00:08:02.250 --> 00:08:04.292
|
||||
これがワナとでも?
|
||||
|
||||
70
|
||||
00:08:05.458 --> 00:08:07.125
|
||||
だめだ、イーモ
|
||||
|
||||
71
|
||||
00:08:09.417 --> 00:08:12.792
|
||||
右にあるのは…
|
||||
…すごい!…
|
||||
|
||||
72
|
||||
00:08:13.000 --> 00:08:14.750
|
||||
…ロードス島の巨像だ!
|
||||
|
||||
73
|
||||
00:08:15.833 --> 00:08:16.708
|
||||
やめろ!
|
||||
|
||||
74
|
||||
00:08:16.750 --> 00:08:22.167
|
||||
この巨像はあなたの物
|
||||
プルーグ、あなたのだよ
|
||||
|
||||
75
|
||||
00:08:51.333 --> 00:08:53.167
|
||||
いってるじゃないか…
|
||||
|
||||
76
|
||||
00:08:53.208 --> 00:08:55.500
|
||||
そこにあるって、イーモ…
|
||||
|
||||
77
|
||||
00:08:57.333 --> 00:09:00.000
|
||||
…あるって
|
||||
+356
@@ -0,0 +1,356 @@
|
||||
WEBVTT
|
||||
|
||||
1
|
||||
00:00:14.958 --> 00:00:17.833
|
||||
Слева мы видим...
|
||||
|
||||
2
|
||||
00:00:18.458 --> 00:00:20.208
|
||||
справа мы видим...
|
||||
|
||||
3
|
||||
00:00:20.333 --> 00:00:21.875
|
||||
...голово-клацов.
|
||||
|
||||
4
|
||||
00:00:22.000 --> 00:00:24.583
|
||||
всё в порядке.
|
||||
в полном порядке.
|
||||
|
||||
5
|
||||
00:00:26.333 --> 00:00:27.333
|
||||
Имо?
|
||||
|
||||
6
|
||||
00:00:28.833 --> 00:00:30.250
|
||||
Осторожно!
|
||||
|
||||
7
|
||||
00:00:47.125 --> 00:00:48.250
|
||||
Ты не ранен?
|
||||
|
||||
8
|
||||
00:00:51.875 --> 00:00:53.875
|
||||
Вроде нет...
|
||||
а ты?
|
||||
|
||||
9
|
||||
00:00:55.583 --> 00:00:57.125
|
||||
Я в порядке.
|
||||
|
||||
10
|
||||
00:00:57.542 --> 00:01:01.625
|
||||
Вставай.
|
||||
Имо. здесь не безопасно.
|
||||
|
||||
11
|
||||
00:01:02.208 --> 00:01:03.625
|
||||
Пойдём.
|
||||
|
||||
12
|
||||
00:01:03.708 --> 00:01:05.708
|
||||
Что дальше?
|
||||
|
||||
13
|
||||
00:01:05.833 --> 00:01:07.833
|
||||
Ты увидишь!
|
||||
|
||||
14
|
||||
00:01:08.000 --> 00:01:08.833
|
||||
Ты увидишь...
|
||||
|
||||
15
|
||||
00:01:16.167 --> 00:01:18.375
|
||||
Имо. сюда.
|
||||
|
||||
16
|
||||
00:01:34.917 --> 00:01:35.750
|
||||
За мной!
|
||||
|
||||
17
|
||||
00:02:11.542 --> 00:02:12.750
|
||||
Имо. быстрее!
|
||||
|
||||
18
|
||||
00:02:48.375 --> 00:02:50.083
|
||||
Ты не обращаешь внимания!
|
||||
|
||||
19
|
||||
00:02:50.708 --> 00:02:54.500
|
||||
Я только хотел ответить на ...
|
||||
...звонок.
|
||||
|
||||
20
|
||||
00:02:55.000 --> 00:02:58.208
|
||||
Имо. смотри.
|
||||
то есть слушай...
|
||||
|
||||
21
|
||||
00:02:59.708 --> 00:03:02.292
|
||||
Ты должен учиться слушать.
|
||||
|
||||
22
|
||||
00:03:03.250 --> 00:03:05.333
|
||||
Это не какая-нибудь игра.
|
||||
|
||||
23
|
||||
00:03:06.000 --> 00:03:08.833
|
||||
Ты. вернее мы. легко можем погибнуть здесь.
|
||||
|
||||
24
|
||||
00:03:10.000 --> 00:03:11.167
|
||||
Слушай...
|
||||
|
||||
25
|
||||
00:03:11.667 --> 00:03:14.125
|
||||
слушай звуки машины.
|
||||
|
||||
26
|
||||
00:03:18.333 --> 00:03:20.417
|
||||
Слушай своё дыхание.
|
||||
|
||||
27
|
||||
00:04:27.208 --> 00:04:29.250
|
||||
И не надоест тебе это?
|
||||
|
||||
28
|
||||
00:04:29.542 --> 00:04:31.083
|
||||
Надоест?!?
|
||||
|
||||
29
|
||||
00:04:31.708 --> 00:04:34.625
|
||||
Имо! Машина -
|
||||
она как часовой механизм.
|
||||
|
||||
30
|
||||
00:04:35.500 --> 00:04:37.667
|
||||
Одно движение не туда...
|
||||
|
||||
31
|
||||
00:04:37.792 --> 00:04:39.750
|
||||
...и тебя размелют в месиво!
|
||||
|
||||
32
|
||||
00:04:41.042 --> 00:04:42.375
|
||||
А разве это не -
|
||||
|
||||
33
|
||||
00:04:42.417 --> 00:04:46.500
|
||||
Месиво. Имо!
|
||||
ты этого хочешь? месиво?
|
||||
|
||||
34
|
||||
00:04:48.083 --> 00:04:50.000
|
||||
Имо. твоя цель в жизни?
|
||||
|
||||
35
|
||||
00:04:50.542 --> 00:04:52.250
|
||||
Месиво!
|
||||
|
||||
36
|
||||
00:05:41.792 --> 00:05:43.458
|
||||
Имо. закрой глаза.
|
||||
|
||||
37
|
||||
00:05:44.875 --> 00:05:46.542
|
||||
Зачем?
|
||||
- Ну же!
|
||||
|
||||
38
|
||||
00:05:51.500 --> 00:05:52.333
|
||||
Ладно.
|
||||
|
||||
39
|
||||
00:05:53.708 --> 00:05:56.042
|
||||
Хорошо.
|
||||
|
||||
40
|
||||
00:05:59.500 --> 00:06:02.750
|
||||
Что ты видишь слева от себя. Имо?
|
||||
|
||||
41
|
||||
00:06:04.417 --> 00:06:06.000
|
||||
Ничего.
|
||||
- Точно?
|
||||
|
||||
42
|
||||
00:06:06.333 --> 00:06:07.875
|
||||
да. совсем ничего.
|
||||
|
||||
43
|
||||
00:06:08.042 --> 00:06:12.708
|
||||
А справа от себя.
|
||||
что ты видишь справа от себя. Имо?
|
||||
|
||||
44
|
||||
00:06:13.833 --> 00:06:16.875
|
||||
Да то же Пруг. в точности то же...
|
||||
|
||||
45
|
||||
00:06:17.042 --> 00:06:18.500
|
||||
Ничего!
|
||||
|
||||
46
|
||||
00:06:18.667 --> 00:06:19.500
|
||||
Прекрасно...
|
||||
|
||||
47
|
||||
00:06:40.583 --> 00:06:42.917
|
||||
Прислушайся. Пруг! Ты слышишь это?
|
||||
|
||||
48
|
||||
00:06:43.583 --> 00:06:45.042
|
||||
Может. мы пойдём туда?
|
||||
|
||||
49
|
||||
00:06:45.208 --> 00:06:48.042
|
||||
Туда?
|
||||
Это не безопасно. Имо.
|
||||
|
||||
50
|
||||
00:06:49.875 --> 00:06:52.500
|
||||
Но...
|
||||
- Поверь мне. это так.
|
||||
|
||||
51
|
||||
00:06:53.292 --> 00:06:54.750
|
||||
Может я бы ...
|
||||
|
||||
52
|
||||
00:06:54.792 --> 00:06:56.333
|
||||
Нет.
|
||||
|
||||
53
|
||||
00:06:57.625 --> 00:06:59.583
|
||||
- Но...
|
||||
- НЕТ!
|
||||
|
||||
54
|
||||
00:06:59.708 --> 00:07:00.833
|
||||
Нет!
|
||||
|
||||
55
|
||||
00:07:00.833 --> 00:07:03.708
|
||||
Ещё вопросы. Имо?
|
||||
|
||||
56
|
||||
00:07:04.250 --> 00:07:05.875
|
||||
Нет.
|
||||
|
||||
57
|
||||
00:07:09.458 --> 00:07:10.792
|
||||
Имо?
|
||||
|
||||
58
|
||||
00:07:11.833 --> 00:07:13.500
|
||||
Имо. почему...
|
||||
|
||||
59
|
||||
00:07:13.542 --> 00:07:14.458
|
||||
Имо...
|
||||
|
||||
60
|
||||
00:07:14.500 --> 00:07:18.500
|
||||
...почему? почему ты не видишь
|
||||
красоты этого места?
|
||||
|
||||
61
|
||||
00:07:18.792 --> 00:07:20.708
|
||||
То как оно работает.
|
||||
|
||||
62
|
||||
00:07:20.833 --> 00:07:24.000
|
||||
Как совершенно оно.
|
||||
|
||||
63
|
||||
00:07:24.083 --> 00:07:27.417
|
||||
Нет. Пруг. я не вижу.
|
||||
|
||||
64
|
||||
00:07:27.500 --> 00:07:30.333
|
||||
Я не вижу. потому что здесь ничего нет.
|
||||
|
||||
65
|
||||
00:07:31.375 --> 00:07:35.333
|
||||
И почему я должен доверять свою жизнь
|
||||
чему-то. чего здесь нет?
|
||||
|
||||
66
|
||||
00:07:35.542 --> 00:07:37.125
|
||||
это ты мне можешь сказать?
|
||||
|
||||
67
|
||||
00:07:37.500 --> 00:07:39.167
|
||||
Ответь мне!
|
||||
|
||||
68
|
||||
00:07:43.208 --> 00:07:44.542
|
||||
Пруг...
|
||||
|
||||
69
|
||||
00:07:45.500 --> 00:07:47.333
|
||||
Ты просто больной!
|
||||
|
||||
70
|
||||
00:07:47.375 --> 00:07:48.500
|
||||
Отстань от меня.
|
||||
|
||||
71
|
||||
00:07:48.625 --> 00:07:49.917
|
||||
Имо...
|
||||
|
||||
72
|
||||
00:07:52.542 --> 00:07:55.083
|
||||
Нет! Имо! Это ловушка!
|
||||
|
||||
73
|
||||
00:07:55.792 --> 00:07:57.167
|
||||
Это ловушка!
|
||||
|
||||
74
|
||||
00:07:57.208 --> 00:08:01.708
|
||||
Слева от себя вы можете увидеть
|
||||
Висящие сады Семирамиды!
|
||||
|
||||
75
|
||||
00:08:02.250 --> 00:08:04.292
|
||||
Сойдёт за ловушку?
|
||||
|
||||
76
|
||||
00:08:05.458 --> 00:08:07.125
|
||||
Нет. Имо.
|
||||
|
||||
77
|
||||
00:08:09.417 --> 00:08:12.750
|
||||
Справа от себя вы можете увидеть...
|
||||
...угадай кого...
|
||||
|
||||
78
|
||||
00:08:13.000 --> 00:08:14.708
|
||||
...Колосса Родосского!
|
||||
|
||||
79
|
||||
00:08:15.500 --> 00:08:16.625
|
||||
Нет!
|
||||
|
||||
80
|
||||
00:08:16.667 --> 00:08:21.125
|
||||
Колосс Родосский!
|
||||
И он здесь специально для тебя. Пруг.
|
||||
|
||||
81
|
||||
00:08:21.167 --> 00:08:22.208
|
||||
Специально для тебя...
|
||||
|
||||
82
|
||||
00:08:51.333 --> 00:08:53.167
|
||||
Она здесь есть!
|
||||
|
||||
83
|
||||
00:08:53.208 --> 00:08:55.500
|
||||
Говорю тебе.
|
||||
Имо...
|
||||
|
||||
84
|
||||
00:08:57.333 --> 00:09:00.000
|
||||
...она есть... есть...
|
||||
+349
@@ -0,0 +1,349 @@
|
||||
WEBVTT
|
||||
|
||||
1
|
||||
00:00:15.042 --> 00:00:18.250
|
||||
Till vänster kan vi se...
|
||||
Ser vi...
|
||||
|
||||
2
|
||||
00:00:18.708 --> 00:00:20.333
|
||||
Till höger ser vi...
|
||||
|
||||
3
|
||||
00:00:20.417 --> 00:00:21.958
|
||||
...huvudkaparna.
|
||||
|
||||
4
|
||||
00:00:22.000 --> 00:00:24.792
|
||||
Allt är säkert.
|
||||
alldeles ofarligt.
|
||||
|
||||
5
|
||||
00:00:24.917 --> 00:00:26.833
|
||||
Emo?
|
||||
|
||||
6
|
||||
00:00:28.750 --> 00:00:30.167
|
||||
Se upp!
|
||||
|
||||
7
|
||||
00:00:46.708 --> 00:00:48.750
|
||||
Är du skadad?
|
||||
|
||||
8
|
||||
00:00:51.875 --> 00:00:54.458
|
||||
Jag tror inte det...
|
||||
Är du?
|
||||
|
||||
9
|
||||
00:00:55.292 --> 00:00:57.333
|
||||
Jag är ok.
|
||||
|
||||
10
|
||||
00:00:57.542 --> 00:01:01.625
|
||||
Res dig upp Emo.
|
||||
Det är inte säkert här.
|
||||
|
||||
11
|
||||
00:01:02.208 --> 00:01:03.625
|
||||
Kom så går vi.
|
||||
|
||||
12
|
||||
00:01:03.708 --> 00:01:05.708
|
||||
Vad nu då?
|
||||
|
||||
13
|
||||
00:01:05.833 --> 00:01:07.833
|
||||
Du får se...
|
||||
|
||||
14
|
||||
00:01:08.042 --> 00:01:10.417
|
||||
Du får se.
|
||||
|
||||
15
|
||||
00:01:15.958 --> 00:01:18.375
|
||||
Emo. den här vägen.
|
||||
|
||||
16
|
||||
00:01:34.417 --> 00:01:36.750
|
||||
Följ efter mig!
|
||||
|
||||
17
|
||||
00:02:11.250 --> 00:02:13.250
|
||||
Skynda dig. Emo!
|
||||
|
||||
18
|
||||
00:02:48.375 --> 00:02:50.583
|
||||
Du är inte uppmärksam!
|
||||
|
||||
19
|
||||
00:02:50.708 --> 00:02:54.500
|
||||
Jag vill bara svara...
|
||||
... i telefonen.
|
||||
|
||||
20
|
||||
00:02:54.500 --> 00:02:58.208
|
||||
Emo. se här...
|
||||
Lyssna menar jag.
|
||||
|
||||
21
|
||||
00:02:59.708 --> 00:03:02.292
|
||||
Du måste lära dig att lyssna.
|
||||
|
||||
22
|
||||
00:03:03.292 --> 00:03:05.208
|
||||
Det här är ingen lek.
|
||||
|
||||
23
|
||||
00:03:05.250 --> 00:03:08.917
|
||||
Du... Jag menar vi.
|
||||
vi skulle kunna dö här ute.
|
||||
|
||||
24
|
||||
00:03:09.917 --> 00:03:11.417
|
||||
Lyssna...
|
||||
|
||||
25
|
||||
00:03:11.708 --> 00:03:14.833
|
||||
Lyssna på ljuden från maskinen.
|
||||
|
||||
26
|
||||
00:03:18.125 --> 00:03:21.417
|
||||
Lyssna på dina andetag.
|
||||
|
||||
27
|
||||
00:04:26.625 --> 00:04:29.250
|
||||
Tröttnar du aldrig på det här?
|
||||
|
||||
28
|
||||
00:04:29.542 --> 00:04:31.083
|
||||
Tröttnar!?
|
||||
|
||||
29
|
||||
00:04:31.208 --> 00:04:33.458
|
||||
Emo. maskinen är som...
|
||||
|
||||
30
|
||||
00:04:33.458 --> 00:04:35.333
|
||||
Som ett urverk.
|
||||
|
||||
31
|
||||
00:04:35.417 --> 00:04:37.167
|
||||
Ett felsteg...
|
||||
|
||||
32
|
||||
00:04:37.208 --> 00:04:39.750
|
||||
...och du blir krossad.
|
||||
|
||||
33
|
||||
00:04:41.042 --> 00:04:42.292
|
||||
Men är det inte -
|
||||
|
||||
34
|
||||
00:04:42.292 --> 00:04:47.000
|
||||
Krossad. Emo!
|
||||
Är det vad du vill bli? Krossad till mos?
|
||||
|
||||
35
|
||||
00:04:47.500 --> 00:04:50.542
|
||||
Emo. är det ditt mål i livet?
|
||||
|
||||
36
|
||||
00:04:50.667 --> 00:04:53.250
|
||||
Att bli mos!?
|
||||
|
||||
37
|
||||
00:05:41.375 --> 00:05:43.458
|
||||
Emo. blunda.
|
||||
|
||||
38
|
||||
00:05:44.375 --> 00:05:46.542
|
||||
Varför då?
|
||||
- Blunda!
|
||||
|
||||
39
|
||||
00:05:51.292 --> 00:05:55.042
|
||||
Ok.
|
||||
- Bra.
|
||||
|
||||
40
|
||||
00:05:59.500 --> 00:06:02.750
|
||||
Vad ser du till vänster om dig Emo?
|
||||
|
||||
41
|
||||
00:06:04.125 --> 00:06:06.292
|
||||
Ingenting.
|
||||
- Säker?
|
||||
|
||||
42
|
||||
00:06:06.333 --> 00:06:07.958
|
||||
Ingenting alls.
|
||||
|
||||
43
|
||||
00:06:08.042 --> 00:06:12.625
|
||||
Jaså. och till höger om dig...
|
||||
Vad ser du där. Emo?
|
||||
|
||||
44
|
||||
00:06:13.750 --> 00:06:15.583
|
||||
Samma där Proog...
|
||||
|
||||
45
|
||||
00:06:15.583 --> 00:06:18.083
|
||||
Exakt samma där. ingenting!
|
||||
|
||||
46
|
||||
00:06:18.083 --> 00:06:19.667
|
||||
Perfekt.
|
||||
|
||||
47
|
||||
00:06:40.500 --> 00:06:42.917
|
||||
Lyssna Proog! Hör du?
|
||||
|
||||
48
|
||||
00:06:43.500 --> 00:06:45.125
|
||||
Kan vi gå dit?
|
||||
|
||||
49
|
||||
00:06:45.208 --> 00:06:48.125
|
||||
Gå dit?
|
||||
Det är inte tryggt.
|
||||
|
||||
50
|
||||
00:06:49.583 --> 00:06:52.583
|
||||
Men. men...
|
||||
- Tro mig. det inte säkert.
|
||||
|
||||
51
|
||||
00:06:53.000 --> 00:06:54.292
|
||||
Men kanske om jag -
|
||||
|
||||
52
|
||||
00:06:54.292 --> 00:06:56.333
|
||||
Nej.
|
||||
|
||||
53
|
||||
00:06:57.208 --> 00:07:00.167
|
||||
Men -
|
||||
- Nej. NEJ!
|
||||
|
||||
54
|
||||
00:07:00.917 --> 00:07:03.792
|
||||
Några fler frågor Emo?
|
||||
|
||||
55
|
||||
00:07:04.250 --> 00:07:05.875
|
||||
Nej.
|
||||
|
||||
56
|
||||
00:07:09.542 --> 00:07:11.375
|
||||
Emo?
|
||||
- Ja?
|
||||
|
||||
57
|
||||
00:07:11.542 --> 00:07:15.667
|
||||
Emo. varför...
|
||||
|
||||
58
|
||||
00:07:15.792 --> 00:07:18.583
|
||||
Varför kan du inte se skönheten i det här?
|
||||
|
||||
59
|
||||
00:07:18.792 --> 00:07:21.708
|
||||
Hur det fungerar.
|
||||
|
||||
60
|
||||
00:07:21.833 --> 00:07:24.000
|
||||
Hur perfekt det är.
|
||||
|
||||
61
|
||||
00:07:24.083 --> 00:07:27.333
|
||||
Nej Proog. jag kan inte se det.
|
||||
|
||||
62
|
||||
00:07:27.333 --> 00:07:30.333
|
||||
Jag ser det inte. för det finns inget där.
|
||||
|
||||
63
|
||||
00:07:31.292 --> 00:07:35.333
|
||||
Och varför skulle jag lägga mitt liv
|
||||
i händerna på något som inte finns?
|
||||
|
||||
64
|
||||
00:07:35.333 --> 00:07:37.083
|
||||
Kan du berätta det för mig?
|
||||
- Emo...
|
||||
|
||||
65
|
||||
00:07:37.083 --> 00:07:39.167
|
||||
Svara mig!
|
||||
|
||||
66
|
||||
00:07:43.500 --> 00:07:45.208
|
||||
Proog...
|
||||
|
||||
67
|
||||
00:07:45.208 --> 00:07:47.083
|
||||
Du är inte frisk!
|
||||
|
||||
68
|
||||
00:07:47.167 --> 00:07:49.292
|
||||
Håll dig borta från mig!
|
||||
|
||||
69
|
||||
00:07:52.292 --> 00:07:55.083
|
||||
Nej! Emo!
|
||||
Det är en fälla!
|
||||
|
||||
70
|
||||
00:07:55.375 --> 00:07:57.208
|
||||
Heh. det är en fälla.
|
||||
|
||||
71
|
||||
00:07:57.208 --> 00:08:01.708
|
||||
På vänster sida ser vi...
|
||||
Babylons hängande trädgårdar!
|
||||
|
||||
72
|
||||
00:08:01.958 --> 00:08:04.000
|
||||
Vad sägs om den fällan?
|
||||
|
||||
73
|
||||
00:08:05.458 --> 00:08:07.333
|
||||
Nej. Emo.
|
||||
|
||||
74
|
||||
00:08:08.917 --> 00:08:12.667
|
||||
Till höger ser vi...
|
||||
Gissa!
|
||||
|
||||
75
|
||||
00:08:12.750 --> 00:08:15.125
|
||||
Rhodos koloss!
|
||||
|
||||
76
|
||||
00:08:15.375 --> 00:08:16.500
|
||||
Nej!
|
||||
|
||||
77
|
||||
00:08:16.500 --> 00:08:20.250
|
||||
Kolossen på Rhodos!
|
||||
Och den är här för din skull. Proog...
|
||||
|
||||
78
|
||||
00:08:20.250 --> 00:08:23.250
|
||||
Bara för din skull.
|
||||
|
||||
79
|
||||
00:08:50.917 --> 00:08:53.250
|
||||
Den är där...
|
||||
|
||||
80
|
||||
00:08:53.625 --> 00:08:56.417
|
||||
Tro mig.
|
||||
Emo...
|
||||
|
||||
81
|
||||
00:08:57.000 --> 00:09:00.000
|
||||
Det är den.
|
||||
Det är den...
|
||||
@@ -0,0 +1,44 @@
|
||||
WEBVTT
|
||||
|
||||
NOTE Created by Owen Edwards 2015. http://creativecommons.org/licenses/by/2.5/
|
||||
NOTE Based on 'finalbreakdown.rtf', part of the prepoduction notes, which are:
|
||||
NOTE (c) Copyright 2006, Blender Foundation /
|
||||
NOTE Netherlands Media Art Institute /
|
||||
NOTE www.elephantsdream.org
|
||||
|
||||
1
|
||||
00:00:00.000 --> 00:00:27.500
|
||||
Prologue
|
||||
|
||||
2
|
||||
00:00:27.500 --> 00:01:10.000
|
||||
Switchboard trap
|
||||
|
||||
3
|
||||
00:01:10.000 --> 00:03:25.000
|
||||
Telephone/Lecture
|
||||
|
||||
4
|
||||
00:03:25.000 --> 00:04:52.000
|
||||
Typewriter
|
||||
|
||||
5
|
||||
00:04:52.000 --> 00:06:19.500
|
||||
Proog shows Emo stuff
|
||||
|
||||
6
|
||||
00:06:19.500 --> 00:07:09.000
|
||||
Which way
|
||||
|
||||
7
|
||||
00:07:09.000 --> 00:07:45.000
|
||||
Emo flips out
|
||||
|
||||
8
|
||||
00:07:45.000 --> 00:09:25.000
|
||||
Emo creates
|
||||
|
||||
9
|
||||
00:09:25.000 --> 00:10:53.000
|
||||
Closing credits
|
||||
|
||||
@@ -0,0 +1,280 @@
|
||||
WEBVTT
|
||||
License: CC BY 4.0 http://creativecommons.org/licenses/by/4.0/
|
||||
Author: Silvia Pfeiffer
|
||||
|
||||
1
|
||||
00:00:00.000 --> 00:00:05.000
|
||||
The orange open movie project presents
|
||||
|
||||
2
|
||||
00:00:05.010 --> 00:00:12.000
|
||||
Introductory titles are showing on the background of a water pool with fishes swimming and mechanical objects lying on a stone floor.
|
||||
|
||||
3
|
||||
00:00:12.010 --> 00:00:14.800
|
||||
elephants dream
|
||||
|
||||
4
|
||||
00:00:26.100 --> 00:00:28.206
|
||||
Two people stand on a small bridge.
|
||||
|
||||
5
|
||||
00:00:30.010 --> 00:00:40.000
|
||||
The old man, Proog, shoves the younger and less experienced Emo on the ground to save him from being mowed down by a barrage of jack plugs that whir back and forth between the two massive switch-board-like walls.
|
||||
|
||||
6
|
||||
00:00:40.000 --> 00:00:47.000
|
||||
The plugs are oblivious of the two, endlessly channeling streams of bizarre sounds and data.
|
||||
|
||||
7
|
||||
00:00:48.494 --> 00:00:51.994
|
||||
Emo sits on the bridge and checks his limbs.
|
||||
|
||||
8
|
||||
00:01:09.150 --> 00:01:16.030
|
||||
After the squealing plugs move on, Proog makes sure that Emo is unharmed and urges him onwards through a crack in one of the plug-walls.
|
||||
|
||||
9
|
||||
00:01:18.050 --> 00:01:24.000
|
||||
They walk through the narrow hall into a massive room that fades away into blackness on all sides.
|
||||
|
||||
10
|
||||
00:01:24.050 --> 00:01:34.200
|
||||
Only one path is visible, suspended in mid-air that runs between thousands of dangling electric cables on which sit crowds of robin-like robotic birds.
|
||||
|
||||
11
|
||||
00:01:36.000 --> 00:01:40.000
|
||||
As Proog and Emo enter the room, the birds begin to wake up and notice them.
|
||||
|
||||
12
|
||||
00:01:42.000 --> 00:01:50.000
|
||||
Realizing the danger, Proog grabs Emo by the arm.
|
||||
|
||||
13
|
||||
00:01:50.050 --> 00:02:00.000
|
||||
They run along the increasingly bizarre path as the birds begin to swarm.
|
||||
|
||||
14
|
||||
00:02:00.050 --> 00:02:11.000
|
||||
All sound is blocked out by the birds which are making the same noises as the jack-plugs, garbled screaming and obscure sentences and static.
|
||||
|
||||
15
|
||||
00:02:12.600 --> 00:02:17.000
|
||||
The path dead-ends, stopping in the middle of no-where above the infinite drop.
|
||||
|
||||
16
|
||||
00:02:17.600 --> 00:02:22.000
|
||||
Proog turns around as the birds reach them and begin to dive-bomb at them.
|
||||
|
||||
17
|
||||
00:02:22.600 --> 00:02:28.000
|
||||
At the last moment, Proog takes out an old candlestick phone and the birds dive into the speaker piece.
|
||||
|
||||
18
|
||||
00:02:28.600 --> 00:02:31.000
|
||||
The screen cuts to black.
|
||||
|
||||
19
|
||||
00:02:31.600 --> 00:02:38.000
|
||||
In the next scene, Proog stands at one end of a room, suspiciously watching what is probably the same candlestick phone, which is ringing.
|
||||
|
||||
20
|
||||
00:02:38.500 --> 00:02:41.000
|
||||
Emo watches from the other side of the room.
|
||||
|
||||
21
|
||||
00:02:41.500 --> 00:02:43.000
|
||||
The phone continues to ring.
|
||||
|
||||
22
|
||||
00:02:43.500 --> 00:02:48.000
|
||||
After a while Emo approaches it to answer it, but Proog slaps his hand away.
|
||||
|
||||
23
|
||||
00:02:57.972 --> 00:02:59.100
|
||||
Proog takes the ear-piece off the hook.
|
||||
|
||||
24
|
||||
00:03:13.500 --> 00:03:18.054
|
||||
The phone speaker revealed a mass of clawed, fleshy polyps which scream and gibber obscenely.
|
||||
|
||||
25
|
||||
00:03:25.000 --> 00:03:33.000
|
||||
There is a solemn silence as Emo looks around the room and the technical objects therein.
|
||||
|
||||
26
|
||||
00:03:38.000 --> 00:03:44.000
|
||||
Emo laughs disbelievingly and Proog walks away.
|
||||
|
||||
27
|
||||
00:03:46.000 --> 00:03:54.000
|
||||
In the next scene, the two enter another massive black room.
|
||||
|
||||
28
|
||||
00:03:54.500 --> 00:04:04.000
|
||||
There is no path, the entry platform is the only structure that seems to be there except for another exit, lit distantly at the far side.
|
||||
|
||||
29
|
||||
00:04:04.500 --> 00:04:14.000
|
||||
Proog takes a step forward into the void, and his feet are suddenly caught by giant typewriter arms that rocket up out of the blackness to catch his feet as he dances across mid-air.
|
||||
|
||||
30
|
||||
00:04:14.500 --> 00:04:22.000
|
||||
Emo follows Proog with somewhat less enthusiasm as the older man leads the way.
|
||||
|
||||
31
|
||||
00:04:52.000 --> 00:04:58.000
|
||||
They reach the end of the room and go through a hall into a small compartment.
|
||||
|
||||
32
|
||||
00:05:02.000 --> 00:05:06.000
|
||||
Proog presses a button, and the door shuts.
|
||||
|
||||
33
|
||||
00:05:06.500 --> 00:05:09.000
|
||||
It is an elevator.
|
||||
|
||||
34
|
||||
00:05:09.500 --> 00:05:24.000
|
||||
The elevator lurches suddenly as it is grabbed by a giant mechanical arm and thrown upwards, rushing up through an ever-widening tunnel.
|
||||
|
||||
35
|
||||
00:05:26.500 --> 00:05:32.000
|
||||
When it begins to slow down, another arm grabs the capsule and throws it even further up.
|
||||
|
||||
36
|
||||
00:05:32.500 --> 00:05:40.000
|
||||
As it moves up, the walls unlock and fall away, leaving only the floor with the two on it, rushing higher and higher.
|
||||
|
||||
37
|
||||
00:05:54.500 --> 00:05:59.000
|
||||
They exit the tunnel into a black sky and the platform reaches the peak of its arc.
|
||||
|
||||
38
|
||||
00:06:19.500 --> 00:06:26.000
|
||||
The elevator begins to drop down another shaft, coming to rest as it slams into the floor of another room and bringing the two to a level stop.
|
||||
|
||||
39
|
||||
00:06:26.500 --> 00:06:28.000
|
||||
A camera flashes.
|
||||
|
||||
40
|
||||
00:06:28.010 --> 00:06:34.000
|
||||
They are in a large, dingy room filled with strange, generator-like devices and dotted with boxy holographic projectors.
|
||||
|
||||
41
|
||||
00:06:34.500 --> 00:06:38.000
|
||||
One of them is projecting a portion of wall with a door in it right beside them.
|
||||
|
||||
42
|
||||
00:06:38.500 --> 00:06:40.000
|
||||
The door seems harmless enough.
|
||||
|
||||
43
|
||||
00:06:42.800 --> 00:06:45.100
|
||||
From behind the door comes light music.
|
||||
|
||||
44
|
||||
00:06:56.000 --> 00:07:00.100
|
||||
Proog presses a button on his cane, which changes the holograph to another wall.
|
||||
|
||||
45
|
||||
00:07:05.100 --> 00:07:11.000
|
||||
Proog finishes the wall, and boxes them into a Safe Room, out of the view of anything outside.
|
||||
|
||||
46
|
||||
00:07:39.000 --> 00:07:42.500
|
||||
Proog slaps him, trying to bring him to his senses.
|
||||
|
||||
47
|
||||
00:07:45.000 --> 00:07:52.000
|
||||
Emo storms away down the length of the room towards a wall he apparently cannot see and the wall begins to move, extending the length of the room.
|
||||
|
||||
48
|
||||
00:08:00.000 --> 00:08:07.000
|
||||
The walls begin to discolour and mechanical roots start tearing through the walls to his left.
|
||||
|
||||
49
|
||||
00:08:07.010 --> 00:08:09.000
|
||||
The roots move forwards toward Proog.
|
||||
|
||||
50
|
||||
00:08:22.000 --> 00:08:31.000
|
||||
The rest of the safety wall crumples away as a pair of massive hands heave out of the ground and begin to attack.
|
||||
|
||||
51
|
||||
00:08:31.010 --> 00:08:37.000
|
||||
Proog is knocked down by the shockwave, while Emo turns and begins to walk away, waving his finger around his temple in the 'crazy' sign.
|
||||
|
||||
52
|
||||
00:08:37.010 --> 00:08:44.000
|
||||
In a last effort, Proog extricates himself from the tentacle roots, and cracks Emo over the back of the head with his cane.
|
||||
|
||||
53
|
||||
00:08:44.500 --> 00:08:51.000
|
||||
As Emo collapses, everything falls away, and Proog and Emo are left in one tiny patch of light in the middle of blackness.
|
||||
|
||||
54
|
||||
00:09:00.000 --> 00:09:20.000
|
||||
The scene fades to black while panning over a pile of tentacle roots lying on the ground.
|
||||
|
||||
55
|
||||
00:09:26.000 --> 00:09:28.000
|
||||
Credits begin:
|
||||
|
||||
56
|
||||
00:09:28.500 --> 00:09:35.000
|
||||
Orange Open Movie Team
|
||||
Director: Bassum Kurdali
|
||||
Art Director: Andreas Goralczyk
|
||||
|
||||
57
|
||||
00:09:35.500 --> 00:09:39.000
|
||||
Music and Sound Design: Jan Morgenstern
|
||||
|
||||
58
|
||||
00:09:39.500 --> 00:09:44.000
|
||||
Emo: Cas Jansen
|
||||
Proog: Tygo Gernandt
|
||||
|
||||
59
|
||||
00:09:44.500 --> 00:09:50.000
|
||||
Screenplay: Pepijn Zwanenberg
|
||||
Original Concept & Scenario: Andreas Goralczyk, Bassam Kurdali, Ton Roosendaal
|
||||
|
||||
60
|
||||
00:09:50.500 --> 00:10:24.000
|
||||
More people for
|
||||
Additional Artwork and Animation
|
||||
Texture Photography
|
||||
Software Development
|
||||
3D Modelling, Animation, Rendering, Compiling Software
|
||||
Special Thanks to Open Source Projects
|
||||
Rendering Services Provided
|
||||
Hardware Sponsored
|
||||
Casting
|
||||
Sound FX, Foley, Dialogue Editing, Audio Mix and Post
|
||||
Voice Recording
|
||||
HDCam conversion
|
||||
Netherlands Media Art Institute Staff
|
||||
Blender Foundation Staff
|
||||
|
||||
61
|
||||
00:10:24.500 --> 00:10:30.000
|
||||
Many Thanks to our Donation and DVD sponsors
|
||||
|
||||
62
|
||||
00:10:30.500 --> 00:10:47.000
|
||||
Elephants Dream has been realised with financial support from
|
||||
The Netherlands Film Fund
|
||||
Mondriaan Foundation
|
||||
VSBfonds
|
||||
Uni-Verse / EU Sixth Framework Programme
|
||||
|
||||
63
|
||||
00:10:47.500 --> 00:10:53.000
|
||||
Produced By
|
||||
Ton Roosendaal
|
||||
Copyright 2006
|
||||
Netherlands Media Art Institute / Montevideo
|
||||
Blender Foundation
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Video.js Text Descriptions, Chapters & Captions Example</title>
|
||||
|
||||
<link href="../../video-js.css" rel="stylesheet" type="text/css">
|
||||
|
||||
<script src="../../video.js"></script>
|
||||
|
||||
<!-- Set the location of the flash SWF -->
|
||||
<script>
|
||||
videojs.setGlobalOptions({
|
||||
flash: {
|
||||
swf: '../../video-js.swf'
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p style="background-color:#eee; border: 1px solid #777; padding: 10px; font-size: .8em; line-height: 1.5em; font-family: Verdana, sans-serif;">This page demonstrates a text descriptions track (intended primarily for blind and visually impaired consumers of visual media)</p>
|
||||
|
||||
<!-- NOTE: we have to disable native Text Track support for the HTML5 tech,
|
||||
since even HTML5 video players with native Text Track support
|
||||
don't currently support 'description' text tracks in any
|
||||
useful way! -->
|
||||
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="360"
|
||||
data-setup='{ "html5" : { "nativeTextTracks" : false } }'>
|
||||
<source src="https://archive.org/download/ElephantsDream/ed_hd.mp4" type="video/mp4">
|
||||
<source src="https://archive.org/download/ElephantsDream/ed_hd.ogv" type="video/ogv">
|
||||
|
||||
<track kind="captions" src="captions.en.vtt" srclang="en" label="English" default></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<track kind="captions" src="captions.sv.vtt" srclang="sv" label="Swedish"></track>
|
||||
<track kind="captions" src="captions.ru.vtt" srclang="ru" label="Russian"></track>
|
||||
<track kind="captions" src="captions.ja.vtt" srclang="ja" label="Japanese"></track>
|
||||
<track kind="captions" src="captions.ar.vtt" srclang="ar" label="Arabic"></track>
|
||||
|
||||
<track kind="descriptions" src="descriptions.en.vtt" srclang="en" label="English"></track>
|
||||
|
||||
<track kind="chapters" src="chapters.en.vtt" srclang="en" label="English"></track>
|
||||
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
</body>
|
||||
</html>
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
WEBVTT
|
||||
|
||||
00:00.700 --> 00:04.110
|
||||
Captions describe all relevant audio for the hearing impaired.
|
||||
[ Heroic music playing for a seagull ]
|
||||
|
||||
00:04.500 --> 00:05.000
|
||||
[ Splash!!! ]
|
||||
|
||||
00:05.100 --> 00:06.000
|
||||
[ Sploosh!!! ]
|
||||
|
||||
00:08.000 --> 00:09.225
|
||||
[ Splash...splash...splash splash splash ]
|
||||
|
||||
00:10.525 --> 00:11.255
|
||||
[ Splash, Sploosh again ]
|
||||
|
||||
00:13.500 --> 00:14.984
|
||||
Dolphin: eeeEEEEEeeee!
|
||||
|
||||
00:14.984 --> 00:16.984
|
||||
Dolphin: Squawk! eeeEEE?
|
||||
|
||||
00:25.000 --> 00:28.284
|
||||
[ A whole ton of splashes ]
|
||||
|
||||
00:29.500 --> 00:31.000
|
||||
Mine. Mine. Mine.
|
||||
|
||||
00:34.300 --> 00:36.000
|
||||
Shark: Chomp
|
||||
|
||||
00:36.800 --> 00:37.900
|
||||
Shark: CHOMP!!!
|
||||
|
||||
00:37.861 --> 00:41.193
|
||||
EEEEEEOOOOOOOOOOWHALENOISE
|
||||
|
||||
00:42.593 --> 00:45.611
|
||||
[ BIG SPLASH ]
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>Video.js | HTML5 Video Player</title>
|
||||
<link href="http://vjs.zencdn.net/5.0.2/video-js.css" rel="stylesheet">
|
||||
<script src="http://vjs.zencdn.net/ie8/1.1.0/videojs-ie8.min.js"></script>
|
||||
<script src="http://vjs.zencdn.net/5.0.2/video.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264" poster="http://vjs.zencdn.net/v/oceans.png" data-setup="{}">
|
||||
<source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4">
|
||||
<source src="http://vjs.zencdn.net/v/oceans.webm" type="video/webm">
|
||||
<source src="http://vjs.zencdn.net/v/oceans.ogv" type="video/ogg">
|
||||
<track kind="captions" src="../shared/example-captions.vtt" srclang="en" label="English"></track>
|
||||
<!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<track kind="subtitles" src="../shared/example-captions.vtt" srclang="en" label="English"></track>
|
||||
<!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
externo
BIN
Arquivo binário não exibido.
externo
+102
@@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<font id="VideoJS" horiz-adv-x="1792">
|
||||
<font-face font-family="VideoJS"
|
||||
units-per-em="1792" ascent="1792"
|
||||
descent="0" />
|
||||
<missing-glyph horiz-adv-x="0" />
|
||||
<glyph glyph-name="play"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M597.3333333333334 1418.6666666666665V373.3333333333333L1418.6666666666667 896z" />
|
||||
<glyph glyph-name="play-circle"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M746.6666666666667 560L1194.6666666666667 896L746.6666666666667 1232V560zM896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665z" />
|
||||
<glyph glyph-name="pause"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M448 373.3333333333333H746.6666666666667V1418.6666666666665H448V373.3333333333333zM1045.3333333333335 1418.6666666666665V373.3333333333333H1344V1418.6666666666665H1045.3333333333335z" />
|
||||
<glyph glyph-name="volume-mute"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1232 896C1232 1027.7866666666666 1155.8400000000001 1141.6533333333332 1045.3333333333335 1196.5333333333333V1031.52L1228.6399999999999 848.2133333333334C1230.88 863.8933333333334 1232 879.9466666666667 1232 896.0000000000001zM1418.6666666666667 896C1418.6666666666667 825.8133333333333 1403.3600000000001 759.7333333333333 1378.3466666666668 698.8799999999999L1491.466666666667 585.7599999999998C1540 678.72 1568 783.9999999999999 1568 896C1568 1215.5733333333333 1344.3733333333334 1482.88 1045.3333333333335 1550.8266666666666V1396.6399999999999C1261.1200000000001 1332.4266666666667 1418.6666666666667 1132.6933333333332 1418.6666666666667 896zM319.2000000000001 1568L224 1472.8L576.8 1120H224V672H522.6666666666667L896 298.6666666666665V800.8L1213.7066666666667 483.0933333333332C1163.68 444.6399999999999 1107.3066666666666 413.6533333333332 1045.3333333333335 394.9866666666665V240.7999999999998C1148 264.32 1241.7066666666667 311.3599999999997 1320.48 375.9466666666663L1472.8000000000002 224L1568 319.1999999999998L896 991.1999999999998L319.2000000000001 1568zM896 1493.3333333333333L739.9466666666667 1337.28L896 1181.2266666666667V1493.3333333333333z" />
|
||||
<glyph glyph-name="volume-low"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M522.6666666666667 1120V672H821.3333333333334L1194.6666666666667 298.6666666666665V1493.3333333333333L821.3333333333334 1120H522.6666666666667z" />
|
||||
<glyph glyph-name="volume-mid"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1381.3333333333335 896C1381.3333333333335 1027.7866666666666 1305.1733333333334 1141.6533333333332 1194.6666666666667 1196.5333333333333V595.0933333333332C1305.1733333333334 650.3466666666666 1381.3333333333335 764.2133333333331 1381.3333333333335 896zM373.3333333333334 1120V672H672L1045.3333333333335 298.6666666666665V1493.3333333333333L672 1120H373.3333333333334z" />
|
||||
<glyph glyph-name="volume-high"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M224 1120V672H522.6666666666667L896 298.6666666666665V1493.3333333333333L522.6666666666667 1120H224zM1232 896C1232 1027.7866666666666 1155.8400000000001 1141.6533333333332 1045.3333333333335 1196.5333333333333V595.0933333333332C1155.8400000000001 650.3466666666666 1232 764.2133333333331 1232 896zM1045.3333333333335 1550.8266666666666V1396.6399999999999C1261.1200000000001 1332.4266666666667 1418.6666666666667 1132.6933333333332 1418.6666666666667 896S1261.1200000000001 459.5733333333333 1045.3333333333335 395.3600000000002V241.1733333333332C1344.3733333333334 309.1199999999999 1568 576.0533333333333 1568 896S1344.3733333333334 1482.88 1045.3333333333335 1550.8266666666666z" />
|
||||
<glyph glyph-name="fullscreen-enter"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M522.6666666666667 746.6666666666665H373.3333333333334V373.3333333333333H746.6666666666667V522.6666666666665H522.6666666666667V746.6666666666665zM373.3333333333334 1045.3333333333333H522.6666666666667V1269.3333333333333H746.6666666666667V1418.6666666666665H373.3333333333334V1045.3333333333333zM1269.3333333333335 522.6666666666665H1045.3333333333335V373.3333333333333H1418.6666666666667V746.6666666666665H1269.3333333333335V522.6666666666665zM1045.3333333333335 1418.6666666666665V1269.3333333333333H1269.3333333333335V1045.3333333333333H1418.6666666666667V1418.6666666666665H1045.3333333333335z" />
|
||||
<glyph glyph-name="fullscreen-exit"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M373.3333333333334 597.3333333333333H597.3333333333334V373.3333333333333H746.6666666666667V746.6666666666665H373.3333333333334V597.3333333333333zM597.3333333333334 1194.6666666666665H373.3333333333334V1045.3333333333333H746.6666666666667V1418.6666666666665H597.3333333333334V1194.6666666666665zM1045.3333333333335 373.3333333333333H1194.6666666666667V597.3333333333333H1418.6666666666667V746.6666666666665H1045.3333333333335V373.3333333333333zM1194.6666666666667 1194.6666666666665V1418.6666666666665H1045.3333333333335V1045.3333333333333H1418.6666666666667V1194.6666666666665H1194.6666666666667z" />
|
||||
<glyph glyph-name="square"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1344 1493.3333333333333H448C365.4933333333334 1493.3333333333333 298.6666666666667 1426.5066666666667 298.6666666666667 1344V448C298.6666666666667 365.4933333333331 365.4933333333334 298.6666666666665 448 298.6666666666665H1344C1426.506666666667 298.6666666666665 1493.3333333333335 365.4933333333331 1493.3333333333335 448V1344C1493.3333333333335 1426.5066666666667 1426.506666666667 1493.3333333333333 1344 1493.3333333333333zM1344 448H448V1344H1344V448z" />
|
||||
<glyph glyph-name="spinner"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M701.8666666666668 1008L1057.6533333333334 1624.3733333333334C1005.7600000000002 1635.9466666666667 951.6266666666666 1642.6666666666667 896 1642.6666666666667C716.8000000000001 1642.6666666666667 552.9066666666668 1579.5733333333333 424.1066666666667 1474.2933333333333L697.76 1000.5333333333334L701.8666666666666 1008zM1608.32 1120C1539.6266666666666 1338.4 1373.1200000000001 1512.7466666666667 1160.6933333333332 1593.3866666666668L887.4133333333334 1120H1608.32zM1627.7333333333336 1045.3333333333333H1068.48L1090.1333333333334 1008L1445.92 392C1567.6266666666668 524.9066666666668 1642.6666666666667 701.4933333333333 1642.6666666666667 896C1642.6666666666667 947.1466666666666 1637.44 997.1733333333332 1627.7333333333336 1045.3333333333333zM637.2800000000001 896L346.08 1400C224.3733333333333 1267.0933333333332 149.3333333333334 1090.5066666666667 149.3333333333334 896C149.3333333333334 844.8533333333332 154.56 794.8266666666666 164.2666666666667 746.6666666666665H723.5200000000001L637.2800000000002 896zM183.68 672C252.3733333333334 453.5999999999999 418.88 279.2533333333334 631.3066666666667 198.6133333333332L904.5866666666668 672H183.68zM1025.1733333333334 672L733.9733333333334 167.6266666666666C786.24 156.0533333333333 840.3733333333334 149.3333333333333 896 149.3333333333333C1075.2 149.3333333333333 1239.0933333333332 212.4266666666665 1367.8933333333334 317.7066666666665L1094.24 791.4666666666666L1025.1733333333334 672z" />
|
||||
<glyph glyph-name="subtitles"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1493.3333333333335 1493.3333333333333H298.6666666666667C216.16 1493.3333333333333 149.3333333333334 1426.5066666666667 149.3333333333334 1344V448C149.3333333333334 365.4933333333331 216.16 298.6666666666665 298.6666666666667 298.6666666666665H1493.3333333333335C1575.8400000000001 298.6666666666665 1642.6666666666667 365.4933333333331 1642.6666666666667 448V1344C1642.6666666666667 1426.5066666666667 1575.8400000000001 1493.3333333333333 1493.3333333333335 1493.3333333333333zM298.6666666666667 896H597.3333333333334V746.6666666666665H298.6666666666667V896zM1045.3333333333335 448H298.6666666666667V597.3333333333333H1045.3333333333335V448zM1493.3333333333335 448H1194.6666666666667V597.3333333333333H1493.3333333333335V448zM1493.3333333333335 746.6666666666665H746.6666666666667V896H1493.3333333333335V746.6666666666665z" />
|
||||
<glyph glyph-name="captions"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1418.6666666666667 1493.3333333333333H373.3333333333334C290.8266666666667 1493.3333333333333 224 1426.5066666666667 224 1344V448C224 365.4933333333331 290.8266666666667 298.6666666666665 373.3333333333334 298.6666666666665H1418.6666666666667C1501.1733333333334 298.6666666666665 1568 365.4933333333331 1568 448V1344C1568 1426.5066666666667 1501.1733333333334 1493.3333333333333 1418.6666666666667 1493.3333333333333zM821.3333333333334 970.6666666666666H709.3333333333334V1008H560V783.9999999999999H709.3333333333334V821.3333333333333H821.3333333333334V746.6666666666665C821.3333333333334 705.5999999999999 788.1066666666667 672 746.6666666666667 672H522.6666666666667C481.2266666666667 672 448 705.5999999999999 448 746.6666666666665V1045.3333333333333C448 1086.4 481.2266666666667 1120 522.6666666666667 1120H746.6666666666667C788.1066666666667 1120 821.3333333333334 1086.4 821.3333333333334 1045.3333333333333V970.6666666666666zM1344 970.6666666666666H1232V1008H1082.6666666666667V783.9999999999999H1232V821.3333333333333H1344V746.6666666666665C1344 705.5999999999999 1310.7733333333333 672 1269.3333333333335 672H1045.3333333333335C1003.8933333333334 672 970.6666666666669 705.5999999999999 970.6666666666669 746.6666666666665V1045.3333333333333C970.6666666666669 1086.4 1003.8933333333334 1120 1045.3333333333335 1120H1269.3333333333335C1310.7733333333333 1120 1344 1086.4 1344 1045.3333333333333V970.6666666666666z" />
|
||||
<glyph glyph-name="chapters"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M224 821.3333333333333H373.3333333333334V970.6666666666666H224V821.3333333333333zM224 522.6666666666665H373.3333333333334V672H224V522.6666666666665zM224 1120H373.3333333333334V1269.3333333333333H224V1120zM522.6666666666667 821.3333333333333H1568V970.6666666666666H522.6666666666667V821.3333333333333zM522.6666666666667 522.6666666666665H1568V672H522.6666666666667V522.6666666666665zM522.6666666666667 1269.3333333333333V1120H1568V1269.3333333333333H522.6666666666667z" />
|
||||
<glyph glyph-name="share"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1344 590.9866666666665C1287.2533333333333 590.9866666666665 1236.1066666666668 568.9599999999998 1197.2800000000002 533.4933333333331L665.2800000000001 843.7333333333333C669.3866666666667 860.5333333333333 672 878.08 672 896S669.3866666666667 931.4666666666666 665.2800000000001 948.2666666666667L1191.68 1255.52C1231.6266666666668 1218.1866666666665 1285.0133333333335 1195.04 1344 1195.04C1467.5733333333335 1195.04 1568 1295.4666666666665 1568 1419.04S1467.5733333333335 1643.04 1344 1643.04S1120 1542.6133333333332 1120 1419.04C1120 1401.12 1122.6133333333335 1383.5733333333333 1126.72 1366.773333333333L600.3199999999999 1059.5199999999998C560.3733333333333 1096.853333333333 506.9866666666666 1119.9999999999998 448 1119.9999999999998C324.4266666666666 1119.9999999999998 224 1019.5733333333332 224 895.9999999999998S324.4266666666666 671.9999999999998 448 671.9999999999998C506.9866666666666 671.9999999999998 560.3733333333333 695.1466666666665 600.3199999999999 732.4799999999998L1132.32 422.2399999999998C1128.5866666666666 406.5599999999997 1126.3466666666666 390.133333333333 1126.3466666666666 373.3333333333331C1126.3466666666666 253.1199999999997 1223.7866666666669 155.6799999999996 1344 155.6799999999996S1561.6533333333334 253.1199999999997 1561.6533333333334 373.3333333333331S1464.2133333333334 590.9866666666662 1344 590.9866666666662z" />
|
||||
<glyph glyph-name="cog"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1450.7733333333333 823.1999999999999C1453.76 847.0933333333334 1456 871.3599999999999 1456 896S1453.76 944.9066666666666 1450.7733333333333 968.8L1608.6933333333336 1092.3733333333332C1622.8800000000003 1103.5733333333333 1626.986666666667 1123.7333333333331 1617.6533333333336 1140.1599999999999L1468.3200000000004 1398.8799999999999C1458.986666666667 1414.9333333333334 1439.5733333333335 1421.6533333333332 1422.7733333333338 1414.9333333333334L1236.8533333333337 1339.8933333333332C1198.4000000000003 1369.3866666666668 1156.2133333333338 1394.3999999999999 1110.6666666666672 1413.44L1082.6666666666667 1611.3066666666666C1079.3066666666668 1628.8533333333332 1064 1642.6666666666667 1045.3333333333335 1642.6666666666667H746.6666666666667C728 1642.6666666666667 712.6933333333334 1628.8533333333332 709.7066666666668 1611.3066666666666L681.7066666666668 1413.44C636.1600000000002 1394.4 593.9733333333335 1369.76 555.5200000000001 1339.8933333333332L369.6 1414.9333333333334C352.8000000000001 1421.28 333.3866666666667 1414.9333333333334 324.0533333333334 1398.88L174.72 1140.1599999999999C165.3866666666667 1124.1066666666666 169.4933333333334 1103.9466666666667 183.68 1092.3733333333332L341.2266666666667 968.8C338.2400000000001 944.9066666666666 336 920.64 336 896S338.2400000000001 847.0933333333334 341.2266666666667 823.1999999999999L183.68 699.6266666666668C169.4933333333334 688.4266666666667 165.3866666666667 668.2666666666667 174.72 651.8399999999999L324.0533333333334 393.1199999999999C333.3866666666667 377.0666666666666 352.8 370.3466666666666 369.6 377.0666666666666L555.5200000000001 452.1066666666666C593.9733333333334 422.6133333333333 636.16 397.5999999999999 681.7066666666668 378.56L709.7066666666668 180.6933333333334C712.6933333333334 163.1466666666668 728 149.3333333333333 746.6666666666667 149.3333333333333H1045.3333333333335C1064 149.3333333333333 1079.3066666666668 163.1466666666665 1082.2933333333333 180.6933333333334L1110.2933333333333 378.56C1155.84 397.5999999999999 1198.0266666666666 422.24 1236.48 452.1066666666666L1422.3999999999999 377.0666666666666C1439.2 370.7199999999998 1458.6133333333332 377.0666666666666 1467.9466666666665 393.1199999999999L1617.2799999999997 651.8399999999999C1626.6133333333332 667.8933333333332 1622.5066666666664 688.0533333333333 1608.3199999999997 699.6266666666668L1450.773333333333 823.1999999999999zM896 634.6666666666665C751.52 634.6666666666665 634.6666666666667 751.52 634.6666666666667 896S751.52 1157.3333333333333 896 1157.3333333333333S1157.3333333333335 1040.48 1157.3333333333335 896S1040.48 634.6666666666665 896 634.6666666666665z" />
|
||||
<glyph glyph-name="circle"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M149.3333333333334 896C149.3333333333334 483.6273867930074 483.6273867930075 149.3333333333333 896 149.3333333333333C1308.3726132069926 149.3333333333333 1642.6666666666667 483.6273867930074 1642.6666666666667 896C1642.6666666666667 1308.3726132069926 1308.3726132069926 1642.6666666666667 896 1642.6666666666667C483.6273867930075 1642.6666666666667 149.3333333333334 1308.3726132069926 149.3333333333334 896z" />
|
||||
<glyph glyph-name="circle-outline"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665z" />
|
||||
<glyph glyph-name="circle-inner-circle"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M896 1642.6666666666667C484.2133333333334 1642.6666666666667 149.3333333333334 1307.7866666666666 149.3333333333334 896S484.2133333333334 149.3333333333333 896 149.3333333333333S1642.6666666666667 484.2133333333331 1642.6666666666667 896S1307.7866666666669 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665zM1120 896C1120 772.4266666666666 1019.5733333333334 672 896 672S672 772.4266666666666 672 896S772.4266666666667 1120 896 1120S1120 1019.5733333333332 1120 896z" />
|
||||
<glyph glyph-name="hd"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1418.6666666666667 1568H373.3333333333334C290.4533333333333 1568 224 1500.8 224 1418.6666666666665V373.3333333333333C224 291.1999999999998 290.4533333333334 224 373.3333333333334 224H1418.6666666666667C1500.8000000000002 224 1568 291.1999999999998 1568 373.3333333333333V1418.6666666666665C1568 1500.8 1500.8000000000002 1568 1418.6666666666667 1568zM821.3333333333334 672H709.3333333333334V821.3333333333333H560V672H448V1120H560V933.3333333333331H709.3333333333334V1120H821.3333333333334V672zM970.6666666666669 1120H1269.3333333333335C1310.4 1120 1344 1086.4 1344 1045.3333333333333V746.6666666666665C1344 705.5999999999999 1310.4 672 1269.3333333333335 672H970.6666666666669V1120zM1082.6666666666667 783.9999999999999H1232V1008H1082.6666666666667V783.9999999999999z" />
|
||||
<glyph glyph-name="cancel"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM1269.3333333333335 628.3199999999999L1163.68 522.6666666666665L896 790.3466666666667L628.3199999999999 522.6666666666665L522.6666666666667 628.3199999999999L790.3466666666668 896L522.6666666666667 1163.68L628.3199999999999 1269.3333333333333L896 1001.6533333333332L1163.68 1269.3333333333333L1269.3333333333335 1163.68L1001.6533333333334 896L1269.3333333333335 628.3199999999999z" />
|
||||
<glyph glyph-name="replay"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M896 1418.6666666666665V1717.3333333333333L522.6666666666667 1344L896 970.6666666666666V1269.3333333333333C1143.52 1269.3333333333333 1344 1068.8533333333332 1344 821.3333333333333S1143.52 373.3333333333333 896 373.3333333333333S448 573.813333333333 448 821.3333333333333H298.6666666666667C298.6666666666667 491.3066666666664 565.9733333333334 224 896 224S1493.3333333333335 491.3066666666664 1493.3333333333335 821.3333333333333S1226.0266666666669 1418.6666666666665 896 1418.6666666666665z" />
|
||||
<glyph glyph-name="facebook"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1343 1780V1516H1186Q1100 1516 1070 1480T1040 1372V1183H1333L1294 887H1040V128H734V887H479V1183H734V1401Q734 1587 838 1689.5T1115 1792Q1262 1792 1343 1780z" />
|
||||
<glyph glyph-name="gplus"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M799 996Q799 960 831 925.5T908.5 857.5T999 784T1076 680T1108 538Q1108 448 1060 365Q988 243 849 185.5T551 128Q419 128 304.5 169.5T133 307Q96 367 96 438Q96 519 140.5 588T259 703Q390 785 663 803Q631 845 615.5 877T600 950Q600 986 621 1035Q575 1031 553 1031Q405 1031 303.5 1127.5T202 1372Q202 1454 238 1531T337 1662Q414 1728 519.5 1760T737 1792H1155L1017 1704H886Q960 1641 998 1571T1036 1411Q1036 1339 1011.5 1281.5T952.5 1188.5T883 1123.5T823.5 1062T799 996zM653 1092Q691 1092 731 1108.5T797 1152Q850 1209 850 1311Q850 1369 833 1436T784.5 1565.5T700 1669T583 1710Q541 1710 500.5 1690.5T435 1638Q388 1579 388 1478Q388 1432 398 1380.5T429.5 1277.5T481.5 1185T556.5 1118T653 1092zM655 219Q713 219 766.5 232T865.5 271T938.5 344T966 453Q966 478 959 502T944.5 544T917.5 585.5T888 620.5T849.5 655T813 684T771.5 714T735 740Q719 742 687 742Q634 742 582 735T474.5 710T377.5 664T309 589.5T282 484Q282 414 317 360.5T408.5 277.5T527.5 233.5T655 219zM1465 1095H1678V987H1465V768H1360V987H1148V1095H1360V1312H1465V1095z" />
|
||||
<glyph glyph-name="linkedin"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M477 1167V176H147V1167H477zM498 1473Q499 1400 447.5 1351T312 1302H310Q228 1302 178 1351T128 1473Q128 1547 179.5 1595.5T314 1644T447 1595.5T498 1473zM1664 744V176H1335V706Q1335 811 1294.5 870.5T1168 930Q1105 930 1062.5 895.5T999 810Q988 780 988 729V176H659Q661 575 661 823T660 1119L659 1167H988V1023H986Q1006 1055 1027 1079T1083.5 1131T1170.5 1174.5T1285 1190Q1456 1190 1560 1076.5T1664 744z" />
|
||||
<glyph glyph-name="twitter"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1684 1384Q1617 1286 1522 1217Q1523 1203 1523 1175Q1523 1045 1485 915.5T1369.5 667T1185 456.5T927 310.5T604 256Q333 256 108 401Q143 397 186 397Q411 397 587 535Q482 537 399 599.5T285 759Q318 754 346 754Q389 754 431 765Q319 788 245.5 876.5T172 1082V1086Q240 1048 318 1045Q252 1089 213 1160T174 1314Q174 1402 218 1477Q339 1328 512.5 1238.5T884 1139Q876 1177 876 1213Q876 1347 970.5 1441.5T1199 1536Q1339 1536 1435 1434Q1544 1455 1640 1512Q1603 1397 1498 1334Q1591 1344 1684 1384z" />
|
||||
<glyph glyph-name="tumblr"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1328 463L1408 226Q1385 191 1297 160T1120 128Q1016 126 929.5 154T787 228T692 334T636.5 454T620 572V1116H452V1331Q524 1357 581 1400.5T672 1490.5T730 1592.5T764 1691.5T779 1780Q780 1785 783.5 1788.5T791 1792H1035V1368H1368V1116H1034V598Q1034 568 1040.5 542T1063 489.5T1112.5 448T1194 434Q1272 436 1328 463z" />
|
||||
<glyph glyph-name="pinterest"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M1664 896Q1664 687 1561 510.5T1281.5 231T896 128Q785 128 678 160Q737 253 756 324Q765 358 810 535Q830 496 883 467.5T997 439Q1118 439 1213 507.5T1360 696T1412 966Q1412 1080 1352.5 1180T1180 1343T925 1406Q820 1406 729 1377T574.5 1300T465.5 1189.5T398.5 1060T377 926Q377 822 417 743T534 632Q564 620 572 652Q574 659 580 683T588 713Q594 736 577 756Q526 817 526 907Q526 1058 630.5 1166.5T904 1275Q1055 1275 1139.5 1193T1224 980Q1224 810 1155.5 691T980 572Q919 572 882 615.5T859 720Q867 755 885.5 813.5T915.5 916.5T927 992Q927 1042 900 1075T823 1108Q761 1108 718 1051T675 909Q675 836 700 787L601 369Q584 299 588 192Q382 283 255 473T128 896Q128 1105 231 1281.5T510.5 1561T896 1664T1281.5 1561T1561 1281.5T1664 896z" />
|
||||
<glyph glyph-name="audio-description"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M795.5138904615 457.270933L795.5138904615 1221.5248286325C971.84576475 1225.085121904 1107.39330415 1232.12360523 1207.223857 1161.5835220499998C1303.033991 1093.8857027 1377.7922305 962.20560625 1364.3373135 792.9476205000001C1350.102593 613.9029365000001 1219.6655764999998 463.4600215 1050.12389545 448.2843645000001C965.8259268 440.7398275000001 798.21890505 448.2843645000001 798.21890505 448.2843645000001C798.21890505 448.2843645000001 795.2791410655 453.016494 795.5138904615 457.270933M966.1564647 649.0863960000001C1076.16084135 644.6767075 1152.385591 707.3020429999999 1163.8910079999998 807.9351875C1179.2994744999999 942.71878505 1089.73043585 1030.3691748 960.74508635 1020.7227954L960.74508635 658.08043C960.6196169500002 652.9482330000001 962.7606933 650.3134680000001 966.1564647 649.0863960000001 M1343.2299685 457.3517725000002C1389.9059734 444.3690160000001 1404.0840274999998 496.0596970000001 1424.48294065 532.2791494999999C1469.0084255 611.2788500000001 1502.5101322 712.8584189999999 1503.0416912 828.9881705C1503.8147453000001 995.5680973 1438.8404296 1117.7973688000002 1378.4383305 1200.62456881045L1348.652139905 1200.62456881045C1346.6001063899998 1187.06858424 1356.44474056 1175.024791325 1362.18395859 1164.6588891000001C1408.2649952 1081.49431985 1450.96645015 966.7230041 1451.57490975 834.9817034999999C1452.27106325 683.8655425000002 1402.00636065 557.5072264999999 1343.2299685 457.3517725000002 M1488.0379675 457.3517725000002C1534.7139723999999 444.3690160000001 1548.8825828 496.0671625 1569.29093965 532.2791494999999C1613.8164245 611.2788500000001 1647.3113856500001 712.8584189999999 1647.8496902000002 828.9881705C1648.6227442999998 995.5680973 1583.6484286 1117.7973688000002 1523.2463295 1200.62456881045L1493.460138905 1200.62456881045C1491.40810539 1187.06858424 1501.250041305 1175.021805755 1506.9919575899999 1164.6588891000001C1553.0729942 1081.49431985 1595.7757984 966.7230041 1596.3829087499998 834.9817034999999C1597.07906225 683.8655425000002 1546.8143596500001 557.5072264999999 1488.0379675 457.3517725000002 M1631.9130380000001 457.3517725000002C1678.5890429 444.3690160000001 1692.7576533 496.0671625 1713.1660101500001 532.2791494999999C1757.691495 611.2788500000001 1791.1864561500001 712.8584189999999 1791.7247607000002 828.9881705C1792.4978148 995.5680973 1727.5234991000002 1117.7973688000002 1667.1214 1200.62456881045L1637.3352094050001 1200.62456881045C1635.28317589 1187.06858424 1645.1251118050002 1175.02329854 1650.86702809 1164.6588891000001C1696.9480647 1081.49431985 1739.64951965 966.7230041 1740.25797925 834.9817034999999C1740.95413275 683.8655425000002 1690.6894301500001 557.5072264999999 1631.9130380000001 457.3517725000002 M15.66796875 451.481947L254.03034755 451.481947L319.0356932 551.1747990000001L543.6261075 551.6487970000001C543.6261075 551.6487970000001 543.8541115 483.7032095 543.8541115 451.481947L714.4993835 451.481947L714.4993835 1230.9210795L508.643051 1230.9210795C488.8579955 1197.5411595 15.66796875 451.481947 15.66796875 451.481947L15.66796875 451.481947zM550.0048155000001 959.9708615L550.0048155000001 710.916297L408.4199 711.8642895L550.0048155000001 959.9708615L550.0048155000001 959.9708615z" />
|
||||
<glyph glyph-name="audio"
|
||||
unicode=""
|
||||
horiz-adv-x="1792" d=" M896 1717.3333333333333C524.9066666666668 1717.3333333333333 224 1416.4266666666667 224 1045.3333333333333V522.6666666666665C224 399.0933333333333 324.4266666666667 298.6666666666665 448 298.6666666666665H672V896H373.3333333333334V1045.3333333333333C373.3333333333334 1333.92 607.4133333333334 1568 896 1568S1418.6666666666667 1333.92 1418.6666666666667 1045.3333333333333V896H1120V298.6666666666665H1344C1467.5733333333335 298.6666666666665 1568 399.0933333333333 1568 522.6666666666665V1045.3333333333333C1568 1416.4266666666667 1267.0933333333332 1717.3333333333333 896 1717.3333333333333z" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 26 KiB |
externo
BIN
Arquivo binário não exibido.
externo
BIN
Arquivo binário não exibido.
externo
+2600
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
externo
+1
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
+34
@@ -0,0 +1,34 @@
|
||||
videojs.addLanguage("ar",{
|
||||
"Play": "تشغيل",
|
||||
"Pause": "ايقاف",
|
||||
"Current Time": "الوقت الحالي",
|
||||
"Duration Time": "Dauer",
|
||||
"Remaining Time": "الوقت المتبقي",
|
||||
"Stream Type": "نوع التيار",
|
||||
"LIVE": "مباشر",
|
||||
"Loaded": "تم التحميل",
|
||||
"Progress": "التقدم",
|
||||
"Fullscreen": "ملء الشاشة",
|
||||
"Non-Fullscreen": "غير ملء الشاشة",
|
||||
"Mute": "صامت",
|
||||
"Unmute": "غير الصامت",
|
||||
"Playback Rate": "معدل التشغيل",
|
||||
"Subtitles": "الترجمة",
|
||||
"subtitles off": "ايقاف الترجمة",
|
||||
"Captions": "التعليقات",
|
||||
"captions off": "ايقاف التعليقات",
|
||||
"Chapters": "فصول",
|
||||
"You aborted the media playback": "لقد ألغيت تشغيل الفيديو",
|
||||
"A network error caused the media download to fail part-way.": "تسبب خطأ في الشبكة بفشل تحميل الفيديو بالكامل.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "لا يمكن تحميل الفيديو بسبب فشل في الخادم أو الشبكة ، أو فشل بسبب عدم امكانية قراءة تنسيق الفيديو.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "تم ايقاف تشغيل الفيديو بسبب مشكلة فساد أو لأن الفيديو المستخدم يستخدم ميزات غير مدعومة من متصفحك.",
|
||||
"No compatible source was found for this media.": "فشل العثور على أي مصدر متوافق مع هذا الفيديو.",
|
||||
"Play Video": "تشغيل الفيديو",
|
||||
"Close": "أغلق",
|
||||
"Modal Window": "نافذة مشروطة",
|
||||
"This is a modal window": "هذه نافذة مشروطة",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "يمكن غلق هذه النافذة المشروطة عن طريق الضغط على زر الخروج أو تفعيل زر الإغلاق",
|
||||
", opens captions settings dialog": ", تفتح نافذة خيارات التعليقات",
|
||||
", opens subtitles settings dialog": ", تفتح نافذة خيارات الترجمة",
|
||||
", selected": ", مختار"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("ba",{
|
||||
"Play": "Pusti",
|
||||
"Pause": "Pauza",
|
||||
"Current Time": "Trenutno vrijeme",
|
||||
"Duration Time": "Vrijeme trajanja",
|
||||
"Remaining Time": "Preostalo vrijeme",
|
||||
"Stream Type": "Način strimovanja",
|
||||
"LIVE": "UŽIVO",
|
||||
"Loaded": "Učitan",
|
||||
"Progress": "Progres",
|
||||
"Fullscreen": "Puni ekran",
|
||||
"Non-Fullscreen": "Mali ekran",
|
||||
"Mute": "Prigušen",
|
||||
"Unmute": "Ne-prigušen",
|
||||
"Playback Rate": "Stopa reprodukcije",
|
||||
"Subtitles": "Podnaslov",
|
||||
"subtitles off": "Podnaslov deaktiviran",
|
||||
"Captions": "Titlovi",
|
||||
"captions off": "Titlovi deaktivirani",
|
||||
"Chapters": "Poglavlja",
|
||||
"You aborted the media playback": "Isključili ste reprodukciju videa.",
|
||||
"A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
|
||||
"No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("bg",{
|
||||
"Play": "Възпроизвеждане",
|
||||
"Pause": "Пауза",
|
||||
"Current Time": "Текущо време",
|
||||
"Duration Time": "Продължителност",
|
||||
"Remaining Time": "Оставащо време",
|
||||
"Stream Type": "Тип на потока",
|
||||
"LIVE": "НА ЖИВО",
|
||||
"Loaded": "Заредено",
|
||||
"Progress": "Прогрес",
|
||||
"Fullscreen": "Цял екран",
|
||||
"Non-Fullscreen": "Спиране на цял екран",
|
||||
"Mute": "Без звук",
|
||||
"Unmute": "Със звук",
|
||||
"Playback Rate": "Скорост на възпроизвеждане",
|
||||
"Subtitles": "Субтитри",
|
||||
"subtitles off": "Спряни субтитри",
|
||||
"Captions": "Аудио надписи",
|
||||
"captions off": "Спряни аудио надписи",
|
||||
"Chapters": "Глави",
|
||||
"You aborted the media playback": "Спряхте възпроизвеждането на видеото",
|
||||
"A network error caused the media download to fail part-way.": "Грешка в мрежата провали изтеглянето на видеото.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Видеото не може да бъде заредено заради проблем със сървъра или мрежата или защото този формат не е поддържан.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Възпроизвеждането на видеото беше прекъснато заради проблем с файла или защото видеото използва опции които браузърът Ви не поддържа.",
|
||||
"No compatible source was found for this media.": "Не беше намерен съвместим източник за това видео."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("ca",{
|
||||
"Play": "Reproducció",
|
||||
"Pause": "Pausa",
|
||||
"Current Time": "Temps reproduït",
|
||||
"Duration Time": "Durada total",
|
||||
"Remaining Time": "Temps restant",
|
||||
"Stream Type": "Tipus de seqüència",
|
||||
"LIVE": "EN DIRECTE",
|
||||
"Loaded": "Carregat",
|
||||
"Progress": "Progrés",
|
||||
"Fullscreen": "Pantalla completa",
|
||||
"Non-Fullscreen": "Pantalla no completa",
|
||||
"Mute": "Silencia",
|
||||
"Unmute": "Amb so",
|
||||
"Playback Rate": "Velocitat de reproducció",
|
||||
"Subtitles": "Subtítols",
|
||||
"subtitles off": "Subtítols desactivats",
|
||||
"Captions": "Llegendes",
|
||||
"captions off": "Llegendes desactivades",
|
||||
"Chapters": "Capítols",
|
||||
"You aborted the media playback": "Heu interromput la reproducció del vídeo.",
|
||||
"A network error caused the media download to fail part-way.": "Un error de la xarxa ha interromput la baixada del vídeo.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "No s'ha pogut carregar el vídeo perquè el servidor o la xarxa han fallat, o bé perquè el seu format no és compatible.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducció de vídeo s'ha interrumput per un problema de corrupció de dades o bé perquè el vídeo demanava funcions que el vostre navegador no ofereix.",
|
||||
"No compatible source was found for this media.": "No s'ha trobat cap font compatible amb el vídeo."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("cs",{
|
||||
"Play": "Přehrát",
|
||||
"Pause": "Pauza",
|
||||
"Current Time": "Aktuální čas",
|
||||
"Duration Time": "Doba trvání",
|
||||
"Remaining Time": "Zbývající čas",
|
||||
"Stream Type": "Stream Type",
|
||||
"LIVE": "ŽIVĚ",
|
||||
"Loaded": "Načteno",
|
||||
"Progress": "Stav",
|
||||
"Fullscreen": "Celá obrazovka",
|
||||
"Non-Fullscreen": "Zmenšená obrazovka",
|
||||
"Mute": "Ztlumit zvuk",
|
||||
"Unmute": "Přehrát zvuk",
|
||||
"Playback Rate": "Rychlost přehrávání",
|
||||
"Subtitles": "Titulky",
|
||||
"subtitles off": "Titulky vypnuty",
|
||||
"Captions": "Popisky",
|
||||
"captions off": "Popisky vypnuty",
|
||||
"Chapters": "Kapitoly",
|
||||
"You aborted the media playback": "Přehrávání videa je přerušeno.",
|
||||
"A network error caused the media download to fail part-way.": "Video nemohlo být načteno, kvůli chybě v síti.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video nemohlo být načteno, buď kvůli chybě serveru nebo sítě nebo proto, že daný formát není podporován.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Váš prohlížeč nepodporuje formát videa.",
|
||||
"No compatible source was found for this media.": "Špatně zadaný zdroj videa."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("da",{
|
||||
"Play": "Afspil",
|
||||
"Pause": "Pause",
|
||||
"Current Time": "Aktuel tid",
|
||||
"Duration Time": "Varighed",
|
||||
"Remaining Time": "Resterende tid",
|
||||
"Stream Type": "Stream-type",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Indlæst",
|
||||
"Progress": "Status",
|
||||
"Fullscreen": "Fuldskærm",
|
||||
"Non-Fullscreen": "Luk fuldskærm",
|
||||
"Mute": "Uden lyd",
|
||||
"Unmute": "Med lyd",
|
||||
"Playback Rate": "Afspilningsrate",
|
||||
"Subtitles": "Undertekster",
|
||||
"subtitles off": "Uden undertekster",
|
||||
"Captions": "Undertekster for hørehæmmede",
|
||||
"captions off": "Uden undertekster for hørehæmmede",
|
||||
"Chapters": "Kapitler",
|
||||
"You aborted the media playback": "Du afbrød videoafspilningen.",
|
||||
"A network error caused the media download to fail part-way.": "En netværksfejl fik download af videoen til at fejle.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke indlæses, enten fordi serveren eller netværket fejlede, eller fordi formatet ikke er understøttet.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoafspilningen blev afbrudt på grund af ødelagte data eller fordi videoen benyttede faciliteter som din browser ikke understøtter.",
|
||||
"No compatible source was found for this media.": "Fandt ikke en kompatibel kilde for denne media."
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("de",{
|
||||
"Play": "Wiedergabe",
|
||||
"Pause": "Pause",
|
||||
"Current Time": "Aktueller Zeitpunkt",
|
||||
"Duration Time": "Dauer",
|
||||
"Remaining Time": "Verbleibende Zeit",
|
||||
"Stream Type": "Streamtyp",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Geladen",
|
||||
"Progress": "Status",
|
||||
"Fullscreen": "Vollbild",
|
||||
"Non-Fullscreen": "Kein Vollbild",
|
||||
"Mute": "Ton aus",
|
||||
"Unmute": "Ton ein",
|
||||
"Playback Rate": "Wiedergabegeschwindigkeit",
|
||||
"Subtitles": "Untertitel",
|
||||
"subtitles off": "Untertitel aus",
|
||||
"Captions": "Untertitel",
|
||||
"captions off": "Untertitel aus",
|
||||
"Chapters": "Kapitel",
|
||||
"You aborted the media playback": "Sie haben die Videowiedergabe abgebrochen.",
|
||||
"A network error caused the media download to fail part-way.": "Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.",
|
||||
"No compatible source was found for this media.": "Für dieses Video wurde keine kompatible Quelle gefunden.",
|
||||
"Play Video": "Video abspielen",
|
||||
"Close": "Schließen",
|
||||
"Modal Window": "Modales Fenster",
|
||||
"This is a modal window": "Dies ist ein modales Fenster",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Durch Drücken der Esc-Taste bzw. Betätigung der Schaltfläche \"Schließen\" wird dieses modale Fenster geschlossen.",
|
||||
", opens captions settings dialog": ", öffnet Einstellungen für Untertitel",
|
||||
", opens subtitles settings dialog": ", öffnet Einstellungen für Untertitel",
|
||||
", selected": ", ausgewählt",
|
||||
"Close Modal Dialog": "Modales Fenster schließen",
|
||||
"Descriptions": "Beschreibungen",
|
||||
"descriptions off": "Beschreibungen aus",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "Die Entschlüsselungsschlüssel für den verschlüsselten Medieninhalt sind nicht verfügbar.",
|
||||
", opens descriptions settings dialog": ", öffnet Einstellungen für Beschreibungen",
|
||||
"Audio Track": "Tonspur"
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("el",{
|
||||
"Play": "Aναπαραγωγή",
|
||||
"Pause": "Παύση",
|
||||
"Current Time": "Τρέχων χρόνος",
|
||||
"Duration Time": "Συνολικός χρόνος",
|
||||
"Remaining Time": "Υπολοιπόμενος χρόνος",
|
||||
"Stream Type": "Τύπος ροής",
|
||||
"LIVE": "ΖΩΝΤΑΝΑ",
|
||||
"Loaded": "Φόρτωση επιτυχής",
|
||||
"Progress": "Πρόοδος",
|
||||
"Fullscreen": "Πλήρης οθόνη",
|
||||
"Non-Fullscreen": "Έξοδος από πλήρη οθόνη",
|
||||
"Mute": "Σίγαση",
|
||||
"Unmute": "Kατάργηση σίγασης",
|
||||
"Playback Rate": "Ρυθμός αναπαραγωγής",
|
||||
"Subtitles": "Υπότιτλοι",
|
||||
"subtitles off": "απόκρυψη υπότιτλων",
|
||||
"Captions": "Λεζάντες",
|
||||
"captions off": "απόκρυψη λεζάντων",
|
||||
"Chapters": "Κεφάλαια",
|
||||
"Close Modal Dialog": "Κλείσιμο παραθύρου",
|
||||
"Descriptions": "Περιγραφές",
|
||||
"descriptions off": "απόκρυψη περιγραφών",
|
||||
"Audio Track": "Ροή ήχου",
|
||||
"You aborted the media playback": "Ακυρώσατε την αναπαραγωγή",
|
||||
"A network error caused the media download to fail part-way.": "Ένα σφάλμα δικτύου προκάλεσε την αποτυχία μεταφόρτωσης του αρχείου προς αναπαραγωγή.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Το αρχείο προς αναπαραγωγή δεν ήταν δυνατό να φορτωθεί είτε γιατί υπήρξε σφάλμα στον διακομιστή ή το δίκτυο, είτε γιατί ο τύπος του αρχείου δεν υποστηρίζεται.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Η αναπαραγωγή ακυρώθηκε είτε λόγω κατεστραμμένου αρχείου, είτε γιατί το αρχείο απαιτεί λειτουργίες που δεν υποστηρίζονται από το πρόγραμμα περιήγησης που χρησιμοποιείτε.",
|
||||
"No compatible source was found for this media.": "Δεν βρέθηκε συμβατή πηγή αναπαραγωγής για το συγκεκριμένο αρχείο.",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "Το αρχείο προς αναπαραγωγή είναι κρυπτογραφημένo και δεν υπάρχουν τα απαραίτητα κλειδιά αποκρυπτογράφησης.",
|
||||
"Play Video": "Αναπαραγωγή βίντεο",
|
||||
"Close": "Κλείσιμο",
|
||||
"Modal Window": "Aναδυόμενο παράθυρο",
|
||||
"This is a modal window": "Το παρών είναι ένα αναδυόμενο παράθυρο",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Αυτό το παράθυρο μπορεί να εξαφανιστεί πατώντας το πλήκτρο Escape ή πατώντας το κουμπί κλεισίματος.",
|
||||
", opens captions settings dialog": ", εμφανίζει τις ρυθμίσεις για τις λεζάντες",
|
||||
", opens subtitles settings dialog": ", εμφανίζει τις ρυθμίσεις για τους υπότιτλους",
|
||||
", opens descriptions settings dialog": ", εμφανίζει τις ρυθμίσεις για τις περιγραφές",
|
||||
", selected": ", επιλεγμένο"
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("en",{
|
||||
"Play": "Play",
|
||||
"Pause": "Pause",
|
||||
"Current Time": "Current Time",
|
||||
"Duration Time": "Duration Time",
|
||||
"Remaining Time": "Remaining Time",
|
||||
"Stream Type": "Stream Type",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Loaded",
|
||||
"Progress": "Progress",
|
||||
"Fullscreen": "Fullscreen",
|
||||
"Non-Fullscreen": "Non-Fullscreen",
|
||||
"Mute": "Mute",
|
||||
"Unmute": "Unmute",
|
||||
"Playback Rate": "Playback Rate",
|
||||
"Subtitles": "Subtitles",
|
||||
"subtitles off": "subtitles off",
|
||||
"Captions": "Captions",
|
||||
"captions off": "captions off",
|
||||
"Chapters": "Chapters",
|
||||
"Close Modal Dialog": "Close Modal Dialog",
|
||||
"Descriptions": "Descriptions",
|
||||
"descriptions off": "descriptions off",
|
||||
"Audio Track": "Audio Track",
|
||||
"You aborted the media playback": "You aborted the media playback",
|
||||
"A network error caused the media download to fail part-way.": "A network error caused the media download to fail part-way.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "The media could not be loaded, either because the server or network failed or because the format is not supported.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",
|
||||
"No compatible source was found for this media.": "No compatible source was found for this media.",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "The media is encrypted and we do not have the keys to decrypt it.",
|
||||
"Play Video": "Play Video",
|
||||
"Close": "Close",
|
||||
"Modal Window": "Modal Window",
|
||||
"This is a modal window": "This is a modal window",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "This modal can be closed by pressing the Escape key or activating the close button.",
|
||||
", opens captions settings dialog": ", opens captions settings dialog",
|
||||
", opens subtitles settings dialog": ", opens subtitles settings dialog",
|
||||
", opens descriptions settings dialog": ", opens descriptions settings dialog",
|
||||
", selected": ", selected"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("es",{
|
||||
"Play": "Reproducción",
|
||||
"Pause": "Pausa",
|
||||
"Current Time": "Tiempo reproducido",
|
||||
"Duration Time": "Duración total",
|
||||
"Remaining Time": "Tiempo restante",
|
||||
"Stream Type": "Tipo de secuencia",
|
||||
"LIVE": "DIRECTO",
|
||||
"Loaded": "Cargado",
|
||||
"Progress": "Progreso",
|
||||
"Fullscreen": "Pantalla completa",
|
||||
"Non-Fullscreen": "Pantalla no completa",
|
||||
"Mute": "Silenciar",
|
||||
"Unmute": "No silenciado",
|
||||
"Playback Rate": "Velocidad de reproducción",
|
||||
"Subtitles": "Subtítulos",
|
||||
"subtitles off": "Subtítulos desactivados",
|
||||
"Captions": "Subtítulos especiales",
|
||||
"captions off": "Subtítulos especiales desactivados",
|
||||
"Chapters": "Capítulos",
|
||||
"You aborted the media playback": "Ha interrumpido la reproducción del vídeo.",
|
||||
"A network error caused the media download to fail part-way.": "Un error de red ha interrumpido la descarga del vídeo.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "No se ha podido cargar el vídeo debido a un fallo de red o del servidor o porque el formato es incompatible.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducción de vídeo se ha interrumpido por un problema de corrupción de datos o porque el vídeo precisa funciones que su navegador no ofrece.",
|
||||
"No compatible source was found for this media.": "No se ha encontrado ninguna fuente compatible con este vídeo."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("fa",{
|
||||
"Play": "پخش",
|
||||
"Pause": "وقفه",
|
||||
"Current Time": "زمان کنونی",
|
||||
"Duration Time": "مدت زمان",
|
||||
"Remaining Time": "زمان باقیمانده",
|
||||
"Stream Type": "نوع استریم",
|
||||
"LIVE": "زنده",
|
||||
"Loaded": "فراخوانی شده",
|
||||
"Progress": "پیشرفت",
|
||||
"Fullscreen": "تمام صفحه",
|
||||
"Non-Fullscreen": "نمایش عادی",
|
||||
"Mute": "بی صدا",
|
||||
"Unmute": "بهمراه صدا",
|
||||
"Playback Rate": "سرعت پخش",
|
||||
"Subtitles": "زیرنویس",
|
||||
"subtitles off": "بدون زیرنویس",
|
||||
"Captions": "عنوان",
|
||||
"captions off": "بدون عنوان",
|
||||
"Chapters": "فصل",
|
||||
"You aborted the media playback": "شما پخش را متوقف کردید.",
|
||||
"A network error caused the media download to fail part-way.": "مشکل در دریافت ویدئو ...",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "فرمت پشتیبانی نمیشود یا خطایی روی داده است.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "مشکل در دریافت ویدئو ...",
|
||||
"No compatible source was found for this media.": "هیچ ورودی ای برای این رسانه شناسایی نشد."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("fi",{
|
||||
"Play": "Toisto",
|
||||
"Pause": "Tauko",
|
||||
"Current Time": "Tämänhetkinen aika",
|
||||
"Duration Time": "Kokonaisaika",
|
||||
"Remaining Time": "Jäljellä oleva aika",
|
||||
"Stream Type": "Lähetystyyppi",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Ladattu",
|
||||
"Progress": "Edistyminen",
|
||||
"Fullscreen": "Koko näyttö",
|
||||
"Non-Fullscreen": "Koko näyttö pois",
|
||||
"Mute": "Ääni pois",
|
||||
"Unmute": "Ääni päällä",
|
||||
"Playback Rate": "Toistonopeus",
|
||||
"Subtitles": "Tekstitys",
|
||||
"subtitles off": "Tekstitys pois",
|
||||
"Captions": "Tekstitys",
|
||||
"captions off": "Tekstitys pois",
|
||||
"Chapters": "Kappaleet",
|
||||
"You aborted the media playback": "Olet keskeyttänyt videotoiston.",
|
||||
"A network error caused the media download to fail part-way.": "Verkkovirhe keskeytti videon latauksen.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videon lataus ei onnistunut joko palvelin- tai verkkovirheestä tai väärästä formaatista johtuen.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videon toisto keskeytyi, koska media on vaurioitunut tai käyttää käyttää toimintoja, joita selaimesi ei tue.",
|
||||
"No compatible source was found for this media.": "Tälle videolle ei löytynyt yhteensopivaa lähdettä."
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("fr",{
|
||||
"Play": "Lecture",
|
||||
"Pause": "Pause",
|
||||
"Current Time": "Temps actuel",
|
||||
"Duration Time": "Durée",
|
||||
"Remaining Time": "Temps restant",
|
||||
"Stream Type": "Type de flux",
|
||||
"LIVE": "EN DIRECT",
|
||||
"Loaded": "Chargé",
|
||||
"Progress": "Progression",
|
||||
"Fullscreen": "Plein écran",
|
||||
"Non-Fullscreen": "Fenêtré",
|
||||
"Mute": "Sourdine",
|
||||
"Unmute": "Son activé",
|
||||
"Playback Rate": "Vitesse de lecture",
|
||||
"Subtitles": "Sous-titres",
|
||||
"subtitles off": "Sous-titres désactivés",
|
||||
"Captions": "Sous-titres transcrits",
|
||||
"captions off": "Sous-titres transcrits désactivés",
|
||||
"Chapters": "Chapitres",
|
||||
"Close Modal Dialog": "Fermer la boîte de dialogue modale",
|
||||
"Descriptions": "Descriptions",
|
||||
"descriptions off": "descriptions désactivées",
|
||||
"Audio Track": "Piste audio",
|
||||
"You aborted the media playback": "Vous avez interrompu la lecture de la vidéo.",
|
||||
"A network error caused the media download to fail part-way.": "Une erreur de réseau a interrompu le téléchargement de la vidéo.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.",
|
||||
"No compatible source was found for this media.": "Aucune source compatible n'a été trouvée pour cette vidéo.",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "Le média est chiffré et nous n'avons pas les clés pour le déchiffrer.",
|
||||
"Play Video": "Lire la vidéo",
|
||||
"Close": "Fermer",
|
||||
"Modal Window": "Fenêtre modale",
|
||||
"This is a modal window": "Ceci est une fenêtre modale",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Ce modal peut être fermé en appuyant sur la touche Échap ou activer le bouton de fermeture.",
|
||||
", opens captions settings dialog": ", ouvrir les paramètres des sous-titres transcrits",
|
||||
", opens subtitles settings dialog": ", ouvrir les paramètres des sous-titres",
|
||||
", opens descriptions settings dialog": ", ouvrir les paramètres des descriptions",
|
||||
", selected": ", sélectionné"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("hr",{
|
||||
"Play": "Pusti",
|
||||
"Pause": "Pauza",
|
||||
"Current Time": "Trenutno vrijeme",
|
||||
"Duration Time": "Vrijeme trajanja",
|
||||
"Remaining Time": "Preostalo vrijeme",
|
||||
"Stream Type": "Način strimovanja",
|
||||
"LIVE": "UŽIVO",
|
||||
"Loaded": "Učitan",
|
||||
"Progress": "Progres",
|
||||
"Fullscreen": "Puni ekran",
|
||||
"Non-Fullscreen": "Mali ekran",
|
||||
"Mute": "Prigušen",
|
||||
"Unmute": "Ne-prigušen",
|
||||
"Playback Rate": "Stopa reprodukcije",
|
||||
"Subtitles": "Podnaslov",
|
||||
"subtitles off": "Podnaslov deaktiviran",
|
||||
"Captions": "Titlovi",
|
||||
"captions off": "Titlovi deaktivirani",
|
||||
"Chapters": "Poglavlja",
|
||||
"You aborted the media playback": "Isključili ste reprodukciju videa.",
|
||||
"A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
|
||||
"No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("hu",{
|
||||
"Play": "Lejátszás",
|
||||
"Pause": "Szünet",
|
||||
"Current Time": "Aktuális időpont",
|
||||
"Duration Time": "Hossz",
|
||||
"Remaining Time": "Hátralévő idő",
|
||||
"Stream Type": "Adatfolyam típusa",
|
||||
"LIVE": "ÉLŐ",
|
||||
"Loaded": "Betöltve",
|
||||
"Progress": "Állapot",
|
||||
"Fullscreen": "Teljes képernyő",
|
||||
"Non-Fullscreen": "Normál méret",
|
||||
"Mute": "Némítás",
|
||||
"Unmute": "Némítás kikapcsolva",
|
||||
"Playback Rate": "Lejátszási sebesség",
|
||||
"Subtitles": "Feliratok",
|
||||
"subtitles off": "Feliratok kikapcsolva",
|
||||
"Captions": "Magyarázó szöveg",
|
||||
"captions off": "Magyarázó szöveg kikapcsolva",
|
||||
"Chapters": "Fejezetek",
|
||||
"You aborted the media playback": "Leállította a lejátszást",
|
||||
"A network error caused the media download to fail part-way.": "Hálózati hiba miatt a videó részlegesen töltődött le.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "A videó nem tölthető be hálózati vagy kiszolgálói hiba miatt, vagy a formátuma nem támogatott.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A lejátszás adatsérülés miatt leállt, vagy a videó egyes tulajdonságait a böngészője nem támogatja.",
|
||||
"No compatible source was found for this media.": "Nincs kompatibilis forrás ehhez a videóhoz."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("it",{
|
||||
"Play": "Play",
|
||||
"Pause": "Pausa",
|
||||
"Current Time": "Orario attuale",
|
||||
"Duration Time": "Durata",
|
||||
"Remaining Time": "Tempo rimanente",
|
||||
"Stream Type": "Tipo del Streaming",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Caricato",
|
||||
"Progress": "Stato",
|
||||
"Fullscreen": "Schermo intero",
|
||||
"Non-Fullscreen": "Chiudi schermo intero",
|
||||
"Mute": "Muto",
|
||||
"Unmute": "Audio",
|
||||
"Playback Rate": "Tasso di riproduzione",
|
||||
"Subtitles": "Sottotitoli",
|
||||
"subtitles off": "Senza sottotitoli",
|
||||
"Captions": "Sottotitoli non udenti",
|
||||
"captions off": "Senza sottotitoli non udenti",
|
||||
"Chapters": "Capitolo",
|
||||
"You aborted the media playback": "La riproduzione del filmato è stata interrotta.",
|
||||
"A network error caused the media download to fail part-way.": "Il download del filmato è stato interrotto a causa di un problema rete.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Il filmato non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La riproduzione del filmato è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.",
|
||||
"No compatible source was found for this media.": "Non ci sono fonti compatibili per questo filmato."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("ja",{
|
||||
"Play": "再生",
|
||||
"Pause": "一時停止",
|
||||
"Current Time": "現在の時間",
|
||||
"Duration Time": "長さ",
|
||||
"Remaining Time": "残りの時間",
|
||||
"Stream Type": "ストリームの種類",
|
||||
"LIVE": "ライブ",
|
||||
"Loaded": "ロード済み",
|
||||
"Progress": "進行状況",
|
||||
"Fullscreen": "フルスクリーン",
|
||||
"Non-Fullscreen": "フルスクリーン以外",
|
||||
"Mute": "ミュート",
|
||||
"Unmute": "ミュート解除",
|
||||
"Playback Rate": "再生レート",
|
||||
"Subtitles": "サブタイトル",
|
||||
"subtitles off": "サブタイトル オフ",
|
||||
"Captions": "キャプション",
|
||||
"captions off": "キャプション オフ",
|
||||
"Chapters": "チャプター",
|
||||
"You aborted the media playback": "動画再生を中止しました",
|
||||
"A network error caused the media download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました",
|
||||
"No compatible source was found for this media.": "この動画に対して互換性のあるソースが見つかりませんでした"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("ko",{
|
||||
"Play": "재생",
|
||||
"Pause": "일시중지",
|
||||
"Current Time": "현재 시간",
|
||||
"Duration Time": "지정 기간",
|
||||
"Remaining Time": "남은 시간",
|
||||
"Stream Type": "스트리밍 유형",
|
||||
"LIVE": "라이브",
|
||||
"Loaded": "로드됨",
|
||||
"Progress": "진행",
|
||||
"Fullscreen": "전체 화면",
|
||||
"Non-Fullscreen": "전체 화면 해제",
|
||||
"Mute": "음소거",
|
||||
"Unmute": "음소거 해제",
|
||||
"Playback Rate": "재생 비율",
|
||||
"Subtitles": "서브타이틀",
|
||||
"subtitles off": "서브타이틀 끄기",
|
||||
"Captions": "자막",
|
||||
"captions off": "자막 끄기",
|
||||
"Chapters": "챕터",
|
||||
"You aborted the media playback": "비디오 재생을 취소했습니다.",
|
||||
"A network error caused the media download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.",
|
||||
"No compatible source was found for this media.": "비디오에 호환되지 않는 소스가 있습니다."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("nb",{
|
||||
"Play": "Spill",
|
||||
"Pause": "Pause",
|
||||
"Current Time": "Aktuell tid",
|
||||
"Duration Time": "Varighet",
|
||||
"Remaining Time": "Gjenstående tid",
|
||||
"Stream Type": "Type strøm",
|
||||
"LIVE": "DIREKTE",
|
||||
"Loaded": "Lastet inn",
|
||||
"Progress": "Status",
|
||||
"Fullscreen": "Fullskjerm",
|
||||
"Non-Fullscreen": "Lukk fullskjerm",
|
||||
"Mute": "Lyd av",
|
||||
"Unmute": "Lyd på",
|
||||
"Playback Rate": "Avspillingsrate",
|
||||
"Subtitles": "Undertekst på",
|
||||
"subtitles off": "Undertekst av",
|
||||
"Captions": "Undertekst for hørselshemmede på",
|
||||
"captions off": "Undertekst for hørselshemmede av",
|
||||
"Chapters": "Kapitler",
|
||||
"You aborted the media playback": "Du avbrøt avspillingen.",
|
||||
"A network error caused the media download to fail part-way.": "En nettverksfeil avbrøt nedlasting av videoen.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke lastes ned, på grunn av nettverksfeil eller serverfeil, eller fordi formatet ikke er støttet.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspillingen ble avbrudt på grunn av ødelagte data eller fordi videoen ville gjøre noe som nettleseren din ikke har støtte for.",
|
||||
"No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet."
|
||||
});
|
||||
externo
+37
@@ -0,0 +1,37 @@
|
||||
videojs.addLanguage("nl",{
|
||||
"Play": "Afspelen",
|
||||
"Pause": "Pauze",
|
||||
"Current Time": "Huidige tijd",
|
||||
"Duration Time": "Looptijd",
|
||||
"Remaining Time": "Resterende tijd",
|
||||
"Stream Type": "Streamtype",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Geladen",
|
||||
"Progress": "Status",
|
||||
"Fullscreen": "Volledig scherm",
|
||||
"Non-Fullscreen": "Geen volledig scherm",
|
||||
"Mute": "Geluid uit",
|
||||
"Unmute": "Geluid aan",
|
||||
"Playback Rate": "Weergavesnelheid",
|
||||
"Subtitles": "Ondertiteling",
|
||||
"subtitles off": "ondertiteling uit",
|
||||
"Captions": "Bijschriften",
|
||||
"captions off": "bijschriften uit",
|
||||
"Chapters": "Hoofdstukken",
|
||||
"Descriptions": "Beschrijvingen",
|
||||
"descriptions off": "beschrijvingen off",
|
||||
"You aborted the media playback": "U hebt de mediaweergave afgebroken.",
|
||||
"A network error caused the media download to fail part-way.": "De mediadownload is mislukt door een netwerkfout.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "De media kon niet worden geladen, vanwege een server- of netwerkfout of doordat het formaat niet wordt ondersteund.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "De mediaweergave is afgebroken vanwege beschadigde data of het mediabestand gebruikt functies die niet door uw browser worden ondersteund.",
|
||||
"No compatible source was found for this media.": "Voor deze media is geen ondersteunde bron gevonden.",
|
||||
"Play Video": "Video Afspelen",
|
||||
"Close": "Sluiten",
|
||||
"Modal Window": "Modal Venster",
|
||||
"This is a modal window": "Dit is een modaal venster",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Dit modaal venster kan gesloten worden door op Escape te drukken of de 'sluiten' knop te activeren.",
|
||||
", opens captions settings dialog": ", opent bijschriften instellingen venster",
|
||||
", opens subtitles settings dialog": ", opent ondertiteling instellingen venster",
|
||||
", opens descriptions settings dialog": ", opent beschrijvingen instellingen venster",
|
||||
", selected": ", selected"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("nn",{
|
||||
"Play": "Spel",
|
||||
"Pause": "Pause",
|
||||
"Current Time": "Aktuell tid",
|
||||
"Duration Time": "Varigheit",
|
||||
"Remaining Time": "Tid attende",
|
||||
"Stream Type": "Type straum",
|
||||
"LIVE": "DIREKTE",
|
||||
"Loaded": "Lasta inn",
|
||||
"Progress": "Status",
|
||||
"Fullscreen": "Fullskjerm",
|
||||
"Non-Fullscreen": "Stenga fullskjerm",
|
||||
"Mute": "Ljod av",
|
||||
"Unmute": "Ljod på",
|
||||
"Playback Rate": "Avspelingsrate",
|
||||
"Subtitles": "Teksting på",
|
||||
"subtitles off": "Teksting av",
|
||||
"Captions": "Teksting for høyrselshemma på",
|
||||
"captions off": "Teksting for høyrselshemma av",
|
||||
"Chapters": "Kapitel",
|
||||
"You aborted the media playback": "Du avbraut avspelinga.",
|
||||
"A network error caused the media download to fail part-way.": "Ein nettverksfeil avbraut nedlasting av videoen.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikkje lastas ned, på grunn av ein nettverksfeil eller serverfeil, eller av di formatet ikkje er stoda.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspelinga blei broten på grunn av øydelagde data eller av di videoen ville gjera noe som nettlesaren din ikkje stodar.",
|
||||
"No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet."
|
||||
});
|
||||
externo
+34
@@ -0,0 +1,34 @@
|
||||
videojs.addLanguage("pl",{
|
||||
"Play": "Odtwarzaj",
|
||||
"Pause": "Pauza",
|
||||
"Current Time": "Aktualny czas",
|
||||
"Duration Time": "Czas trwania",
|
||||
"Remaining Time": "Pozostały czas",
|
||||
"Stream Type": "Typ strumienia",
|
||||
"LIVE": "NA ŻYWO",
|
||||
"Loaded": "Załadowany",
|
||||
"Progress": "Status",
|
||||
"Fullscreen": "Pełny ekran",
|
||||
"Non-Fullscreen": "Pełny ekran niedostępny",
|
||||
"Mute": "Wyłącz dźwięk",
|
||||
"Unmute": "Włącz dźwięk",
|
||||
"Playback Rate": "Szybkość odtwarzania",
|
||||
"Subtitles": "Napisy",
|
||||
"subtitles off": "Napisy wyłączone",
|
||||
"Captions": "Transkrypcja",
|
||||
"captions off": "Transkrypcja wyłączona",
|
||||
"Chapters": "Rozdziały",
|
||||
"You aborted the media playback": "Odtwarzanie zostało przerwane",
|
||||
"A network error caused the media download to fail part-way.": "Problemy z siecią spowodowały błąd przy pobieraniu materiału wideo.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Materiał wideo nie może być załadowany, ponieważ wystąpił problem z siecią lub format nie jest obsługiwany",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Odtwarzanie materiału wideo zostało przerwane z powodu uszkodzonego pliku wideo lub z powodu błędu funkcji, które nie są wspierane przez przeglądarkę.",
|
||||
"No compatible source was found for this media.": "Dla tego materiału wideo nie znaleziono kompatybilnego źródła.",
|
||||
"Play video": "Odtwarzaj wideo",
|
||||
"Close": "Zamknij",
|
||||
"Modal Window": "Okno Modala",
|
||||
"This is a modal window": "To jest okno modala",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Ten modal możesz zamknąć naciskając przycisk Escape albo wybierając przycisk Zamknij.",
|
||||
", opens captions settings dialog": ", otwiera okno dialogowe ustawień transkrypcji",
|
||||
", opens subtitles settings dialog": ", otwiera okno dialogowe napisów",
|
||||
", selected": ", zaznaczone"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("pt-BR",{
|
||||
"Play": "Tocar",
|
||||
"Pause": "Pausar",
|
||||
"Current Time": "Tempo",
|
||||
"Duration Time": "Duração",
|
||||
"Remaining Time": "Tempo Restante",
|
||||
"Stream Type": "Tipo de Stream",
|
||||
"LIVE": "AO VIVO",
|
||||
"Loaded": "Carregado",
|
||||
"Progress": "Progresso",
|
||||
"Fullscreen": "Tela Cheia",
|
||||
"Non-Fullscreen": "Tela Normal",
|
||||
"Mute": "Mudo",
|
||||
"Unmute": "Habilitar Som",
|
||||
"Playback Rate": "Velocidade",
|
||||
"Subtitles": "Legendas",
|
||||
"subtitles off": "Sem Legendas",
|
||||
"Captions": "Anotações",
|
||||
"captions off": "Sem Anotações",
|
||||
"Chapters": "Capítulos",
|
||||
"You aborted the media playback": "Você parou a execução do vídeo.",
|
||||
"A network error caused the media download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.",
|
||||
"No compatible source was found for this media.": "Não foi encontrada fonte de vídeo compatível."
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("ru",{
|
||||
"Play": "Воспроизвести",
|
||||
"Pause": "Приостановить",
|
||||
"Current Time": "Текущее время",
|
||||
"Duration Time": "Продолжительность",
|
||||
"Remaining Time": "Оставшееся время",
|
||||
"Stream Type": "Тип потока",
|
||||
"LIVE": "ОНЛАЙН",
|
||||
"Loaded": "Загрузка",
|
||||
"Progress": "Прогресс",
|
||||
"Fullscreen": "Полноэкранный режим",
|
||||
"Non-Fullscreen": "Неполноэкранный режим",
|
||||
"Mute": "Без звука",
|
||||
"Unmute": "Со звуком",
|
||||
"Playback Rate": "Скорость воспроизведения",
|
||||
"Subtitles": "Субтитры",
|
||||
"subtitles off": "Субтитры выкл.",
|
||||
"Captions": "Подписи",
|
||||
"captions off": "Подписи выкл.",
|
||||
"Chapters": "Главы",
|
||||
"Close Modal Dialog": "Закрыть модальное окно",
|
||||
"Descriptions": "Описания",
|
||||
"descriptions off": "описания выкл.",
|
||||
"Audio Track": "Звуковая дорожка",
|
||||
"You aborted the media playback": "Вы прервали воспроизведение видео",
|
||||
"A network error caused the media download to fail part-way.": "Ошибка сети вызвала сбой во время загрузки видео.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Невозможно загрузить видео из-за сетевого или серверного сбоя либо формат не поддерживается.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Воспроизведение видео было приостановлено из-за повреждения либо в связи с тем, что видео использует функции, неподдерживаемые вашим браузером.",
|
||||
"No compatible source was found for this media.": "Совместимые источники для этого видео отсутствуют.",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "Видео в зашифрованном виде, и у нас нет ключей для расшифровки.",
|
||||
"Play Video": "Воспроизвести видео",
|
||||
"Close": "Закрыть",
|
||||
"Modal Window": "Модальное окно",
|
||||
"This is a modal window": "Это модальное окно.",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Модальное окно можно закрыть нажав Esc или кнопку закрытия окна.",
|
||||
", opens captions settings dialog": ", откроется диалог настройки подписей",
|
||||
", opens subtitles settings dialog": ", откроется диалог настройки субтитров",
|
||||
", opens descriptions settings dialog": ", откроется диалог настройки описаний",
|
||||
", selected": ", выбрано"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("sr",{
|
||||
"Play": "Pusti",
|
||||
"Pause": "Pauza",
|
||||
"Current Time": "Trenutno vrijeme",
|
||||
"Duration Time": "Vrijeme trajanja",
|
||||
"Remaining Time": "Preostalo vrijeme",
|
||||
"Stream Type": "Način strimovanja",
|
||||
"LIVE": "UŽIVO",
|
||||
"Loaded": "Učitan",
|
||||
"Progress": "Progres",
|
||||
"Fullscreen": "Puni ekran",
|
||||
"Non-Fullscreen": "Mali ekran",
|
||||
"Mute": "Prigušen",
|
||||
"Unmute": "Ne-prigušen",
|
||||
"Playback Rate": "Stopa reprodukcije",
|
||||
"Subtitles": "Podnaslov",
|
||||
"subtitles off": "Podnaslov deaktiviran",
|
||||
"Captions": "Titlovi",
|
||||
"captions off": "Titlovi deaktivirani",
|
||||
"Chapters": "Poglavlja",
|
||||
"You aborted the media playback": "Isključili ste reprodukciju videa.",
|
||||
"A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
|
||||
"No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("sv",{
|
||||
"Play": "Spela",
|
||||
"Pause": "Pausa",
|
||||
"Current Time": "Aktuell tid",
|
||||
"Duration Time": "Total tid",
|
||||
"Remaining Time": "Återstående tid",
|
||||
"Stream Type": "Strömningstyp",
|
||||
"LIVE": "LIVE",
|
||||
"Loaded": "Laddad",
|
||||
"Progress": "Förlopp",
|
||||
"Fullscreen": "Fullskärm",
|
||||
"Non-Fullscreen": "Ej fullskärm",
|
||||
"Mute": "Ljud av",
|
||||
"Unmute": "Ljud på",
|
||||
"Playback Rate": "Uppspelningshastighet",
|
||||
"Subtitles": "Text på",
|
||||
"subtitles off": "Text av",
|
||||
"Captions": "Text på",
|
||||
"captions off": "Text av",
|
||||
"Chapters": "Kapitel",
|
||||
"You aborted the media playback": "Du har avbrutit videouppspelningen.",
|
||||
"A network error caused the media download to fail part-way.": "Ett nätverksfel gjorde att nedladdningen av videon avbröts.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Det gick inte att ladda videon, antingen på grund av ett server- eller nätverksfel, eller för att formatet inte stöds.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Uppspelningen avbröts på grund av att videon är skadad, eller också för att videon använder funktioner som din webbläsare inte stöder.",
|
||||
"No compatible source was found for this media.": "Det gick inte att hitta någon kompatibel källa för den här videon."
|
||||
});
|
||||
externo
+34
@@ -0,0 +1,34 @@
|
||||
videojs.addLanguage("tr",{
|
||||
"Play": "Oynat",
|
||||
"Pause": "Duraklat",
|
||||
"Current Time": "Süre",
|
||||
"Duration Time": "Toplam Süre",
|
||||
"Remaining Time": "Kalan Süre",
|
||||
"Stream Type": "Yayın Tipi",
|
||||
"LIVE": "CANLI",
|
||||
"Loaded": "Yüklendi",
|
||||
"Progress": "Yükleniyor",
|
||||
"Fullscreen": "Tam Ekran",
|
||||
"Non-Fullscreen": "Küçük Ekran",
|
||||
"Mute": "Ses Kapa",
|
||||
"Unmute": "Ses Aç",
|
||||
"Playback Rate": "Oynatma Hızı",
|
||||
"Subtitles": "Altyazı",
|
||||
"subtitles off": "Altyazı Kapalı",
|
||||
"Captions": "Ek Açıklamalar",
|
||||
"captions off": "Ek Açıklamalar Kapalı",
|
||||
"Chapters": "Bölümler",
|
||||
"You aborted the media playback": "Video oynatmayı iptal ettiniz",
|
||||
"A network error caused the media download to fail part-way.": "Video indirilirken bağlantı sorunu oluştu.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video oynatılamadı, ağ ya da sunucu hatası veya belirtilen format desteklenmiyor.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Tarayıcınız desteklemediği için videoda hata oluştu.",
|
||||
"No compatible source was found for this media.": "Video için kaynak bulunamadı.",
|
||||
"Play Video": "Videoyu Oynat",
|
||||
"Close": "Kapat",
|
||||
"Modal Window": "Modal Penceresi",
|
||||
"This is a modal window": "Bu bir modal penceresidir",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Bu modal ESC tuşuna basarak ya da kapata tıklanarak kapatılabilir.",
|
||||
", opens captions settings dialog": ", ek açıklama ayarları menüsünü açar",
|
||||
", opens subtitles settings dialog": ", altyazı ayarları menüsünü açar",
|
||||
", selected": ", seçildi"
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("uk",{
|
||||
"Play": "Відтворити",
|
||||
"Pause": "Призупинити",
|
||||
"Current Time": "Поточний час",
|
||||
"Duration Time": "Тривалість",
|
||||
"Remaining Time": "Час, що залишився",
|
||||
"Stream Type": "Тип потоку",
|
||||
"LIVE": "НАЖИВО",
|
||||
"Loaded": "Завантаження",
|
||||
"Progress": "Прогрес",
|
||||
"Fullscreen": "Повноекранний режим",
|
||||
"Non-Fullscreen": "Неповноекранний режим",
|
||||
"Mute": "Без звуку",
|
||||
"Unmute": "Зі звуком",
|
||||
"Playback Rate": "Швидкість відтворення",
|
||||
"Subtitles": "Субтитри",
|
||||
"subtitles off": "Без субтитрів",
|
||||
"Captions": "Підписи",
|
||||
"captions off": "Без підписів",
|
||||
"Chapters": "Розділи",
|
||||
"Close Modal Dialog": "Закрити модальний діалог",
|
||||
"Descriptions": "Описи",
|
||||
"descriptions off": "Без описів",
|
||||
"Audio Track": "Аудіодоріжка",
|
||||
"You aborted the media playback": "Ви припинили відтворення відео",
|
||||
"A network error caused the media download to fail part-way.": "Помилка мережі викликала збій під час завантаження відео.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Неможливо завантажити відео через мережевий чи серверний збій або формат не підтримується.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Відтворення відео було припинено через пошкодження або у зв'язку з тим, що відео використовує функції, які не підтримуються вашим браузером.",
|
||||
"No compatible source was found for this media.": "Сумісні джерела для цього відео відсутні.",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "Відео в зашифрованому вигляді, і ми не маємо ключі для розшифровки.",
|
||||
"Play Video": "Відтворити відео",
|
||||
"Close": "Закрити",
|
||||
"Modal Window": "Модальне вікно",
|
||||
"This is a modal window": "Це модальне вікно.",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "Модальне вікно можна закрити, натиснувши клавішу Esc або кнопку закриття вікна.",
|
||||
", opens captions settings dialog": ", відкриється діалогове вікно налаштування підписів",
|
||||
", opens subtitles settings dialog": ", відкриється діалогове вікно налаштування субтитрів",
|
||||
", opens descriptions settings dialog": ", відкриється діалогове вікно налаштування описів",
|
||||
", selected": ", обраний"
|
||||
});
|
||||
externo
+26
@@ -0,0 +1,26 @@
|
||||
videojs.addLanguage("vi",{
|
||||
"Play": "Phát",
|
||||
"Pause": "Tạm dừng",
|
||||
"Current Time": "Thời gian hiện tại",
|
||||
"Duration Time": "Độ dài",
|
||||
"Remaining Time": "Thời gian còn lại",
|
||||
"Stream Type": "Kiểu Stream",
|
||||
"LIVE": "TRỰC TIẾP",
|
||||
"Loaded": "Đã tải",
|
||||
"Progress": "Tiến trình",
|
||||
"Fullscreen": "Toàn màn hình",
|
||||
"Non-Fullscreen": "Thoát toàn màn hình",
|
||||
"Mute": "Tắt tiếng",
|
||||
"Unmute": "Bật âm thanh",
|
||||
"Playback Rate": "Tốc độ phát",
|
||||
"Subtitles": "Phụ đề",
|
||||
"subtitles off": "Tắt phụ đề",
|
||||
"Captions": "Chú thích",
|
||||
"captions off": "Tắt chú thích",
|
||||
"Chapters": "Chương",
|
||||
"You aborted the media playback": "Bạn đã hủy việc phát media.",
|
||||
"A network error caused the media download to fail part-way.": "Một lỗi mạng dẫn đến việc tải media bị lỗi.",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video không tải được, mạng hay server có lỗi hoặc định dạng không được hỗ trợ.",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Phát media đã bị hủy do một sai lỗi hoặc media sử dụng những tính năng trình duyệt không hỗ trợ.",
|
||||
"No compatible source was found for this media.": "Không có nguồn tương thích cho media này."
|
||||
});
|
||||
externo
+27
@@ -0,0 +1,27 @@
|
||||
videojs.addLanguage("zh-CN",{
|
||||
"Play": "播放",
|
||||
"Pause": "暂停",
|
||||
"Current Time": "当前时间",
|
||||
"Duration Time": "时长",
|
||||
"Remaining Time": "剩余时间",
|
||||
"Stream Type": "媒体流类型",
|
||||
"LIVE": "直播",
|
||||
"Loaded": "加载完毕",
|
||||
"Progress": "进度",
|
||||
"Fullscreen": "全屏",
|
||||
"Non-Fullscreen": "退出全屏",
|
||||
"Mute": "静音",
|
||||
"Unmute": "取消静音",
|
||||
"Playback Rate": "播放码率",
|
||||
"Subtitles": "字幕",
|
||||
"subtitles off": "字幕关闭",
|
||||
"Captions": "内嵌字幕",
|
||||
"captions off": "内嵌字幕关闭",
|
||||
"Chapters": "节目段落",
|
||||
"You aborted the media playback": "视频播放被终止",
|
||||
"A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
|
||||
"No compatible source was found for this media.": "无法找到此视频兼容的源。",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。"
|
||||
});
|
||||
externo
+40
@@ -0,0 +1,40 @@
|
||||
videojs.addLanguage("zh-TW",{
|
||||
"Play": "播放",
|
||||
"Pause": "暫停",
|
||||
"Current Time": "目前時間",
|
||||
"Duration Time": "總共時間",
|
||||
"Remaining Time": "剩餘時間",
|
||||
"Stream Type": "串流類型",
|
||||
"LIVE": "直播",
|
||||
"Loaded": "載入完畢",
|
||||
"Progress": "進度",
|
||||
"Fullscreen": "全螢幕",
|
||||
"Non-Fullscreen": "退出全螢幕",
|
||||
"Mute": "靜音",
|
||||
"Unmute": "取消靜音",
|
||||
"Playback Rate": " 播放速率",
|
||||
"Subtitles": "字幕",
|
||||
"subtitles off": "關閉字幕",
|
||||
"Captions": "內嵌字幕",
|
||||
"captions off": "關閉內嵌字幕",
|
||||
"Chapters": "章節",
|
||||
"Close Modal Dialog": "關閉對話框",
|
||||
"Descriptions": "描述",
|
||||
"descriptions off": "關閉描述",
|
||||
"Audio Track": "音軌",
|
||||
"You aborted the media playback": "影片播放已終止",
|
||||
"A network error caused the media download to fail part-way.": "網路錯誤導致影片下載失敗。",
|
||||
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "影片因格式不支援或者伺服器或網路的問題無法載入。",
|
||||
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由於影片檔案損毀或是該影片使用了您的瀏覽器不支援的功能,播放終止。",
|
||||
"No compatible source was found for this media.": "無法找到相容此影片的來源。",
|
||||
"The media is encrypted and we do not have the keys to decrypt it.": "影片已加密,無法解密。",
|
||||
"Play Video": "播放影片",
|
||||
"Close": "關閉",
|
||||
"Modal Window": "對話框",
|
||||
"This is a modal window": "這是一個對話框",
|
||||
"This modal can be closed by pressing the Escape key or activating the close button.": "可以按ESC按鍵或啟用關閉按鈕來關閉此對話框。",
|
||||
", opens captions settings dialog": ", 開啟標題設定對話框",
|
||||
", opens subtitles settings dialog": ", 開啟字幕設定對話框",
|
||||
", opens descriptions settings dialog": ", 開啟描述設定對話框",
|
||||
", selected": ", 選擇"
|
||||
});
|
||||
externo
BIN
Arquivo binário não exibido.
externo
+1307
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
+1
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
BIN
Arquivo binário não exibido.
externo
+25241
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
externo
+19
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
@@ -1,37 +1,12 @@
|
||||
# Audio Tracks
|
||||
|
||||
Audio tracks are a feature of HTML5 video for providing alternate audio track selections
|
||||
to the user, so that a track other than the main track can be played. Video.js offers a
|
||||
cross-browser implementation of audio tracks.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Caveats](#caveats)
|
||||
* [Working with Audio Tracks](#working-with-audio-tracks)
|
||||
* [Add an Audio Track to the Player](#add-an-audio-track-to-the-player)
|
||||
* [Listen for a Video Track Becoming Enabled](#listen-for-a-video-track-becoming-enabled)
|
||||
* [Removing an Audio Track from the Player](#removing-an-audio-track-from-the-player)
|
||||
* [API](#api)
|
||||
* [videojs.AudioTrack](#videojsaudiotrack)
|
||||
* [id](#id)
|
||||
* [kind](#kind)
|
||||
* [label](#label)
|
||||
* [language](#language)
|
||||
* [enabled](#enabled)
|
||||
Audio tracks are a feature of HTML5 video for providing alternate audio track selections to the user, so that a track other than the main track can be played. Video.js offers a cross-browser implementation of audio tracks.
|
||||
|
||||
## Caveats
|
||||
|
||||
* It is not possible to add audio tracks through HTML like you can with text tracks.
|
||||
They must be added programmatically.
|
||||
* Video.js only stores track representations. Switching audio tracks for playback is
|
||||
_not handled by Video.js_ and must be handled elsewhere - for example,
|
||||
[videojs-contrib-hls](http://github.com/videojs/videojs-contrib-hls) handles switching
|
||||
audio tracks to support track selection through the UI.
|
||||
- It is not possible to add audio tracks through HTML like you can with text tracks. They must be added programmatically.
|
||||
- Video.js only stores track representations. Switching audio tracks for playback is _not handled by Video.js_ and must be handled elsewhere - for example, videojs-contrib-hls handles switching audio tracks to support track selection through the UI.
|
||||
|
||||
## Working with Audio Tracks
|
||||
|
||||
### Add an Audio Track to the Player
|
||||
|
||||
```js
|
||||
// Create a player.
|
||||
var player = videojs('my-player');
|
||||
@@ -49,12 +24,9 @@ player.audioTracks().addTrack(track);
|
||||
```
|
||||
|
||||
### Listen for a Video Track Becoming Enabled
|
||||
When a track is enabled or disabled on an `AudioTrackList`, a `change` event will be fired. You can listen for that event and do something with it.
|
||||
|
||||
When a track is enabled or disabled on an `AudioTrackList`, a `change` event will be
|
||||
fired. You can listen for that event and do something with it.
|
||||
|
||||
> NOTE: The initial `AudioTrack` selection (usually the main track that is selected)
|
||||
> should not fire a `change` event.
|
||||
> NOTE: The initial `AudioTrack` selection (usually the main track that is selected) should not fire a `change` event.
|
||||
|
||||
```js
|
||||
// Get the current player's AudioTrackList object.
|
||||
@@ -76,9 +48,7 @@ audioTrackList.addEventListener('change', function() {
|
||||
```
|
||||
|
||||
### Removing an Audio Track from the Player
|
||||
|
||||
Assuming a player already exists and has an audio track that you want to remove, you
|
||||
might do something like the following:
|
||||
Assuming a player already exists and has an audio track that you want to remove, you might do something like the following:
|
||||
|
||||
```js
|
||||
// Get the track we created in an earlier example.
|
||||
@@ -89,69 +59,53 @@ player.audioTracks().removeTrack(track);
|
||||
```
|
||||
|
||||
## API
|
||||
For more complete information, refer to the [Video.js API docs](http://docs.videojs.com/docs/api/index.html), specifically:
|
||||
|
||||
For more complete information, refer to the
|
||||
[Video.js API docs](http://docs.videojs.com/docs/api/index.html), specifically:
|
||||
|
||||
* `Player#audioTracks`
|
||||
* `AudioTrackList`
|
||||
* `AudioTrack`
|
||||
- `Player#audioTracks`
|
||||
- `AudioTrackList`
|
||||
- `AudioTrack`
|
||||
|
||||
### `videojs.AudioTrack`
|
||||
|
||||
This class is based on [the `AudioTrack` standard][spec-audiotrack] and can be used to
|
||||
create new audio track objects.
|
||||
This class is based on [the `AudioTrack` standard][spec-audiotrack] and can be used to create new audio track objects.
|
||||
|
||||
Each property below is available as an option to the `AudioTrack` constructor.
|
||||
|
||||
#### `id`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-id)
|
||||
|
||||
A unique identifier for this track. Video.js will generate one if not given.
|
||||
|
||||
#### `kind`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind)
|
||||
|
||||
Video.js supports standard `kind` values for `AudioTracks`:
|
||||
|
||||
* `"alternative"`: A possible alternative to the main track.
|
||||
* `"descriptions"`: An audio description of a video track.
|
||||
* `"main"`: The primary audio track for this video.
|
||||
* `"main-desc"`: The primary audio track, mixed with audio descriptions.
|
||||
* `"translation"`: A translated version of the main audio track.
|
||||
* `"commentary"`: Commentary on the primary audio track, e.g. a director's commentary.
|
||||
* `""` (default): No explicit kind, or the kind given by the track's metadata is not
|
||||
recognized by the user agent.
|
||||
- `"alternative"`: A possible alternative to the main track.
|
||||
- `"descriptions"`: An audio description of a video track.
|
||||
- `"main"`: The primary audio track for this video.
|
||||
- `"main-desc"`: The primary audio track, mixed with audio descriptions.
|
||||
- `"translation"`: A translated version of the main audio track.
|
||||
- `"commentary"`: Commentary on the primary audio track, e.g. a director's commentary.
|
||||
- `""` (default): No explicit kind, or the kind given by the track's metadata is not recognized by the user agent.
|
||||
|
||||
#### `label`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-label)
|
||||
|
||||
The label for the track that will be shown to the user. For example, in a menu that lists
|
||||
the different languages available as alternate audio tracks.
|
||||
The label for the track that will be shown to the user. For example, in a menu that lists the different languages available as alternate audio tracks.
|
||||
|
||||
#### `language`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-language)
|
||||
|
||||
The valid [BCP 47](https://tools.ietf.org/html/bcp47) code for the language of the audio
|
||||
track, e.g. `"en"` for English or `"es"` for Spanish.
|
||||
The valid [BCP 47](https://tools.ietf.org/html/bcp47) code for the language of the audio track, e.g. `"en"` for English or `"es"` for Spanish.
|
||||
|
||||
For supported language translations, please see the [languages folder (/lang)](https://github.com/videojs/video.js/tree/master/lang)
|
||||
located in the Video.js root and refer to the [languages guide](languages.md) for more
|
||||
information on languages in Video.js.
|
||||
For supported language translations, please see the [languages folder (/lang)](https://github.com/videojs/video.js/tree/master/lang) folder located in the Video.js root and refer to the [languages guide](./languages.md) for more information on languages in Video.js.
|
||||
|
||||
#### `enabled`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-enabled)
|
||||
|
||||
Whether or not this track should be playing.
|
||||
|
||||
In Video.js, we only allow one track to be enabled at a time; so, if you enable more
|
||||
than one, the last one to be enabled will end up being the only one. While the spec
|
||||
allows for more than one track to be enabled, Safari and most implementations only allow
|
||||
one audio track to be enabled at a time.
|
||||
In Video.js, we only allow one track to be enabled at a time; so, if you enable more than one, the last one to be enabled will end up being the only one. While the spec allows for more than one track to be enabled, Safari and most implementations only allow one audio track to be enabled at a time.
|
||||
|
||||
|
||||
[spec-audiotrack]: https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack
|
||||
|
||||
+10
-236
@@ -1,84 +1,29 @@
|
||||
# Components
|
||||
|
||||
The architecture of the Video.js player is centered around components. The `Player` class and all classes representing player controls and other UI elements inherit from the `Component` class. This architecture makes it easy to construct the user interface of the Video.js player in a tree-like structure that mirrors the DOM.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [What is a Component?](#what-is-a-component)
|
||||
* [Creating a Component](#creating-a-component)
|
||||
* [Component Children](#component-children)
|
||||
* [Basic Example](#basic-example)
|
||||
* [Using Options](#using-options)
|
||||
* [Event Listening](#event-listening)
|
||||
* [using on](#using-on)
|
||||
* [Using off](#using-off)
|
||||
* [Using one](#using-one)
|
||||
* [Using trigger](#using-trigger)
|
||||
* [Default Component Tree](#default-component-tree)
|
||||
* [Specific Component Details](#specific-component-details)
|
||||
* [Progress Control](#progress-control)
|
||||
* [Text Track Settings](#text-track-settings)
|
||||
|
||||
## What is a Component?
|
||||
|
||||
A component is a JavaScript object that has the following features:
|
||||
|
||||
* An associated DOM element.
|
||||
* An association to a `Player` object.
|
||||
* The ability to manage any number of child components.
|
||||
* The ability to listen for and trigger events.
|
||||
* A lifecycle of initialization and disposal.
|
||||
- An associated DOM element.
|
||||
- An association to a `Player` object.
|
||||
- The ability to manage any number of child components.
|
||||
- The ability to listen for and trigger events.
|
||||
- A lifecycle of initialization and disposal.
|
||||
|
||||
For more specifics on the programmatic interface of a component, see [the component API docs](http://docs.videojs.com/docs/api/component.html).
|
||||
|
||||
## Creating a Component
|
||||
|
||||
Video.js components can be inherited and registered with Video.js to add new features and UI to the player.
|
||||
|
||||
For a working example, [we have a JSBin](http://jsbin.com/vobacas/edit?html,css,js,output) demonstrating the creation of a component for displaying a title across the top of the player.
|
||||
|
||||
In addition, there are a couple methods worth recognizing:
|
||||
|
||||
* `videojs.getComponent(String name)`: Retrieves component constructors from Video.js.
|
||||
* `videojs.registerComponent(String name, Function Comp)`: Registers component constructors with Video.js.
|
||||
* `videojs.extend(Function component, Object properties)`: Provides prototype inheritance. Can be used to extend a component's constructor, returning a new constructor with the given properties.
|
||||
|
||||
Creation:
|
||||
|
||||
```js
|
||||
// adding a button to the player
|
||||
var player = videojs('some-video-id');
|
||||
var Component = videojs.getComponent('Component');
|
||||
var button = new Component(player);
|
||||
|
||||
console.log(button.el());
|
||||
```
|
||||
|
||||
The above code will output
|
||||
|
||||
```html
|
||||
<div class="video-js">
|
||||
<div class="vjs-button">Button</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
Adding the new button to the player
|
||||
|
||||
```js
|
||||
// adding a button to the player
|
||||
var player = videojs('some-video-id');
|
||||
var button = player.addChild('button');
|
||||
|
||||
console.log(button.el());
|
||||
// will have the same html result as the previous example
|
||||
```
|
||||
- `videojs.getComponent(String name)`: Retrieves component constructors from Video.js.
|
||||
- `videojs.registerComponent(String name, Function Comp)`: Registers component constructors with Video.js.
|
||||
- `videojs.extend(Function component, Object properties)`: Provides prototype inheritance. Can be used to extend a component's constructor, returning a new constructor with the given properties.
|
||||
|
||||
## Component Children
|
||||
|
||||
Again, refer to [the component API docs](http://docs.videojs.com/docs/api/component.html) for complete details on methods available for managing component structures.
|
||||
|
||||
### Basic Example
|
||||
|
||||
When child component is added to a parent component, Video.js inserts the element of the child into the element of the parent. For example, adding a component like this:
|
||||
|
||||
```js
|
||||
@@ -110,180 +55,12 @@ Results in a DOM that looks like this:
|
||||
</div>
|
||||
```
|
||||
|
||||
### Using Options
|
||||
|
||||
Pass in options for child constructors and options for children of the child.
|
||||
|
||||
```js
|
||||
var player = videojs('some-vid-id');
|
||||
var Component = videojs.getComponent('Component');
|
||||
var myComponent = new Component(player);
|
||||
var myButton = myComponent.addChild('MyButton', {
|
||||
text: 'Press Me',
|
||||
buttonChildExample: {
|
||||
buttonChildOption: true
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
Children can also be added via options when a component is initialized.
|
||||
|
||||
> Note: Include a 'name' key which will be used if two child components of the same
|
||||
> type that need different options.
|
||||
|
||||
```js
|
||||
// MyComponent is from the above example
|
||||
var myComp = new MyComponent(player, {
|
||||
children: ['button', {
|
||||
name: 'button',
|
||||
someOtherOption: true
|
||||
}, {
|
||||
name: 'button',
|
||||
someOtherOption: false
|
||||
}]
|
||||
});
|
||||
```
|
||||
|
||||
## Event Listening
|
||||
|
||||
### Using `on`
|
||||
|
||||
```js
|
||||
var player = videojs('some-player-id');
|
||||
var Component = videojs.getComponent('Component');
|
||||
var myComponent = new Component(player);
|
||||
var myFunc = function() {
|
||||
var myComponent = this;
|
||||
console.log('myFunc called');
|
||||
};
|
||||
|
||||
myComponent.on('eventType', myFunc);
|
||||
myComponent.trigger('eventType');
|
||||
// logs 'myFunc called'
|
||||
```
|
||||
|
||||
The context of `myFunc` will be `myComponent` unless it is bound. You can add
|
||||
a listener to another element or component.
|
||||
|
||||
```js
|
||||
var otherComponent = new Component(player);
|
||||
|
||||
// myComponent/myFunc is from the above example
|
||||
myComponent.on(otherComponent.el(), 'eventName', myFunc);
|
||||
myComponent.on(otherComponent, 'eventName', myFunc);
|
||||
|
||||
otherComponent.trigger('eventName');
|
||||
// logs 'myFunc called' twice
|
||||
```
|
||||
|
||||
### Using `off`
|
||||
|
||||
```js
|
||||
var player = videojs('some-player-id');
|
||||
var Component = videojs.getComponent('Component');
|
||||
var myComponent = new Component(player);
|
||||
var myFunc = function() {
|
||||
var myComponent = this;
|
||||
console.log('myFunc called');
|
||||
};
|
||||
myComponent.on('eventType', myFunc);
|
||||
myComponent.trigger('eventType');
|
||||
// logs 'myFunc called'
|
||||
|
||||
myComponent.off('eventType', myFunc);
|
||||
myComponent.trigger('eventType');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
If myFunc gets excluded, *all* listeners for the event type will get removed. If
|
||||
eventType gets excluded, *all* listeners will get removed from the component.
|
||||
You can use `off` to remove listeners that get added to other elements or
|
||||
components using:
|
||||
|
||||
`myComponent.on(otherComponent...`
|
||||
|
||||
In this case both the event type and listener function are **REQUIRED**.
|
||||
|
||||
```js
|
||||
var otherComponent = new Component(player);
|
||||
|
||||
// myComponent/myFunc is from the above example
|
||||
myComponent.on(otherComponent.el(), 'eventName', myFunc);
|
||||
myComponent.on(otherComponent, 'eventName', myFunc);
|
||||
|
||||
otherComponent.trigger('eventName');
|
||||
// logs 'myFunc called' twice
|
||||
myComponent.off(ootherComponent.el(), 'eventName', myFunc);
|
||||
myComponent.off(otherComponent, 'eventName', myFunc);
|
||||
otherComponent.trigger('eventName');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
### Using `one`
|
||||
|
||||
```js
|
||||
var player = videojs('some-player-id');
|
||||
var Component = videojs.getComponent('Component');
|
||||
var myComponent = new Component(player);
|
||||
var myFunc = function() {
|
||||
var myComponent = this;
|
||||
console.log('myFunc called');
|
||||
};
|
||||
myComponent.one('eventName', myFunc);
|
||||
myComponent.trigger('eventName');
|
||||
// logs 'myFunc called'
|
||||
|
||||
myComponent.trigger('eventName');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
You can also add a listener to another element or component that will get
|
||||
triggered only once.
|
||||
|
||||
```js
|
||||
var otherComponent = new Component(player);
|
||||
|
||||
// myComponent/myFunc is from the above example
|
||||
myComponent.one(otherComponent.el(), 'eventName', myFunc);
|
||||
myComponent.one(otherComponent, 'eventName', myFunc);
|
||||
|
||||
otherComponent.trigger('eventName');
|
||||
// logs 'myFunc called' twice
|
||||
|
||||
otherComponent.trigger('eventName');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
### Using `trigger`
|
||||
|
||||
```js
|
||||
var player = videojs('some-player-id');
|
||||
var Component = videojs.getComponent('Component');
|
||||
var myComponent = new Component(player);
|
||||
var myFunc = function(data) {
|
||||
var myComponent = this;
|
||||
console.log('myFunc called');
|
||||
console.log(data);
|
||||
};
|
||||
myComponent.one('eventName', myFunc);
|
||||
myComponent.trigger('eventName');
|
||||
// logs 'myFunc called' and 'undefined'
|
||||
|
||||
myComponent.trigger({'type':'eventName'});
|
||||
// logs 'myFunc called' and 'undefined'
|
||||
|
||||
myComponent.trigger('eventName', {data: 'some data'});
|
||||
// logs 'myFunc called' and "{data: 'some data'}"
|
||||
|
||||
myComponent.trigger({'type':'eventName'}, {data: 'some data'});
|
||||
// logs 'myFunc called' and "{data: 'some data'}"
|
||||
```
|
||||
Again, refer to [the component API docs](http://docs.videojs.com/docs/api/component.html) for complete details on methods available for managing component structures.
|
||||
|
||||
## Default Component Tree
|
||||
|
||||
The default component structure of the Video.js player looks something like this:
|
||||
|
||||
```tree
|
||||
```
|
||||
Player
|
||||
├── PosterImage
|
||||
├── TextTrackDisplay
|
||||
@@ -315,9 +92,7 @@ Player
|
||||
```
|
||||
|
||||
## Specific Component Details
|
||||
|
||||
### Progress Control
|
||||
|
||||
The progress control has a grandchild component, the mouse time display, which shows a time tooltip that follows the mouse cursor.
|
||||
|
||||
By default, the progress control is sandwiched inside the control bar between the volume menu button and the remaining time display. Some skins attempt to move the it above the control bar and have it span the full width of the player. In these cases, it is less than ideal to have the tooltips leave the bounds of the player. This can be prevented by setting the `keepTooltipsInside` option on the progress control.
|
||||
@@ -335,5 +110,4 @@ let player = videojs('myplayer', {
|
||||
> **Note:** This makes the tooltips use a real element instead of pseudo-elements so targeting them with CSS is different.
|
||||
|
||||
### Text Track Settings
|
||||
|
||||
The text track settings component is only available when using emulated text tracks.
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
# Event Target
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Overview](#overview)
|
||||
* [on() and addEventListener()](#on-and-addeventlistener)
|
||||
* [off() and removeEventListener](#off-and-removeeventlistener)
|
||||
* [one()](#one)
|
||||
* [trigger() and dispatchEvent](#trigger-and-dispatchevent)
|
||||
|
||||
## Overview
|
||||
|
||||
Events in video.js are setup so that they mimic the DOM API that is used on object, but also have helpful shorthand functions with the same functionality.
|
||||
|
||||
## `on()` and `addEventListener()`
|
||||
|
||||
This function is used to add an event listener to an EventTarget.
|
||||
|
||||
```js
|
||||
var foo = new EventTarget();
|
||||
var handleBar = function() {
|
||||
console.log('bar was triggered');
|
||||
};
|
||||
|
||||
foo.on('bar', handleBar);
|
||||
|
||||
// This causes any `event listeners` for the `bar` event to get called
|
||||
// see {@link EventTarget#trigger} for more information
|
||||
foo.trigger('bar');
|
||||
// logs 'bar was triggered'
|
||||
```
|
||||
|
||||
## `off()` and `removeEventListener()`
|
||||
|
||||
This function is used to remove an listener function from an EventTarget.
|
||||
|
||||
```js
|
||||
var foo = new EventTarget();
|
||||
var handleBar = function() {
|
||||
console.log('bar was triggered');
|
||||
};
|
||||
|
||||
// adds an `event listener` for the `bar` event
|
||||
// see {@link EventTarget#on} for more info
|
||||
foo.on('bar', handleBar);
|
||||
|
||||
// runs all `event listeners` for the `bar` event
|
||||
// see {@link EventTarget#trigger} for more info
|
||||
foo.trigger('bar');
|
||||
// logs 'bar was triggered'
|
||||
|
||||
foo.off('bar', handleBar);
|
||||
foo.trigger('bar');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
## `one()`
|
||||
|
||||
This function is used to only have an event listener called once and never again.
|
||||
|
||||
Using `on()` and `off()` to mimic `one()` (not recommended)
|
||||
|
||||
```js
|
||||
var foo = new EventTarget();
|
||||
var handleBar = function() {
|
||||
console.log('bar was triggered');
|
||||
// after the first trigger remove this handler
|
||||
foo.off('bar', handleBar);
|
||||
};
|
||||
|
||||
foo.on('bar', handleBar);
|
||||
foo.trigger('bar');
|
||||
// logs 'bar was triggered'
|
||||
|
||||
foo.trigger('bar');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
Using `one()`
|
||||
|
||||
```js
|
||||
var foo = new EventTarget();
|
||||
var handleBar = function() {
|
||||
console.log('bar was triggered');
|
||||
};
|
||||
|
||||
// removed after the first trigger
|
||||
foo.one('bar', handleBar);
|
||||
foo.trigger('bar');
|
||||
// logs 'bar was triggered'
|
||||
|
||||
foo.trigger('bar');
|
||||
// does nothing
|
||||
```
|
||||
|
||||
## `trigger()` and `dispatchEvent()`
|
||||
|
||||
This function is used to trigger an event on an EventTarget which will cause all listeners to run.
|
||||
|
||||
> Note: if 'click' is in `EventTarget.allowedEvents_`, trigger will attempt to call the
|
||||
> `onClick` function if it exists.
|
||||
|
||||
```js
|
||||
var foo = new EventTarget();
|
||||
var handleBar = function() {
|
||||
console.log('bar was triggered');
|
||||
};
|
||||
|
||||
foo.on('bar', handleBar);
|
||||
foo.trigger('bar');
|
||||
// logs 'bar was triggered'
|
||||
|
||||
foo.trigger('bar');
|
||||
// logs 'bar was triggered'
|
||||
|
||||
foo.trigger('foo');
|
||||
// does nothing
|
||||
```
|
||||
@@ -1,168 +1,73 @@
|
||||
# FAQ
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Q: What is video.js?](#q-what-is-videojs)
|
||||
* [Q: How do I install video.js?](#q-how-do-i-install-videojs)
|
||||
* [Q: Is video.js on bower?](#q-is-videojs-on-bower)
|
||||
* [Q: What do video.js version numbers mean?](#q-what-do-videojs-version-numbers-mean)
|
||||
* [Q: How can I troubleshoot playback issues?](#q-how-can-i-troubleshoot-playback-issues)
|
||||
* [Q: A video does not play in a specific browser. Why?](#q-a-video-does-not-play-in-a-specific-browser-why)
|
||||
* [Q: Why does the entire video download before playback? Why does the video load for a long time?](#q-why-does-the-entire-video-download-before-playback-why-does-the-video-load-for-a-long-time)
|
||||
* [Q: I see an error thrown that mentions vdata12345. What is that?](#q-i-see-an-error-thrown-that-mentions-vdata12345-what-is-that)
|
||||
* [Q: I think I found a bug with video.js or I want to add a feature. What should I do?](#q-i-think-i-found-a-bug-with-videojs-or-i-want-to-add-a-feature-what-should-i-do)
|
||||
* [if you think that you can fix the issue or add the feature](#if-you-think-that-you-can-fix-the-issue-or-add-the-feature)
|
||||
* [If you don't think you can fix the issue or add the feature](#if-you-dont-think-you-can-fix-the-issue-or-add-the-feature)
|
||||
* [Q: What is a reduced test case?](#q-what-is-a-reduced-test-case)
|
||||
* [Q: What media formats does video.js support?](#q-what-media-formats-does-videojs-support)
|
||||
* [Q: How to I autoplay the video?](#q-how-to-i-autoplay-the-video)
|
||||
* [Q: How can I autoplay a video on a mobile device?](#q-how-can-i-autoplay-a-video-on-a-mobile-device)
|
||||
* [Q: How can I play RTMP video in video.js?](#q-how-can-i-play-rtmp-video-in-videojs)
|
||||
* [Q: How can I hide the links to my video/subtitles/audio/tracks?](#q-how-can-i-hide-the-links-to-my-videosubtitlesaudiotracks)
|
||||
* [Q: What is a plugin?](#q-what-is-a-plugin)
|
||||
* [Q: How do I make a plugin for video.js?](#q-how-do-i-make-a-plugin-for-videojs)
|
||||
* [Q: Where can I find a list of video.js plugins?](#q-where-can-i-find-a-list-of-videojs-plugins)
|
||||
* [Q: How can I get my plugin listed on the website?](#q-how-can-i-get-my-plugin-listed-on-the-website)
|
||||
* [Q: Where can I find a list of video.js skins?](#q-where-can-i-find-a-list-of-videojs-skins)
|
||||
* [Q: Does video.js work as an audio only player?](#q-does-videojs-work-as-an-audio-only-player)
|
||||
* [Q: Does video.js support audio tracks?](#q-does-videojs-support-audio-tracks)
|
||||
* [Q: Does video.js support video tracks?](#q-does-videojs-support-video-tracks)
|
||||
* [Q: Does video.js support text tracks (captions, subtitles, etc)?](#q-does-videojs-support-text-tracks-captions-subtitles-etc)
|
||||
* [Q: Does video.js support HLS (HTTP Live streaming) video?](#q-does-videojs-support-hls-http-live-streaming-video)
|
||||
* [Q: Does video.js support MPEG Dash video?](#q-does-videojs-support-mpeg-dash-video)
|
||||
* [Q: Does video.js support live video?](#q-does-videojs-support-live-video)
|
||||
* [Q: Can video.js wrap around YouTube videos?](#q-can-videojs-wrap-around-youtube-videos)
|
||||
* [Q: Can video.js wrap around Vimeo videos?](#q-can-videojs-wrap-around-vimeo-videos)
|
||||
* [Q: Does video.js support DRM video?](#q-does-videojs-support-drm-video)
|
||||
* [Q: Does video.js have any support for advertisement integrations?](#q-does-videojs-have-any-support-for-advertisement-integrations)
|
||||
* [Q: Can video.js be required in node.js?](#q-can-videojs-be-required-in-nodejs)
|
||||
* [Q: Does video.js work with webpack?](#q-does-videojs-work-with-webpack)
|
||||
|
||||
## Q: What is video.js?
|
||||
|
||||
video.js is an extendable framework/library around the native video element. It does the following:
|
||||
|
||||
* Offers a plugin API so that different types of video can be handed to the native
|
||||
video element (e.g. HLS, Flash, HTML5 video, etc).
|
||||
* Unifies the native video api across browsers (polyfilling support for features
|
||||
if necessary)
|
||||
* Offers an extendable and themable UI
|
||||
* Takes care of accessibility for the user (in-progress)
|
||||
* Has a set of core plugins that offer support for tons of additional video formats.
|
||||
* [videojs-contrib-hls][hls]
|
||||
* [videojs-contrib-dash][dash]
|
||||
* Support for DRM video via a core plugin
|
||||
* [videojs-contrib-eme][eme]
|
||||
* Lots of plugins which offer support for all kinds of features. See the [plugin list on videojs.com][plugin-list]
|
||||
* Offers a plugin API so that different types of video can be handed to the native
|
||||
video element (e.g. HLS, Flash, HTML5 video, etc).
|
||||
* Unifies the native video api across browsers (polyfilling support for features
|
||||
if necessary)
|
||||
* Offers an extendable and themable UI
|
||||
* Takes care of accessibility for the user (in-progress)
|
||||
* Has a set of core plugins that offer support for tons of additional video formats.
|
||||
* [videojs-contrib-hls][hls]
|
||||
* [videojs-contrib-dash][dash]
|
||||
* Support for DRM video via a core plugin
|
||||
* [videojs-contrib-eme][eme]
|
||||
* Lots of plugins which offer support for all kinds of features. See the [plugin list on videojs.com][plugin-list]
|
||||
|
||||
## Q: How do I install video.js?
|
||||
|
||||
Currently video.js can be installed using bower, npm, serving a release file from
|
||||
a github tag, or even using a CDN hosted version. For information on doing any of those
|
||||
see the [install guide][install-guide].
|
||||
|
||||
## Q: Is video.js on bower?
|
||||
|
||||
Yes! See the [install guide][install-guide] for more information.
|
||||
|
||||
## Q: What do video.js version numbers mean?
|
||||
|
||||
video.js follows [semver][semver] which means that the API should not change
|
||||
out from under a user unless there is a major version increase.
|
||||
|
||||
## Q: How can I troubleshoot playback issues?
|
||||
|
||||
See the [troubleshooting guide][troubleshooting]. If troubleshooting does not
|
||||
solve your issue, please submit a [pull request or an issue][pr-issue-question].
|
||||
|
||||
## Q: A video does not play in a specific browser. Why?
|
||||
|
||||
See the [troubleshooting guide][troubleshooting]. If troubleshooting does not
|
||||
solve your issue, please submit a [pull request or an issue][pr-issue-question].
|
||||
|
||||
## Q: Why does the entire video download before playback? Why does the video load for a long time?
|
||||
|
||||
See the [troubleshooting guide][troubleshooting]. If troubleshooting does not
|
||||
solve your issue, please submit a [pull request or an issue][pr-issue-question].
|
||||
|
||||
## Q: I see an error thrown that mentions `vdata12345`. What is that?
|
||||
|
||||
See the [troubleshooting guide][troubleshooting]. If troubleshooting does not
|
||||
solve your issue, please submit a [pull request or an issue][pr-issue-question].
|
||||
|
||||
## Q: I think I found a bug with video.js or I want to add a feature. What should I do?
|
||||
|
||||
### if you think that you can fix the issue or add the feature
|
||||
|
||||
Submit a pull request to the [video.js repo][vjs-prs].
|
||||
Make sure to follow the [contributing guide][contributing-prs] and
|
||||
the [pull request template][pr-template].
|
||||
|
||||
### If you don't think you can fix the issue or add the feature
|
||||
|
||||
Open an [issue on the video.js repo][vjs-issues]. Make
|
||||
sure that you follow the [issue template][issue-template] and the
|
||||
[contributing guide][contributing-issues] so that we can better assist you
|
||||
with your issue.
|
||||
|
||||
## Q: What is a reduced test case?
|
||||
|
||||
A reduced test case is an example of the problem that you are facing in isolation.
|
||||
Think of it as example page that reproduces the issue in the least amount of possible code.
|
||||
We have a [starter example][starter-example] for reduced test cases. To learn more
|
||||
about reduced test cases visit [css-tricks](https://css-tricks.com/reduced-test-cases/)
|
||||
about reduced test cases visit: https://css-tricks.com/reduced-test-cases/
|
||||
|
||||
## Q: What media formats does video.js support?
|
||||
|
||||
This depends on the formats supported by the browser's HTML5 video element, and the playback
|
||||
techs made available to video.js. For example, video.js 5 includes the Flash tech by default which
|
||||
enables the playback of FLV video where the Flash plugin is available. For more information
|
||||
on media formats see the [troubleshooting guide][troubleshooting].
|
||||
|
||||
## Q: How to I autoplay the video?
|
||||
|
||||
Video.js supports the standard html5 `autoplay` attribute on the video element.
|
||||
It also supports it as an option to video.js or as a method invocation on the player.
|
||||
|
||||
```html
|
||||
<video autoplay controls class="video-js">
|
||||
```
|
||||
|
||||
```js
|
||||
var player = videojs('my-video', {
|
||||
autoplay: true
|
||||
});
|
||||
|
||||
// or
|
||||
|
||||
player.autoplay(true);
|
||||
```
|
||||
|
||||
### Q: How can I autoplay a video on a mobile device?
|
||||
|
||||
Most mobile devices have blocked autoplaying videos until recently.
|
||||
For mobile devices that don't support autoplaying, autoplay isn't supported by video.js.
|
||||
For those devices that support autoplaying, like iOS10 and Chrome for Android 53+,
|
||||
you must mute the video or have a video without audio tracks to be able to play it.
|
||||
For example:
|
||||
|
||||
```html
|
||||
<video muted autoplay playsinline>
|
||||
```
|
||||
|
||||
Will make an inline, muted, autoplaying video on an iPhone with iOS10.
|
||||
|
||||
## Q: How can I play RTMP video in video.js?
|
||||
|
||||
Make sure that the Flash tech is available -- RTMP is not playable on browsers without Flash including mobile. Then, just set the rtmp source with
|
||||
an appropriate type -- `rtmp/mp4` or `rtmp/flv`.
|
||||
The main thing to be aware of is that video.js splits the connection url and stream name with the `&` character.
|
||||
So, you'd want to update the url to follow that format. For example: `rtmp://example.com/live&foo` or `rtmp://example.com/fms&mp4:path/to/file.mp4`.
|
||||
|
||||
If the server requires query parameters for authentication, these should be added to the connection part url, for example `rtmp://example.com/live?token=1234&foo`.
|
||||
|
||||
## Q: How can I hide the links to my video/subtitles/audio/tracks?
|
||||
|
||||
It's impossible to hide the network requests a browser makes and difficult to
|
||||
sufficiently obfuscate URLs in the source. Techniques such as token authentication may
|
||||
help but are outside of the scope of video.js.
|
||||
@@ -170,13 +75,11 @@ help but are outside of the scope of video.js.
|
||||
For content that must be highly secure [videojs-contrib-eme][eme] adds DRM support.
|
||||
|
||||
## Q: What is a plugin?
|
||||
|
||||
A plugin is a group of reusable functionality that can be re-used by others. For instance a plugin could add
|
||||
a button to video.js that makes the video replay 10 times in a row before it stops playback for good. If such
|
||||
a plugin existed and was published users could include it on their page to share that functionality.
|
||||
|
||||
## Q: How do I make a plugin for video.js?
|
||||
|
||||
See the [plugin guide][plugin-guide] for information on making a plugin for video.js.
|
||||
|
||||
<!-- TODO: Once these is a button guide, add this back in
|
||||
@@ -185,125 +88,92 @@ See the [button guide][button-guide] for information on adding a button to video
|
||||
-->
|
||||
|
||||
## Q: Where can I find a list of video.js plugins?
|
||||
|
||||
The official [list of plugins on videojs.com][plugin-list].
|
||||
|
||||
## Q: How can I get my plugin listed on the website?
|
||||
|
||||
Add the 'videojs-plugin' [keyword to your array in package.json][npm-keywords]
|
||||
and publish your package to npm. If you use the [plugin generator][generator] this will be done automatically for you. See
|
||||
the [plugins guide][plugin-guide] for more information.
|
||||
|
||||
## Q: Where can I find a list of video.js skins?
|
||||
|
||||
See the [video.js github wiki][skins-list].
|
||||
|
||||
## Q: Does video.js work as an audio only player?
|
||||
|
||||
Yes! It can be used to play audio only files in a `<video>` or `<audio>` tag. The
|
||||
difference being that the `<audio>` tag will not have a blank display area and the `<video>`
|
||||
tag will. Note that audio only will not work with the Flash playback tech.
|
||||
|
||||
## Q: Does video.js support audio tracks?
|
||||
|
||||
Yes! See the [audio tracks guide][audio-tracks] for information on using audio tracks.
|
||||
|
||||
## Q: Does video.js support video tracks?
|
||||
|
||||
The code for video tracks exists but it has not been tested. See the [video tracks guide][video-tracks]
|
||||
for more information on using video tracks.
|
||||
|
||||
## Q: Does video.js support text tracks (captions, subtitles, etc)?
|
||||
|
||||
Yes! See the [text tracks guide][text-tracks] for information on using text tracks.
|
||||
|
||||
## Q: Does video.js support HLS (HTTP Live streaming) video?
|
||||
|
||||
video.js supports HLS video if the native HTML5 element supports HLS (e.g. Safari, Edge,
|
||||
Chrome for Android, and iOS). For browsers without native support see the [videojs-contrib-hls][hls]
|
||||
project which adds support.
|
||||
|
||||
## Q: Does video.js support MPEG Dash video?
|
||||
|
||||
video.js itself does not support MPEG DASH, however an offical project called [videojs-contrib-dash][dash]
|
||||
adds support for MPEG DASH video.
|
||||
|
||||
## Q: Does video.js support live video?
|
||||
|
||||
Yes! Video.js adds support for live videos via the Flash tech which supports RTMP streams.
|
||||
The official HLS tech, [videojs-contrib-hls][hls], will add support for live HLS video
|
||||
if you add it to your page with video.js.
|
||||
|
||||
## Q: Can video.js wrap around YouTube videos?
|
||||
|
||||
No. There is an official plugin that adds support. It is called [videojs-youtube][youtube].
|
||||
|
||||
## Q: Can video.js wrap around Vimeo videos?
|
||||
|
||||
No. There is an official plugin that adds support. It is called [videojs-vimeo][vimeo].
|
||||
|
||||
## Q: Does video.js support DRM video?
|
||||
|
||||
No. There is an official plugin that adds support. It is called [videojs-contrib-eme][eme].
|
||||
|
||||
## Q: Does video.js have any support for advertisement integrations?
|
||||
|
||||
No. There is an official plugin that adds support. It is called [videojs-contrib-ads][ads].
|
||||
|
||||
## Q: Can video.js be required in node.js?
|
||||
|
||||
Yes! Please [submit an issue or open a pull request][pr-issue-question] if this does not work.
|
||||
|
||||
## Q: Does video.js work with webpack?
|
||||
|
||||
Yes! Please [submit an issue or open a pull request][pr-issue-question] if this does not work.
|
||||
|
||||
[plugin-guide]: plugins.md
|
||||
|
||||
<!-- guides -->
|
||||
[plugin-guide]: /docs/guides/plugins.md
|
||||
[install-guide]: http://videojs.com/getting-started/
|
||||
[troubleshooting]: /docs/guides/troubleshooting.md
|
||||
[video-tracks]: /docs/guides/video-tracks.md
|
||||
[audio-tracks]: /docs/guides/audio-tracks.md
|
||||
[text-tracks]: /docs/guides/text-tracks.md
|
||||
[pr-issue-question]: /docs/guides/faq.md#q-i-think-i-found-a-bug-with-videojs-or-i-want-to-add-a-feature-what-should-i-do
|
||||
|
||||
[troubleshooting]: troubleshooting.md
|
||||
|
||||
[video-tracks]: video-tracks.md
|
||||
|
||||
[audio-tracks]: audio-tracks.md
|
||||
|
||||
[text-tracks]: text-tracks.md
|
||||
|
||||
[pr-issue-question]: #q-i-think-i-found-a-bug-with-videojs-or-i-want-to-add-a-feature-what-should-i-do
|
||||
|
||||
<!-- official projects -->
|
||||
[hls]: http://github.com/videojs/videojs-contrib-hls
|
||||
|
||||
[dash]: http://github.com/videojs/videojs-contrib-dash
|
||||
|
||||
[eme]: https://github.com/videojs/videojs-contrib-eme
|
||||
|
||||
[generator]: https://github.com/videojs/generator-videojs-plugin
|
||||
|
||||
[youtube]: https://github.com/videojs/videojs-youtube
|
||||
|
||||
[vimeo]: https://github.com/videojs/videojs-vimeo
|
||||
|
||||
[ads]: https://github.com/videojs/videojs-contrib-ads
|
||||
|
||||
[pr-template]: http://github.com/videojs/video.js/blob/master/.github/PULL_REQUEST_TEMPLATE.md
|
||||
|
||||
[issue-template]: http://github.com/videojs/video.js/blob/master/.github/ISSUE_TEMPLATE.md
|
||||
|
||||
<!-- website/github -->
|
||||
[pr-template]: /.github/PULL_REQUEST_TEMPATLE.md
|
||||
[issue-template]: /.github/ISSUE_TEMPLATE.md
|
||||
[plugin-list]: http://videojs.com/plugins
|
||||
|
||||
[skins-list]: https://github.com/videojs/video.js/wiki/Skins
|
||||
|
||||
[contributing-issues]: http://github.com/videojs/video.js/blob/master/CONTRIBUTING.md#filing-issues
|
||||
|
||||
[contributing-prs]: http://github.com/videojs/video.js/blob/master/CONTRIBUTING.md#contributing-code
|
||||
|
||||
[contributing-issues]: /CONTRIBUTING.md#filing-issues
|
||||
[contributing-prs]: /CONTRIBUTING.md#contributing-code
|
||||
[vjs-issues]: https://github.com/videojs/video.js/issues
|
||||
|
||||
[vjs-prs]: https://github.com/videojs/video.js/pulls
|
||||
|
||||
<!-- external -->
|
||||
[npm-keywords]: https://docs.npmjs.com/files/package.json#keywords
|
||||
|
||||
[semver]: http://semver.org/
|
||||
|
||||
[starter-example]: http://jsbin.com/axedog/edit?html,output
|
||||
+40
-66
@@ -1,74 +1,55 @@
|
||||
# Hooks
|
||||
|
||||
Hooks exist so that users can "hook" on to certain video.js player lifecycle
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Current Hooks](#current-hooks)
|
||||
* [beforesetup](#beforesetup)
|
||||
* [setup](#setup)
|
||||
* [Usage](#usage)
|
||||
* [Adding](#adding)
|
||||
* [Getting](#getting)
|
||||
* [Removing](#removing)
|
||||
|
||||
## Current Hooks
|
||||
|
||||
Currently, the following hooks are avialable:
|
||||
|
||||
### beforesetup
|
||||
|
||||
`beforesetup` is called just before the player is created. This allows:
|
||||
|
||||
* modification of the options passed to the video.js function (`videojs('some-id, options)`)
|
||||
* modification of the dom video element that will be used for the player
|
||||
|
||||
`beforesetup` hook functions should:
|
||||
|
||||
* take two arguments
|
||||
1. videoEl: dom video element that video.js is going to use to create a player
|
||||
1. options: options that video.js was intialized with and will later pass to the player during creation
|
||||
1. videoEl: dom video element that video.js is going to use to create a player
|
||||
2. options: options that video.js was intialized with and will later pass to the player during creation
|
||||
* return options that will merge and override options that video.js with intialized with
|
||||
|
||||
Example: adding beforesetup hook
|
||||
|
||||
```js
|
||||
var beforeSetup = function(videoEl, options) {
|
||||
// videoEl.id will be some-id here, since that is what video.js
|
||||
// was created with
|
||||
var beforeSetup = function(videoEl, options) {
|
||||
// videoEl.id will be some-id here, since that is what video.js
|
||||
// was created with
|
||||
|
||||
videoEl.className += ' some-super-class';
|
||||
videoEl.className += ' some-super-class';
|
||||
|
||||
// autoplay will be true here, since we passed in as such
|
||||
(options.autoplay) {
|
||||
options.autoplay = false
|
||||
}
|
||||
// autoplay will be true here, since we passed in as such
|
||||
(options.autoplay) {
|
||||
options.autoplay = false
|
||||
}
|
||||
|
||||
// options that are returned here will be merged with old options
|
||||
// in this example options will now be
|
||||
// {autoplay: false, controls: true}
|
||||
return options;
|
||||
};
|
||||
// options that are returned here will be merged with old options
|
||||
// in this example options will now be
|
||||
// {autoplay: false, controls: true}
|
||||
return options;
|
||||
};
|
||||
|
||||
videojs.hook('beforesetup', beforeSetup);
|
||||
videojs('some-id', {autoplay: true, controls: true});
|
||||
videojs.hook('beforesetup', beforeSetup);
|
||||
videojs('some-id', {autoplay: true, controls: true});
|
||||
```
|
||||
|
||||
### setup
|
||||
|
||||
`setup` is called just after the player is created. This allows:
|
||||
|
||||
* plugin or custom functionalify to intialize on the player
|
||||
* changes to the player object itself
|
||||
|
||||
`setup` hook functions:
|
||||
|
||||
* Take one argument
|
||||
* player: the player that video.js created
|
||||
* player: the player that video.js created
|
||||
* Don't have to return anything
|
||||
|
||||
Example: adding setup hook
|
||||
|
||||
```js
|
||||
var setup = function(player) {
|
||||
// initialize the foo plugin
|
||||
@@ -84,63 +65,56 @@ Example: adding setup hook
|
||||
## Usage
|
||||
|
||||
### Adding
|
||||
|
||||
In order to use hooks you must first include video.js in the page or script that you are using. Then you add hooks using `videojs.hook(<name>, function)` before running the `videojs()` function.
|
||||
|
||||
Example: adding hooks
|
||||
|
||||
```js
|
||||
videojs.hook('beforesetup', function(videoEl, options) {
|
||||
// videoEl will be the element with id=vid1
|
||||
// options will contain {autoplay: false}
|
||||
});
|
||||
videojs.hook('setup', function(player) {
|
||||
// player will be the same player that is defined below
|
||||
// as `var player`
|
||||
});
|
||||
|
||||
var player = videojs('vid1', {autoplay: false});
|
||||
videojs.hook('beforesetup', function(videoEl, options) {
|
||||
// videoEl will be the element with id=vid1
|
||||
// options will contain {autoplay: false}
|
||||
});
|
||||
videojs.hook('setup', function(player) {
|
||||
// player will be the same player that is defined below
|
||||
// as `var player`
|
||||
});
|
||||
var player = videojs('vid1', {autoplay: false});
|
||||
```
|
||||
|
||||
After adding your hooks they will automatically be run at the correct time in the video.js lifecycle.
|
||||
|
||||
### Getting
|
||||
|
||||
To access the array of hooks that currently exists and will be run on the video.js object you can use the `videojs.hooks` function.
|
||||
|
||||
Example: getting all hooks attached to video.js
|
||||
|
||||
```js
|
||||
var beforeSetupHooks = videojs.hooks('beforesetup');
|
||||
var setupHooks = videojs.hooks('setup');
|
||||
var beforeSetupHooks = videojs.hooks('beforesetup');
|
||||
var setupHooks = videojs.hooks('setup');
|
||||
```
|
||||
|
||||
### Removing
|
||||
|
||||
To stop hooks from being executed during the video.js lifecycle you will remove them using `videojs.removeHook`.
|
||||
|
||||
Example: remove a hook that was defined by you
|
||||
|
||||
```js
|
||||
var beforeSetup = function(videoEl, options) {};
|
||||
var beforeSetup = function(videoEl, options) {};
|
||||
|
||||
// add the hook
|
||||
videojs.hook('beforesetup', beforeSetup);
|
||||
// add the hook
|
||||
videojs.hook('beforesetup', beforeSetup);
|
||||
|
||||
// remove that same hook
|
||||
videojs.removeHook('beforesetup', beforeSetup);
|
||||
// remove that same hook
|
||||
videojs.removeHook('beforesetup', beforeSetup);
|
||||
```
|
||||
|
||||
You can also use `videojs.hooks` in conjunction with `videojs.removeHook` but it may have unexpected results if used during an asynchronous callbacks as other plugins/functionality may have added hooks.
|
||||
|
||||
Example: using `videojs.hooks` and `videojs.removeHook` to remove a hook
|
||||
|
||||
```js
|
||||
// add the hook
|
||||
videojs.hook('setup', function(videoEl, options) {});
|
||||
// add the hook
|
||||
videojs.hook('setup', function(videoEl, options) {});
|
||||
|
||||
var setupHooks = videojs.hooks('setup');
|
||||
var setupHooks = videojs.hooks('setup');
|
||||
|
||||
// remove the hook you just added
|
||||
videojs.removeHook('setup', setupHooks[setupHooks.length - 1]);
|
||||
// remove the hook you just added
|
||||
videojs.removeHook('setup', setupHooks[setupHooks.length - 1]);
|
||||
```
|
||||
|
||||
|
||||
@@ -1,40 +1,20 @@
|
||||
# Languages
|
||||
|
||||
Multiple language support allows for users of non-English locales to natively interact with the Video.js player.
|
||||
|
||||
For an up-to-date list of the languages Video.js supports, see the [languages folder (`lang`)][lang-supported]. These JSON files are converted to JavaScript during the Video.js build process.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Using Video.js Languages](#using-videojs-languages)
|
||||
* [Contributing to Video.js Translations](#contributing-to-videojs-translations)
|
||||
* [JSON Format](#json-format)
|
||||
* [File Naming](#file-naming)
|
||||
* [Updating an Existing Translation](#updating-an-existing-translation)
|
||||
* [Writing a New Translation](#writing-a-new-translation)
|
||||
* [Advanced Language Usage](#advanced-language-usage)
|
||||
* [Adding Languages via the API](#adding-languages-via-the-api)
|
||||
* [Per-Player Languages](#per-player-languages)
|
||||
* [Setting Default Player Language](#setting-default-player-language)
|
||||
* [Determining Player Language](#determining-player-language)
|
||||
* [Internal Language Selection](#internal-language-selection)
|
||||
* [References](#references)
|
||||
|
||||
## Using Video.js Languages
|
||||
|
||||
Video.js ships with multiple translations (in `dist/lang/`) in JavaScript files. Each of these files can be included in a web page to provide support for that language in _all_ Video.js players:
|
||||
|
||||
```html
|
||||
```
|
||||
<script src="//example.com/path/to/video.min.js"></script>
|
||||
<script src="//example.com/path/to/lang/es.js"></script>
|
||||
```
|
||||
|
||||
## Contributing to Video.js Translations
|
||||
|
||||
We welcome new translations and improvements to existing ones! Please see the [contributing document](../../CONTRIBUTING.md) to get started contributing to Video.js and continue reading for specifics on how to contribute to translations of Video.js...
|
||||
|
||||
### JSON Format
|
||||
|
||||
Video.js uses a JSON object to describe a language, where the keys are English and the values are the target language. For example, a Spanish translation might look like this:
|
||||
|
||||
```JSON
|
||||
@@ -49,7 +29,6 @@ Video.js uses a JSON object to describe a language, where the keys are English a
|
||||
```
|
||||
|
||||
### File Naming
|
||||
|
||||
Translations are always found in the `lang/` directory.
|
||||
|
||||
Each file's name should be the [standard language code][lang-codes] that is most appropriate. For example, "es" for Spanish or "zh-CN" for Chinese.
|
||||
@@ -67,7 +46,6 @@ If there is a [missing translation](../translations-needed.md), mistake, or room
|
||||
1. Commit and open a pull request on GitHub.
|
||||
|
||||
### Writing a New Translation
|
||||
|
||||
The process for writing an entirely new translation is virtually identical to the process for [updating an existing translation](#updating-an-existing-translation) except that the new translation JSON file needs to be created.
|
||||
|
||||
The template for new language files is the English file ([lang/en.json][lang-en]). This file is always up-to-date with strings that need translations.
|
||||
@@ -75,19 +53,17 @@ The template for new language files is the English file ([lang/en.json][lang-en]
|
||||
The first step to writing a new translation is to copy the English file:
|
||||
|
||||
```sh
|
||||
cp lang/en.json lang/${NEW_LANG_CODE}.json
|
||||
$ cp lang/en.json lang/${NEW_LANG_CODE}.json
|
||||
```
|
||||
|
||||
Otherwise, the process is the same as [updating an existing translation](#updating-an-existing-translation).
|
||||
|
||||
## Advanced Language Usage
|
||||
|
||||
The instructions above for [using Video.js languages](#using-videojs-languages) should be sufficient for the majority of use-cases. However, languages can be provided at runtime.
|
||||
|
||||
In each case, these custom language definitions _take precedence over any Video.js-provided languages!_
|
||||
|
||||
### Adding Languages via the API
|
||||
|
||||
In addition to the stand-alone scripts provided by Video.js, the API supports manual definition of new languages via the `addLanguage` method. It takes two arguments: the [standard language code][lang-codes] and a [language definition object](#json-format).
|
||||
|
||||
```js
|
||||
@@ -102,7 +78,6 @@ videojs.addLanguage('es', {
|
||||
```
|
||||
|
||||
### Per-Player Languages
|
||||
|
||||
In addition to providing languages to Video.js itself, individual `Player` instances can be provided custom language support via [the `languages` option](options.md#languages):
|
||||
|
||||
```js
|
||||
@@ -131,15 +106,14 @@ Additionally, the `language` method of the player can be used to set the languag
|
||||
|
||||
The player language is set to one of the following in descending priority:
|
||||
|
||||
* The language [specified in options](#setting-default-player-language)
|
||||
* The language specified by the closest element with a `lang` attribute. This could be the player itself or a parent element. Usually, the document language is specified on the `<html>` tag.
|
||||
* Browser language preference; the first language if more than one is configured
|
||||
* English
|
||||
- The language [specified in options](#setting-default-player-language)
|
||||
- The language specified by the closest element with a `lang` attribute. This could be the player itself or a parent element. Usually, the document language is specified on the `<html>` tag.
|
||||
- Browser language preference; the first language if more than one is configured
|
||||
- English
|
||||
|
||||
#### Internal Language Selection
|
||||
|
||||
* Language codes are considered case-insensitively (e.g. `en-US` == `en-us`).
|
||||
* If there is no match for a language code with a subcode (e.g. `en-us`), a match for the primary code (e.g. `en`) is used if available.
|
||||
- Language codes are considered case-insensitively (e.g. `en-US` == `en-us`).
|
||||
- If there is no match for a language code with a subcode (e.g. `en-us`), a match for the primary code (e.g. `en`) is used if available.
|
||||
|
||||
## References
|
||||
|
||||
@@ -149,8 +123,7 @@ Standard languages codes [are defined by the IANA][lang-codes].
|
||||
|
||||
For all existing/supported languages, please see the [languages lolder (`lang/`)][lang-supported] folder located in the project root.
|
||||
|
||||
|
||||
[lang-en]: https://github.com/videojs/video.js/tree/master/lang/en.json
|
||||
|
||||
[lang-supported]: https://github.com/videojs/video.js/tree/master/lang
|
||||
|
||||
[lang-codes]: http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
|
||||
|
||||
+42
-79
@@ -2,49 +2,44 @@
|
||||
|
||||
> **Note:** This document is only a reference for available options. To learn about passing options to Video.js, see [the setup guide](setup.md#options).
|
||||
|
||||
## Table of Contents
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
|
||||
* [Standard <video> Element Options](#standard-video-element-options)
|
||||
* [autoplay](#autoplay)
|
||||
* [controls](#controls)
|
||||
* [height](#height)
|
||||
* [loop](#loop)
|
||||
* [muted](#muted)
|
||||
* [poster](#poster)
|
||||
* [preload](#preload)
|
||||
* ['auto'](#auto)
|
||||
* ['metadata'](#metadata)
|
||||
* ['none'](#none)
|
||||
* [src](#src)
|
||||
* [width](#width)
|
||||
* [Video.js-specific Options](#videojs-specific-options)
|
||||
* [aspectRatio](#aspectratio)
|
||||
* [children](#children)
|
||||
* [fluid](#fluid)
|
||||
* [inactivityTimeout](#inactivitytimeout)
|
||||
* [language](#language)
|
||||
* [languages](#languages)
|
||||
* [nativeControlsForTouch](#nativecontrolsfortouch)
|
||||
* [notSupportedMessage](#notsupportedmessage)
|
||||
* [plugins](#plugins)
|
||||
* [sourceOrder](#sourceorder)
|
||||
* [sources](#sources)
|
||||
* [techOrder](#techorder)
|
||||
* [vtt.js](#vttjs)
|
||||
* [Component Options](#component-options)
|
||||
* [children](#children-1)
|
||||
* [${componentName}](#componentname)
|
||||
* [Tech Options](#tech-options)
|
||||
* [${techName}](#techname)
|
||||
* [nativeControlsForTouch](#nativecontrolsfortouch-1)
|
||||
* [nativeTextTracks](#nativetexttracks)
|
||||
|
||||
- [Standard `<video>` Element Options](#standard-video-element-options)
|
||||
- [`autoplay`](#autoplay)
|
||||
- [`controls`](#controls)
|
||||
- [`height`](#height)
|
||||
- [`loop`](#loop)
|
||||
- [`muted`](#muted)
|
||||
- [`poster`](#poster)
|
||||
- [`preload`](#preload)
|
||||
- [`src`](#src)
|
||||
- [`width`](#width)
|
||||
- [Video.js-specific Options](#videojs-specific-options)
|
||||
- [`aspectRatio`](#aspectratio)
|
||||
- [`children`](#children)
|
||||
- [`fluid`](#fluid)
|
||||
- [`inactivityTimeout`](#inactivitytimeout)
|
||||
- [`language`](#language)
|
||||
- [`languages`](#languages)
|
||||
- [`notSupportedMessage`](#notsupportedmessage)
|
||||
- [`plugins`](#plugins)
|
||||
- [`sourceOrder`](#sourceorder)
|
||||
- [`sources`](#sources)
|
||||
- [`techOrder`](#techorder)
|
||||
- [Component Options](#component-options)
|
||||
- [`children`](#children-1)
|
||||
- [`${componentName}`](#componentname)
|
||||
- [Tech Options](#tech-options)
|
||||
- [`${techName}`](#techname)
|
||||
|
||||
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||
|
||||
## Standard `<video>` Element Options
|
||||
|
||||
Each of these options is also available as a [standard `<video>` element attribute][video-attrs]; so, they can be defined in all three manners [outlined in the setup guide](setup.md#options). Typically, defaults are not listed as this is left to browser vendors.
|
||||
Each of these options is also available as a [standard `<video>` element attribute][video-attrs]; so, they can be defined in all three manners [outlined above](#setting-options). Typically, defaults are not listed as this is left to browser vendors.
|
||||
|
||||
### `autoplay`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
If `true`/present as an attribute, begins playback when the player is ready.
|
||||
@@ -52,85 +47,70 @@ If `true`/present as an attribute, begins playback when the player is ready.
|
||||
> **Note:** As of iOS 10, Apple offers `autoplay` support in Safari. For details, refer to ["New <video> Policies for iOS"][ios-10-updates].
|
||||
|
||||
### `controls`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
Determines whether or not the player has controls that the user can interact with. Without controls the only way to start the video playing is with the `autoplay` attribute or through the Player API.
|
||||
|
||||
### `height`
|
||||
|
||||
> Type: `string|number`
|
||||
|
||||
Sets the display height of the video player in pixels.
|
||||
|
||||
### `loop`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
Causes the video to start over as soon as it ends.
|
||||
|
||||
### `muted`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
Will silence any audio by default.
|
||||
|
||||
### `poster`
|
||||
|
||||
> Type: `string`
|
||||
|
||||
A URL to an image that displays before the video begins playing. This is often a frame of the video or a custom title screen. As soon as the user hits "play" the image will go away.
|
||||
|
||||
### `preload`
|
||||
|
||||
> Type: `string`
|
||||
|
||||
Suggests to the browser whether or not the video data should begin downloading as soon as the `<video>` element is loaded. Supported values are:
|
||||
|
||||
#### `'auto'`
|
||||
|
||||
Start loading the video immediately (if the browser supports it). Some mobile devices will not preload the video in order to protect their users' bandwidth/data usage. This is why the value is called 'auto' and not something more conclusive like `'true'`.
|
||||
|
||||
_This tends to be the most common and recommended value as it allows the browser to choose the best behavior._
|
||||
|
||||
#### `'metadata'`
|
||||
|
||||
Load only the meta data of the video, which includes information like the duration and dimensions of the video. Sometimes, the meta data will be loaded by downloading a few frames of video.
|
||||
|
||||
#### `'none'`
|
||||
|
||||
Don't preload any data. The browser will wait until the user hits "play" to begin downloading.
|
||||
|
||||
### `src`
|
||||
|
||||
> Type: `string`
|
||||
|
||||
The source URL to a video source to embed.
|
||||
|
||||
### `width`
|
||||
|
||||
> Type: `string|number`
|
||||
|
||||
Sets the display height of the video player in pixels.
|
||||
|
||||
## Video.js-specific Options
|
||||
|
||||
Each option is `undefined` by default unless otherwise specified.
|
||||
|
||||
### `aspectRatio`
|
||||
|
||||
> Type: `string`
|
||||
|
||||
Puts the player in [fluid](#fluid) mode and the value is used when calculating the dynamic size of the player. The value should represent a ratio - two numbers separated by a colon (e.g. `"16:9"` or `"4:3"`).
|
||||
|
||||
### `children`
|
||||
|
||||
> Type: `Array|Object`
|
||||
|
||||
This option is inherited from the [`Component` base class](#component-options).
|
||||
|
||||
### `fluid`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
When `true`, the Video.js player will have a fluid size. In other words, it will scale to fit its container.
|
||||
@@ -138,7 +118,6 @@ When `true`, the Video.js player will have a fluid size. In other words, it will
|
||||
Also, if the `<video>` element has the `"vjs-fluid"`, this option is automatically set to `true`.
|
||||
|
||||
### `inactivityTimeout`
|
||||
|
||||
> Type: `number`
|
||||
|
||||
Video.js indicates that the user is interacting with the player by way of the `"vjs-user-active"` and `"vjs-user-inactive"` classes and the `"useractive"` event.
|
||||
@@ -146,7 +125,6 @@ Video.js indicates that the user is interacting with the player by way of the `"
|
||||
The `inactivityTimeout` determines how many milliseconds of inactivity is required before declaring the user inactive. A value of `0` indicates that there is no `inactivityTimeout` and the user will never be considered inactive.
|
||||
|
||||
### `language`
|
||||
|
||||
> Type: `string`, Default: browser default or `'en'`
|
||||
|
||||
A [language code][lang-codes] matching one of the available languages in the player. This sets the initial language for a player, but it can always be changed.
|
||||
@@ -154,7 +132,6 @@ A [language code][lang-codes] matching one of the available languages in the pla
|
||||
Learn more about [languages in Video.js](languages.md).
|
||||
|
||||
### `languages`
|
||||
|
||||
> Type: `Object`
|
||||
|
||||
Customize which languages are available in a player. The keys of this object will be [language codes][lang-codes] and the values will be objects with English keys and translated values.
|
||||
@@ -164,19 +141,16 @@ Learn more about [languages in Video.js](languages.md).
|
||||
> **Note**: Generally, this option is not needed and it would be better to pass your custom languages to `videojs.addLanguage()`, so they are available in all players!
|
||||
|
||||
### `nativeControlsForTouch`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
Explicitly set a default value for [the associated tech option](#nativecontrolsfortouch).
|
||||
|
||||
### `notSupportedMessage`
|
||||
|
||||
> Type: `string`
|
||||
|
||||
Allows overriding the default message that is displayed when Video.js cannot play back a media source.
|
||||
|
||||
### `plugins`
|
||||
|
||||
> Type: `Object`
|
||||
|
||||
This supports having plugins be initialized automatically with custom options when the player is initialized - rather than requiring you to initialize them manually.
|
||||
@@ -204,12 +178,11 @@ Although, since the `plugins` option is an object, the order of initialization i
|
||||
See [the plugins guide](plugins.md) for more information on Video.js plugins.
|
||||
|
||||
### `sourceOrder`
|
||||
|
||||
> Type: `boolean`, Default: `false`
|
||||
>
|
||||
|
||||
> **Note:** In video.js 6.0, this option will default to `true`.
|
||||
|
||||
Tells Video.js to prefer the order of [`sources`](#sources) over [`techOrder`](#techorder) in selecting a source and playback tech.
|
||||
Tells Video.js to prefer the order of [`sources`](#sources) over [`techOrder`](#techOrder) in selecting a source and playback tech.
|
||||
|
||||
Given the following example:
|
||||
|
||||
@@ -236,18 +209,17 @@ However, because the `sourceOrder` is `true`, Video.js flips that process around
|
||||
|
||||
In summary, the default algorithm is:
|
||||
|
||||
* for each tech:
|
||||
* for each source:
|
||||
* if tech can play source, use this tech/source combo
|
||||
- for each tech:
|
||||
- for each source:
|
||||
- if tech can play source, use this tech/source combo
|
||||
|
||||
With `sourceOrder: true`, the algorithm becomes:
|
||||
|
||||
* for each source:
|
||||
* for each tech:
|
||||
* if tech can play source, use this tech/source combo
|
||||
- for each source:
|
||||
- for each tech:
|
||||
- if tech can play source, use this tech/source combo
|
||||
|
||||
### `sources`
|
||||
|
||||
> Type: `Array`
|
||||
|
||||
An array of objects that mirror the native `<video>` element's capability to have a series of child `<source>` elements. This should be an array of objects with the `src` and `type` properties. For example:
|
||||
@@ -274,13 +246,11 @@ Using `<source>` elements will have the same effect:
|
||||
```
|
||||
|
||||
### `techOrder`
|
||||
|
||||
> Type: `Array`, Default: `['html5', 'flash']`
|
||||
|
||||
Defines the order in which Video.js techs are preferred. By default, this means that the `Html5` tech is preferred, but Video.js will fall back to `Flash` if no `Html5`-compatible source can be found.
|
||||
|
||||
### `vtt.js`
|
||||
|
||||
> Type: `string`
|
||||
|
||||
Allows overriding the default URL to vtt.js, which may be loaded asynchronously to polyfill support for `WebVTT`.
|
||||
@@ -294,7 +264,6 @@ The Video.js player is a component. Like all components, you can define what chi
|
||||
This is meant to be a quick reference; so, for more detailed information on components in Video.js, check out the [components guide](components.md).
|
||||
|
||||
### `children`
|
||||
|
||||
> Type: `Array|Object`
|
||||
|
||||
If an `Array` - which is the default - this is used to determine which children (by component name) and in which order they are created on a player (or other component):
|
||||
@@ -325,7 +294,6 @@ videojs('my-player', {
|
||||
```
|
||||
|
||||
### `${componentName}`
|
||||
|
||||
> Type: `Object`
|
||||
|
||||
Components can be given custom options via the _lower-camel-case variant of the component name_ (e.g. `controlBar` for `ControlBar`). These can be nested in a representation of grandchild relationships. For example, to disable the fullscreen control:
|
||||
@@ -339,9 +307,7 @@ videojs('my-player', {
|
||||
```
|
||||
|
||||
## Tech Options
|
||||
|
||||
### `${techName}`
|
||||
|
||||
> Type: `Object`
|
||||
|
||||
Video.js playback technologies (i.e. "techs") can be given custom options as part of the options passed to the `videojs` function. They should be passed under the _lower-case variant of the tech name_ (e.g. `"flash"` or `"html5"`).
|
||||
@@ -363,19 +329,16 @@ videojs.options.flash.swf = '//path/to/videojs.swf'
|
||||
```
|
||||
|
||||
#### `nativeControlsForTouch`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
Only supported by the `Html5` tech, this option can be set to `true` to force native controls for touch devices.
|
||||
|
||||
#### `nativeTextTracks`
|
||||
|
||||
> Type: `boolean`
|
||||
|
||||
Can be set to `false` to force emulation of text tracks instead of native support. The `nativeCaptions` option also exists, but is simply an alias to `nativeTextTracks`.
|
||||
|
||||
|
||||
[ios-10-updates]: https://webkit.org/blog/6784/new-video-policies-for-ios/
|
||||
|
||||
[lang-codes]: http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
|
||||
|
||||
[video-attrs]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#Attributes
|
||||
|
||||
@@ -1,38 +1,10 @@
|
||||
# Player Workflows
|
||||
|
||||
This document outlines many considerations for using Video.js for advanced player workflows. Be sure to read [the setup guide](setup.md) first!
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Accessing a player that has already been created on a page](#accessing-a-player-that-has-already-been-created-on-a-page)
|
||||
* [Removing Players](#removing-players)
|
||||
* [dispose()](#dispose)
|
||||
* [Signs of an Undisposed Player](#signs-of-an-undisposed-player)
|
||||
* [Showing and Hiding a Player](#showing-and-hiding-a-player)
|
||||
* [Changing the volume of a player](#changing-the-volume-of-a-player)
|
||||
* [Making the player fullscreen](#making-the-player-fullscreen)
|
||||
* [Using Playback information functions](#using-playback-information-functions)
|
||||
* [Dealing with the source or the poster on the player](#dealing-with-the-source-or-the-poster-on-the-player)
|
||||
* [Accesing the Tech on the player](#accesing-the-tech-on-the-player)
|
||||
* [Using Video.js with...](#using-videojs-with)
|
||||
* [jQuery](#jquery)
|
||||
* [React](#react)
|
||||
* [Ember](#ember)
|
||||
* [Angular](#angular)
|
||||
|
||||
## Accessing a player that has already been created on a page
|
||||
|
||||
After an instance has been created it can be accessed globally in two ways:
|
||||
|
||||
1. By calling `videojs('example_video_id');`
|
||||
1. By using it directly via `videojs.players.example_video_id;`
|
||||
|
||||
## Removing Players
|
||||
|
||||
No matter the term used for it, web applications are becoming common. Not everything is a static, load-once-and-done web page anymore! This means that developers need to be able to manage the full lifecycle of a video player - from creation to destruction. Video.js supports player removal through the `dispose()` method.
|
||||
|
||||
### [`dispose()`](http://docs.videojs.com/docs/api/player.html#Methodsdispose)
|
||||
|
||||
This method is available on all Video.js players and [components](http://docs.videojs.com/docs/api/component.html#Methodsdispose). It is _the only_ supported method of removing a Video.js player from both the DOM and memory. For example, the following code sets up a player and then disposes it when media playback is complete:
|
||||
|
||||
```js
|
||||
@@ -54,16 +26,15 @@ Additionally, these actions are recursively applied to _all_ the player's child
|
||||
> **Note**: Do _not_ remove players via standard DOM removal methods: this will leave listeners and other objects in memory that you might not be able to clean up!
|
||||
|
||||
### Signs of an Undisposed Player
|
||||
|
||||
Seeing an error such as:
|
||||
|
||||
```console
|
||||
```
|
||||
TypeError: this.el_.vjs_getProperty is not a function
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```console
|
||||
```
|
||||
TypeError: Cannot read property 'vdata1234567890' of null
|
||||
```
|
||||
|
||||
@@ -90,283 +61,10 @@ modal.on('hide', function() {
|
||||
});
|
||||
```
|
||||
|
||||
## Changing the volume of a player
|
||||
|
||||
Volume for a player can be changed through the `volume` function on a player. The volume function accepts a number from 0-1. Calling it without an argument will return the current volume.
|
||||
|
||||
Example
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
// get
|
||||
var howLoudIsIt = myPlayer.volume();
|
||||
// set
|
||||
myPlayer.volume(0.5); // Set volume to half
|
||||
});
|
||||
```
|
||||
|
||||
Volume can also be muted (without actually changing the volume value) using the `muted` function. Calling it without an argument will return the current status of muted on the player.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
// get, should be false
|
||||
console.log(myPlayer.muted());
|
||||
// set to true
|
||||
myPlayer.muted(true);
|
||||
// get should be true
|
||||
console.log(myPlayer.muted());
|
||||
});
|
||||
```
|
||||
|
||||
## Making the player fullscreen
|
||||
|
||||
To check if the player is currently fullscreen call the `isFullscreen` function on a player like so.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
// get, should be false
|
||||
console.log(myPlayer.isFullscreen());
|
||||
|
||||
// set, tell the player it's in fullscreen
|
||||
myPlayer.isFullscreen(true);
|
||||
|
||||
// get, should be true
|
||||
console.log(myPlayer.isFullscreen());
|
||||
});
|
||||
```
|
||||
|
||||
To request that the player enter fullscreen call `requestFullscreen`.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
myPlayer.requestFullscreen();
|
||||
});
|
||||
```
|
||||
|
||||
To exit fullscreen call `exitFullscreen`
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
myPlayer.requestFullscreen();
|
||||
myPlayer.exitFullscreen();
|
||||
});
|
||||
```
|
||||
|
||||
## Using Playback information functions
|
||||
|
||||
`play` can be used to start playback on a player that has a source.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
myPlayer.play();
|
||||
});
|
||||
```
|
||||
|
||||
`pause` can be used to pause playback on a player that is playing.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
myPlayer.play();
|
||||
myPlayer.pause();
|
||||
});
|
||||
```
|
||||
|
||||
`paused` can be used to determine if a player is currently paused.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
|
||||
myPlayer.ready(function() {
|
||||
// true
|
||||
console.log(myPlayer.paused());
|
||||
// false
|
||||
console.log(!myPlayer.paused());
|
||||
|
||||
myPlayer.play();
|
||||
// false
|
||||
console.log(myPlayer.paused());
|
||||
// true
|
||||
console.log(!myPlayer.paused());
|
||||
|
||||
myPlayer.pause();
|
||||
// true
|
||||
console.log(myPlayer.paused());
|
||||
// false
|
||||
console.log(!myPlayer.paused());
|
||||
});
|
||||
```
|
||||
|
||||
`currentTime` will give you the currentTime (in seconds) that playback is currently occuring at.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
// set current time to 2 minutes into the video
|
||||
myPlayer.currentTime(120);
|
||||
|
||||
// get the current time, should be 120 seconds
|
||||
var whereYouAt = myPlayer.currentTime();
|
||||
});
|
||||
```
|
||||
|
||||
`duration` will give you the total duration of the video that is playing
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
var lengthOfVideo = myPlayer.duration();
|
||||
});
|
||||
```
|
||||
|
||||
`remainingTime` will give you the seconds that are remaing in the video.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
myPlayer.currentTime(10);
|
||||
|
||||
// should be 10 seconds less than duration
|
||||
console.log(myPlayer.remainingTime());
|
||||
});
|
||||
```
|
||||
|
||||
`buffered` will give you a timeRange object representing the current ranges of time that are ready to be played at a future time.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
var bufferedTimeRange = myPlayer.buffered();
|
||||
|
||||
// number of different ranges of time have been buffered.
|
||||
// Usually 1
|
||||
var numberOfRanges = bufferedTimeRange.length,
|
||||
|
||||
// Time in seconds when the first range starts.
|
||||
// Usually 0
|
||||
var firstRangeStart = bufferedTimeRange.start(0),
|
||||
|
||||
// Time in seconds when the first range ends
|
||||
var firstRangeEnd = bufferedTimeRange.end(0),
|
||||
|
||||
// Length in seconds of the first time range
|
||||
var firstRangeLength = firstRangeEnd - firstRangeStart;
|
||||
});
|
||||
```
|
||||
|
||||
`bufferedPercent` will give you the the current percentage of the video that is buffered.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
// example 0.11 aka 11%
|
||||
var howMuchIsDownloaded = myPlayer.bufferedPercent();
|
||||
});
|
||||
```
|
||||
|
||||
## Dealing with the source or the poster on the player
|
||||
|
||||
Passing a source to the player via the API. (this can also be done using options)
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
```
|
||||
|
||||
**Source Object (or element):** A javascript object containing information
|
||||
about the source file. Use this method if you want the player to determine if
|
||||
it can support the file using the type information.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src({type: "video/mp4", src: "http://www.example.com/path/to/video.mp4"});
|
||||
```
|
||||
|
||||
**Array of Source Objects:** To provide multiple versions of the source so
|
||||
that it can be played using HTML5 across browsers you can use an array of
|
||||
source objects. Video.js will detect which version is supported and load that
|
||||
file.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src([
|
||||
{type: "video/mp4", src: "http://www.example.com/path/to/video.mp4"},
|
||||
{type: "video/webm", src: "http://www.example.com/path/to/video.webm"},
|
||||
{type: "video/ogg", src: "http://www.example.com/path/to/video.ogv"}
|
||||
]);
|
||||
```
|
||||
|
||||
Changing or setting the poster via the API. (this can also be done with options)
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('example_video_1');
|
||||
|
||||
// set
|
||||
myPlayer.poster('http://example.com/myImage.jpg');
|
||||
|
||||
// get
|
||||
console.log(myPlayer.poster());
|
||||
// 'http://example.com/myImage.jpg'
|
||||
```
|
||||
|
||||
## Accesing the Tech on the player
|
||||
|
||||
The tech on the player can only be accesed by pasing `{IWillNotUseThisInPlugins: true}` into the `tech()`
|
||||
function on the player.
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('some-player-id');
|
||||
|
||||
myPlayer.src("http://www.example.com/path/to/video.mp4");
|
||||
myPlayer.ready(function() {
|
||||
// function call throws an error if we
|
||||
// dont add {IWillNotUseThisInPlugins: true}
|
||||
var tech = myPlayer.tech({IWillNotUseThisInPlugins: true});
|
||||
});
|
||||
```
|
||||
|
||||
## Using Video.js with...
|
||||
|
||||
Coming soon...
|
||||
|
||||
### jQuery
|
||||
|
||||
### React
|
||||
|
||||
### Ember
|
||||
|
||||
### Angular
|
||||
|
||||
+25
-24
@@ -1,58 +1,59 @@
|
||||
# Plugins
|
||||
|
||||
Plugins
|
||||
=======
|
||||
If you've built something cool with Video.js, you can easily share it with the rest of the world by creating a plugin. Although, you can roll your own, you can also use [generator-videojs-plugin](https://github.com/dmlap/generator-videojs-plugin), a [Yeoman](http://yeoman.io) generator that provides scaffolding for video.js plugins including:
|
||||
|
||||
* [Grunt](http://gruntjs.com) for build management
|
||||
* [npm](https://www.npmjs.org) for dependency management
|
||||
* [QUnit](http://qunitjs.com) for testing
|
||||
|
||||
## Step 1: Write Some Javascript
|
||||
|
||||
|
||||
Step 1: Write Some Javascript
|
||||
-----------------------------
|
||||
You may have already done this step. Code up something interesting and then wrap it in a function. At the most basic level, that's all a video.js plugin is. By convention, plugins take a hash of options as their first argument:
|
||||
|
||||
```js
|
||||
function examplePlugin(options) {
|
||||
this.on('play', function(e) {
|
||||
console.log('playback has started!');
|
||||
});
|
||||
};
|
||||
function examplePlugin(options) {
|
||||
this.on('play', function(e) {
|
||||
console.log('playback has started!');
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
When it's activated, `this` will be the Video.js player your plugin is attached to. You can use anything you'd like in the [Video.js API](./api.md) when you're writing a plugin: change the `src`, mess up the DOM, or listen for and emit your own events.
|
||||
|
||||
## Step 2: Registering A Plugin
|
||||
|
||||
Step 2: Registering A Plugin
|
||||
-------------------------------
|
||||
It's time to give the rest of the world the opportunity to be awed by your genius. When your plugin is loaded, it needs to let Video.js know this amazing new functionality is now available:
|
||||
|
||||
```js
|
||||
videojs.plugin('examplePlugin', examplePlugin);
|
||||
videojs.plugin('examplePlugin', examplePlugin);
|
||||
```
|
||||
|
||||
From this point on, your plugin will be added to the Video.js prototype and will show up as a property on every instance created. Make sure you choose a unique name that doesn't clash with any of the properties already in Video.js. Which leads us to...
|
||||
|
||||
## Step 3: Using A Plugin
|
||||
|
||||
Step 3: Using A Plugin
|
||||
----------------------
|
||||
There are two ways to initialize a plugin. If you're creating your video tag dynamically, you can specify the plugins you'd like to initialize with it and any options you want to pass to them:
|
||||
|
||||
```js
|
||||
videojs('vidId', {
|
||||
plugins: {
|
||||
examplePlugin: {
|
||||
exampleOption: true
|
||||
}
|
||||
}
|
||||
});
|
||||
videojs('vidId', {
|
||||
plugins: {
|
||||
examplePlugin: {
|
||||
exampleOption: true
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
If you've already initialized your video tag, you can activate a plugin at any time by calling its setup function directly:
|
||||
|
||||
```js
|
||||
var video = videojs('cool-vid');
|
||||
video.examplePlugin({ exampleOption: true });
|
||||
var video = videojs('cool-vid');
|
||||
video.examplePlugin({ exampleOption: true });
|
||||
```
|
||||
|
||||
That's it. Head on over to the [Video.js wiki](https://github.com/videojs/video.js/wiki/Plugins) and add your plugin to the list so everyone else can check it out.
|
||||
|
||||
## How should I use the Video.js icons in my plugin?
|
||||
|
||||
If you'd like to use any of the icons available in the [Video.js icon set](http://videojs.github.io/font/), please target them via the CSS class names instead of codepoints. The codepoints _may_ change between versions of the font, so using the class names ensures that your plugin will stay up to date with any font changes.
|
||||
If you'd like to use any of the icons available in the [Video.js icon set](http://videojs.github.io/font/), please target them via the CSS class names instead of codepoints. The codepoints *may* change between versions of the font, so using the class names ensures that your plugin will stay up to date with any font changes.
|
||||
|
||||
+13
-24
@@ -1,19 +1,20 @@
|
||||
# Video.js Setup
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Getting Video.js](#getting-videojs)
|
||||
* [Creating a Player](#creating-a-player)
|
||||
* [Automatic Setup](#automatic-setup)
|
||||
* [Manual Setup](#manual-setup)
|
||||
* [Options](#options)
|
||||
* [Global Defaults](#global-defaults)
|
||||
* [A Note on <video> Tag Attributes](#a-note-on-video-tag-attributes)
|
||||
* [Player Readiness](#player-readiness)
|
||||
* [Advanced Player Workflows](#advanced-player-workflows)
|
||||
- [Getting Video.js](#getting-videojs)
|
||||
- [Creating a Player](#creating-a-player)
|
||||
- [Automatic Setup](#automatic-setup)
|
||||
- [Manual Setup](#manual-setup)
|
||||
- [Options](#options)
|
||||
- [Global Defaults](#global-defaults)
|
||||
- [A Note on `<video>` Tag Attributes](#a-note-on-video-tag-attributes)
|
||||
- [Player Readiness](#player-readiness)
|
||||
|
||||
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||
|
||||
## Getting Video.js
|
||||
|
||||
Video.js is officially available via CDN, npm, and Bower.
|
||||
|
||||
Video.js works out of the box with not only HTML `<script>` and `<link>` tags, but also all major bundlers/packagers/builders, such as Browserify, Node, WebPack, etc.
|
||||
@@ -21,7 +22,6 @@ Video.js works out of the box with not only HTML `<script>` and `<link>` tags, b
|
||||
Please refer to the [Getting Started][getting-started] document for details.
|
||||
|
||||
## Creating a Player
|
||||
|
||||
> **Note:** Video.js works with `<video>` _and_ `<audio>` elements, but for simplicity we'll refer only to `<video>` elements going forward.
|
||||
|
||||
Once you have Video.js [loaded on your page][getting-started], you're ready to create a player!
|
||||
@@ -38,7 +38,6 @@ Video.js supports all attributes of the `<video>` element (such as `controls`, `
|
||||
```
|
||||
|
||||
### Automatic Setup
|
||||
|
||||
By default, when your web page finishes loading, Video.js will scan for media elements that have the `data-setup` attribute. The `data-setup` attribute is used to pass options to Video.js. A minimal example looks like this:
|
||||
|
||||
```html
|
||||
@@ -51,7 +50,6 @@ By default, when your web page finishes loading, Video.js will scan for media el
|
||||
> **Note:** You _must_ use single-quotes with `data-setup` as it is expected to contain JSON.
|
||||
|
||||
### Manual Setup
|
||||
|
||||
On the modern web, a `<video>` element often does not exist when the page finishes loading. In these cases, automatic setup is not possible, but manual setup is available via [the `videojs` function][videojs].
|
||||
|
||||
One way to call this function is by providing it a string matching a `<video>` element's `id` attribute:
|
||||
@@ -81,7 +79,6 @@ videojs(document.querySelector('.video-js'));
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
> **Note:** This guide only covers how to pass options during player setup. For a complete reference on _all_ available options, see the [options guide](options.md).
|
||||
|
||||
There are three ways to pass options to Video.js. Because Video.js decorates an HTML5 `<video>` element, many of the options available are also available as [standard `<video>` tag attributes][video-attrs]:
|
||||
@@ -107,7 +104,6 @@ videojs('my-player', {
|
||||
```
|
||||
|
||||
### Global Defaults
|
||||
|
||||
Default options for all players can be found at `videojs.options` and can be changed directly. For example, to set `{autoplay: true}` for all future players:
|
||||
|
||||
```js
|
||||
@@ -137,7 +133,6 @@ These are correct:
|
||||
```
|
||||
|
||||
## Player Readiness
|
||||
|
||||
Because Video.js techs have the potential to be loaded asynchronously, it isn't always safe to interact with a player immediately upon setup. For this reason, Video.js players have a concept of "readiness" which will be familiar to anyone who has used jQuery before.
|
||||
|
||||
Essentially, any number of ready callbacks can be defined for a Video.js player. There are three ways to pass these callbacks. In each example, we'll add an identical class to the player:
|
||||
@@ -174,19 +169,13 @@ player.on('ready', function() {
|
||||
In each case, the callback is called asynchronously - _even if the player is already ready!_
|
||||
|
||||
## Advanced Player Workflows
|
||||
|
||||
For a discussion of more advanced player workflows, see the [player workflows guide](player-workflows.md).
|
||||
|
||||
|
||||
[boolean-attrs]: https://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.html#boolean-attributes
|
||||
|
||||
[getting-started]: http://videojs.com/getting-started/
|
||||
|
||||
[json]: http://json.org/example.html
|
||||
|
||||
[video-attrs]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#Attributes
|
||||
|
||||
[videojs]: http://docs.videojs.com/docs/api/video.html
|
||||
|
||||
[w3c-media-events]: https://www.w3.org/2010/05/video/mediaevents.html
|
||||
|
||||
[w3c-video]: http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element
|
||||
|
||||
+2
-22
@@ -1,49 +1,30 @@
|
||||
# Skins
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Default Skin](#default-skin)
|
||||
* [Additional <style> Elements](#additional-style-elements)
|
||||
* [Disabling Additional <style> Elements](#disabling-additional-style-elements)
|
||||
* [Effect on Player#width() and Player#height()](#effect-on-playerwidth-and-playerheight)
|
||||
* [Icons](#icons)
|
||||
* [Creating a Skin](#creating-a-skin)
|
||||
* [Add a Custom Class to the Player](#add-a-custom-class-to-the-player)
|
||||
* [Customize Styles](#customize-styles)
|
||||
|
||||
## Default Skin
|
||||
|
||||
When you include the Video.js CSS file (`video-js.min.css`), the default Video.js skin is applied. That means that customizing the look of a Video.js player is a matter of taking advantage of the cascading aspect of CSS to override styles.
|
||||
|
||||
## Additional `<style>` Elements
|
||||
|
||||
In addition to the Video.js CSS file, there are some styles generated automatically by JavaScript and included in the `<head>` as `<style>` elements.
|
||||
|
||||
* The `"vjs-styles-defaults"` element sets default dimensions for all Video.js players on the page.
|
||||
* A `"vjs-styles-dimensions"` element is created for _each_ player on the page and is used to adjust its size. This styling is handled in this manner to allow you to override it with custom CSS without relying on scripting or `!important` to overcome inline styles.
|
||||
- The `"vjs-styles-defaults"` element sets default dimensions for all Video.js players on the page.
|
||||
- A `"vjs-styles-dimensions"` element is created for _each_ player on the page and is used to adjust its size. This styling is handled in this manner to allow you to override it with custom CSS without relying on scripting or `!important` to overcome inline styles.
|
||||
|
||||
### Disabling Additional `<style>` Elements
|
||||
|
||||
In some cases, particularly with web applications using frameworks that may manage the `<head>` element (e.g. React, Ember, Angular, etc), these `<style>` elements are not desirable. They can be suppressed by setting `window.VIDEOJS_NO_DYNAMIC_STYLE = true` before including Video.js.
|
||||
|
||||
_This disables all CSS-based player sizing. Players will have no `height` or `width` by default!_ Even dimensional attributes, such as `width="600" height="300"` will be _ignored_. When using this global, you will need to set their own dimensions in a way that makes sense for their website or web app.
|
||||
|
||||
#### Effect on `Player#width()` and `Player#height()`
|
||||
|
||||
When `VIDEOJS_NO_DYNAMIC_STYLE` is set, `Player#width()` and `Player#height()` will apply any width and height that is set directly to the `<video>` element (or whichever element the current tech uses).
|
||||
|
||||
## Icons
|
||||
|
||||
Video.js ships with a number of icons built into the skin via an icon font.
|
||||
|
||||
You can view all of the icons available in the default skin by renaming [`sandbox/icons.html.example`](https://github.com/videojs/video.js/blob/master/sandbox/icons.html.example) to `sandbox/icons.html`, building Video.js with `npm run build`, and opening `sandbox/icons.html` in your browser of choice.
|
||||
|
||||
## Creating a Skin
|
||||
|
||||
The recommended process for creating a skin is to override the styles provided by the default skin. In this way, you don't need to start from scratch.
|
||||
|
||||
### Add a Custom Class to the Player
|
||||
|
||||
The most convenient way to create a hook in the player for your skin is to add a class to it. You can do this by adding a class to the initial `<video>` element:
|
||||
|
||||
```html
|
||||
@@ -61,7 +42,6 @@ player.addClass('vjs-matrix');
|
||||
> **Note:** The `vjs-` prefix is a convention for all classes that are contained in a Video.js player.
|
||||
|
||||
### Customize Styles
|
||||
|
||||
The first step in overriding default styles with custom ones is to determine which selectors and properties need overriding. As an example, let's say we don't like the default color of controls (white) and we want to change them to a bright green (say, `#00ff00`).
|
||||
|
||||
To do this, we'll use your browser's developer tools to inspect the player and figure out which selectors we need to use to adjust those styles - and we'll add our custom `.vjs-matrix` selector to ensure our final selectors are specific enough to override the default skin.
|
||||
|
||||
+37
-52
@@ -1,15 +1,15 @@
|
||||
# Playback Technology ("Tech")
|
||||
|
||||
Playback Technology ("Tech")
|
||||
============================
|
||||
Playback Technology refers to the specific browser or plugin technology used to play the video or audio. When using HTML5, the playback technology is the video or audio element. When using Flash, the playback technology is the specific Flash player used, e.g. Flowplayer, YouTube Player, video-js.swf, etc. (not just "Flash"). This could also include Silverlight, Quicktime, or any other plugin that will play back video in the browser, as long as there is an API wrapper written for it.
|
||||
|
||||
Essentially we're using HTML5 and plugins only as video decoders, and using HTML and JavaScript to create a consistent API and skinning experience across all of them.
|
||||
|
||||
## Building an API Wrapper
|
||||
|
||||
Building an API Wrapper
|
||||
-----------------------
|
||||
We'll write a more complete guide on writing a wrapper soon, but for now the best resource is the [Video.js](https://github.com/zencoder/video-js/tree/master/src) source where you can see how both the HTML5 and video-js.swf API wrappers were created.
|
||||
|
||||
## Required Methods
|
||||
|
||||
Required Methods
|
||||
----------------
|
||||
canPlayType
|
||||
play
|
||||
pause
|
||||
@@ -19,8 +19,8 @@ duration
|
||||
buffered
|
||||
supportsFullScreen
|
||||
|
||||
## Required Events
|
||||
|
||||
Required Events
|
||||
---------------
|
||||
loadstart
|
||||
play
|
||||
pause
|
||||
@@ -30,45 +30,37 @@ volumechange
|
||||
durationchange
|
||||
error
|
||||
|
||||
## Optional Events (include if supported)
|
||||
|
||||
Optional Events (include if supported)
|
||||
--------------------------------------
|
||||
timeupdate
|
||||
progress
|
||||
enterFullScreen
|
||||
exitFullScreen
|
||||
|
||||
## Adding Playback Technology
|
||||
|
||||
Adding Playback Technology
|
||||
==================
|
||||
When adding additional Tech to a video player, make sure to add the supported tech to the video object.
|
||||
|
||||
### Tag Method:
|
||||
### Tag Method: ###
|
||||
<video data-setup='{"techOrder": ["html5", "flash", "other supported tech"]}'
|
||||
|
||||
```html
|
||||
<video data-setup='{"techOrder": ["html5", "flash", "other supported tech"]}'>
|
||||
```
|
||||
|
||||
### Object Method:
|
||||
|
||||
```js
|
||||
videojs("videoID", {
|
||||
techOrder: ["html5", "flash", "other supported tech"]
|
||||
});
|
||||
```
|
||||
|
||||
## Technology Ordering
|
||||
### Object Method: ###
|
||||
videojs("videoID", {
|
||||
techOrder: ["html5", "flash", "other supported tech"]
|
||||
});
|
||||
|
||||
Technology Ordering
|
||||
==================
|
||||
By default Video.js performs "Tech-first" ordering when it searches for a source/tech combination to play videos. This means that if you have two sources and two techs, video.js will try to play each video with the first tech in the `techOrder` option property before moving on to try the next playback technology.
|
||||
|
||||
Tech-first ordering can present a problem if you have a `sourceHandler` that supports both `Html5` and `Flash` techs such as videojs-contrib-hls.
|
||||
|
||||
For example, given the following video element:
|
||||
|
||||
```html
|
||||
<video data-setup='{"techOrder": ["html5", "flash"]}'>
|
||||
<source src="http://your.static.provider.net/path/to/video.m3u8" type="application/x-mpegURL">
|
||||
<source src="http://your.static.provider.net/path/to/video.mp4" type="video/mp4">
|
||||
</video>
|
||||
```
|
||||
<video data-setup='{"techOrder": ["html5", "flash"]}'>
|
||||
<source src="http://your.static.provider.net/path/to/video.m3u8" type="application/x-mpegURL">
|
||||
<source src="http://your.static.provider.net/path/to/video.mp4" type="video/mp4">
|
||||
</video>
|
||||
|
||||
There is a good chance that the mp4 source will be selected on platforms that do not have media source extensions. Video.js will try all sources against the first playback technology, in this case `Html5`, and select the first source that can play - in this case MP4.
|
||||
|
||||
@@ -80,12 +72,10 @@ Video.js now provides another method of selecting the source - "Source-first" or
|
||||
|
||||
With a player setup as follows:
|
||||
|
||||
```html
|
||||
<video data-setup='{"techOrder": ["html5", "flash"], "sourceOrder": true}'>
|
||||
<source src="http://your.static.provider.net/path/to/video.m3u8" type="application/x-mpegURL">
|
||||
<source src="http://your.static.provider.net/path/to/video.mp4" type="video/mp4">
|
||||
</video>
|
||||
```
|
||||
<video data-setup='{"techOrder": ["html5", "flash"], "sourceOrder": true}'>
|
||||
<source src="http://your.static.provider.net/path/to/video.m3u8" type="application/x-mpegURL">
|
||||
<source src="http://your.static.provider.net/path/to/video.mp4" type="video/mp4">
|
||||
</video>
|
||||
|
||||
The Flash-based HLS support will be tried before falling back to the MP4 source.
|
||||
|
||||
@@ -93,28 +83,23 @@ In "Source-first" mode, the tests run something like this:
|
||||
Can video.m3u8 play with Html5? No...
|
||||
Can video.m3u8 play with Flash? Yes! Use the first source.
|
||||
|
||||
## Flash Technology
|
||||
|
||||
Flash Technology
|
||||
==================
|
||||
The Flash playback tech is a part of the default `techOrder`. You may notice undesirable playback behavior in browsers that are subject to using this playback tech, in particular when scrubbing and seeking within a video. This behavior is a result of Flash's progressive video playback.
|
||||
|
||||
### Enabling Streaming Playback
|
||||
|
||||
Enabling Streaming Playback
|
||||
--------------------------------
|
||||
In order to force the Flash tech to choose streaming playback, you need to provide a valid streaming source **before other valid Flash video sources**. This is necessary because of the source selection algorithm, where playback tech chooses the first possible source object with a valid type. Valid streaming `type` values include `rtmp/mp4` and `rtmp/flv`. The streaming `src` value requires valid connection and stream strings, separated by an `&`. An example of supplying a streaming source through your HTML markup might look like:
|
||||
|
||||
```html
|
||||
<source src="rtmp://your.streaming.provider.net/cfx/st/&mp4:path/to/video.mp4" type="rtmp/mp4">
|
||||
<source src="http://your.static.provider.net/path/to/video.mp4" type="video/mp4">
|
||||
<source src="http://your.static.provider.net/path/to/video.webm" type="video/webm">
|
||||
```
|
||||
<source src="rtmp://your.streaming.provider.net/cfx/st/&mp4:path/to/video.mp4" type="rtmp/mp4">
|
||||
<source src="http://your.static.provider.net/path/to/video.mp4" type="video/mp4">
|
||||
<source src="http://your.static.provider.net/path/to/video.webm" type="video/webm">
|
||||
|
||||
You may optionally use the last `/` as the separator between connection and stream strings, for example:
|
||||
|
||||
```html
|
||||
<source src="rtmp://your.streaming.provider.net/cfx/st/mp4:video.mp4" type="rtmp/mp4">
|
||||
```
|
||||
<source src="rtmp://your.streaming.provider.net/cfx/st/mp4:video.mp4" type="rtmp/mp4">
|
||||
|
||||
All four RTMP protocols are valid in the `src` (RTMP, RTMPT, RTMPE, and RTMPS).
|
||||
|
||||
#### A note on sandboxing and security
|
||||
|
||||
### A note on sandboxing and security
|
||||
In some environments, such as Electron and NW.js apps, stricter policies are enforced, and `.swf` files won’t be able to communicate with the outside world out of the box. To stream media, you have to add them to a special manifest of trusted files. [nw-flash-trust](https://github.com/szwacz/nw-flash-trust) makes this job easy.
|
||||
|
||||
@@ -1,36 +1,12 @@
|
||||
# Text Tracks
|
||||
|
||||
Text tracks are a feature of HTML5 video for displaying time-triggered text to the viewer. Video.js offers a cross-browser implementation of text tracks.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [A Note on "Remote" Text Tracks](#a-note-on-remote-text-tracks)
|
||||
* [Creating the Text File](#creating-the-text-file)
|
||||
* [Adding Text Tracks to Video.js](#adding-text-tracks-to-videojs)
|
||||
* [track Attributes](#track-attributes)
|
||||
* [kind](#kind)
|
||||
* [label](#label)
|
||||
* [default](#default)
|
||||
* [srclang](#srclang)
|
||||
* [Text Tracks from Another Domain](#text-tracks-from-another-domain)
|
||||
* [Working with Text Tracks](#working-with-text-tracks)
|
||||
* [Showing Tracks Programmatically](#showing-tracks-programmatically)
|
||||
* [Listen for a Cue Becoming Active](#listen-for-a-cue-becoming-active)
|
||||
* [Emulated Text Tracks](#emulated-text-tracks)
|
||||
* [Text Track Settings](#text-track-settings)
|
||||
* [Text Track Precedence](#text-track-precedence)
|
||||
* [API](#api)
|
||||
* [Remote Text Tracks](#remote-text-tracks)
|
||||
* [Text Tracks](#text-tracks-1)
|
||||
|
||||
## A Note on "Remote" Text Tracks
|
||||
|
||||
Video.js refers to so-called "remote" text tracks. This is a convenient term for tracks that have an associated `<track>` element rather than those that do not.
|
||||
|
||||
Either can be created programmatically, but _only remote text tracks can be removed from a player._ For that reason, we recommend _only_ using remote text tracks.
|
||||
|
||||
## Creating the Text File
|
||||
|
||||
Timed text requires a text file in [WebVTT](http://dev.w3.org/html5/webvtt/) format. This format defines a list of "cues" that have a start time, an end time, and text to display. [Microsoft has a builder](https://dev.modern.ie/testdrive/demos/captionmaker/) that can help you get started on the file.
|
||||
|
||||
> **Note:** When creating captions, there are additional [caption formatting techniques](http://www.theneitherworld.com/mcpoodle/SCC_TOOLS/DOCS/SCC_FORMAT.HTML#style) to make captions more meaningful, like brackets around sound effects (e.g. `[ birds chirping ]`).
|
||||
@@ -38,7 +14,6 @@ Timed text requires a text file in [WebVTT](http://dev.w3.org/html5/webvtt/) for
|
||||
> For a more in depth style guide for captioning, see the [Captioning Key](http://www.dcmp.org/captioningkey/), but keep in mind not all features are supported by WebVTT or (more likely) the Video.js WebVTT implementation.
|
||||
|
||||
## Adding Text Tracks to Video.js
|
||||
|
||||
Once you have your WebVTT files created, you can add them to your `video` element using the `track` tag. Similar to `source` elements, `track` elements should be added as children of the `video` element:
|
||||
|
||||
```html
|
||||
@@ -58,27 +33,23 @@ Once you have your WebVTT files created, you can add them to your `video` elemen
|
||||
Video.js will automatically read `track` elements from the `video` element. Tracks (remote and non-remote) can also be added programmatically.
|
||||
|
||||
### `track` Attributes
|
||||
|
||||
#### `kind`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#text-track-kind)
|
||||
|
||||
One of the track types supported by Video.js:
|
||||
|
||||
* `"subtitles"` (default): Translations of the dialogue in the video for when audio is available but not understood. Subtitles are shown over the video.
|
||||
* `"captions"`: Transcription of the dialogue, sound effects, musical cues, and other audio information for viewer who are deaf/hard of hearing, or the video is muted. Captions are also shown over the video.
|
||||
* `"chapters"`: Chapter titles that are used to create navigation within the video. Typically, these are in the form of a list of chapters that the viewer can use to navigate the video.
|
||||
* `"descriptions"`: Text descriptions of the action in the content for when the video portion isn't available or because the viewer is blind or not using a screen. Descriptions are read by a screen reader or turned into a separate audio track.
|
||||
* `"metadata"`: Tracks that have data meant for JavaScript to parse and do something with. These aren't shown to the user.
|
||||
- `"subtitles"` (default): Translations of the dialogue in the video for when audio is available but not understood. Subtitles are shown over the video.
|
||||
- `"captions"`: Transcription of the dialogue, sound effects, musical cues, and other audio information for viewer who are deaf/hard of hearing, or the video is muted. Captions are also shown over the video.
|
||||
- `"chapters"`: Chapter titles that are used to create navigation within the video. Typically, these are in the form of a list of chapters that the viewer can use to navigate the video.
|
||||
- `"descriptions"`: Text descriptions of the action in the content for when the video portion isn't available or because the viewer is blind or not using a screen. Descriptions are read by a screen reader or turned into a separate audio track.
|
||||
- `"metadata"`: Tracks that have data meant for JavaScript to parse and do something with. These aren't shown to the user.
|
||||
|
||||
#### `label`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#text-track-label)
|
||||
|
||||
Short descriptive text for the track that will used in the user interface. For example, in a menu for selecting a captions language.
|
||||
|
||||
#### `default`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-track-default)
|
||||
|
||||
The boolean `default` attribute can be used to indicate that a track's mode should start as `"showing"`. Otherwise, the viewer would need to select their language from a captions or subtitles menu.
|
||||
@@ -86,7 +57,6 @@ The boolean `default` attribute can be used to indicate that a track's mode shou
|
||||
> **Note:** For chapters, `default` is required if you want the chapters menu to show.
|
||||
|
||||
#### `srclang`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-track-srclang)
|
||||
|
||||
The valid [BCP 47](https://tools.ietf.org/html/bcp47) code for the language of the text track, e.g. `"en"` for English or `"es"` for Spanish.
|
||||
@@ -94,7 +64,6 @@ The valid [BCP 47](https://tools.ietf.org/html/bcp47) code for the language of t
|
||||
For supported language translations, please see the [languages folder (/lang)](https://github.com/videojs/video.js/tree/master/lang) folder located in the Video.js root and refer to the [languages guide](./languages.md) for more information on languages in Video.js.
|
||||
|
||||
### Text Tracks from Another Domain
|
||||
|
||||
Because Video.js loads the text track file via JavaScript, the [same-origin policy](http://en.wikipedia.org/wiki/Same_origin_policy) applies. If you'd like to have a player served from one domain, but the text track served from another, you'll need to [enable CORS](http://enable-cors.org/) on the server that is serving your text tracks.
|
||||
|
||||
In addition to enabling CORS, you will need to add the [`crossorigin` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) to the video element itself. This attribute has two possible values `"anonymous"` and `"use-credentials"`. Most users will want to use `"anonymous"` with cross-origin tracks:
|
||||
@@ -109,9 +78,7 @@ In addition to enabling CORS, you will need to add the [`crossorigin` attribute]
|
||||
One thing to be aware of is that the video files themselves will _also_ need CORS headers. This is because some browsers apply the `crossorigin` attribute to the video source itself and not just the tracks. This is considered a [security concern by the spec](https://html.spec.whatwg.org/multipage/embedded-content.html#security-and-privacy-considerations).
|
||||
|
||||
## Working with Text Tracks
|
||||
|
||||
### Showing Tracks Programmatically
|
||||
|
||||
Certain use cases call for turning captions on and off programmatically rather than forcing the user to do so themselves. This can be easily achieved by modifying the `mode` property of the text tracks.
|
||||
|
||||
The `mode` can be one of three values `"disabled"`, `"hidden"`, and `"showing"`. When a text track's `mode` is `"disabled"`, the track does not show on screen as the video is playing.
|
||||
@@ -133,7 +100,6 @@ for (var i = 0; i < tracks.length; i++) {
|
||||
```
|
||||
|
||||
### Listen for a Cue Becoming Active
|
||||
|
||||
One of the supported values for `mode` is `"hidden"`. This `mode` means that the track will update as the video is playing, but it won't be visible to the viewer. This is most useful for tracks where `kind="metadata"`.
|
||||
|
||||
A common use case for metadata text tracks is to use them to trigger behaviors when their cues become active. For this purpose, tracks emit a `"cuechange"` event.
|
||||
@@ -162,7 +128,6 @@ metadataTrack.addEventListener('cuechange', function() {
|
||||
```
|
||||
|
||||
## Emulated Text Tracks
|
||||
|
||||
By default, Video.js will use native text tracks and fall back to emulated text tracks if the native functionality is broken, incomplete, or non-existent. The Flash tech will always use the emulated text track functionality.
|
||||
|
||||
The Video.js API and TextTrack objects were modeled after the W3C specification. Video.js uses [Mozilla's vtt.js](https://github.com/mozilla/vtt.js) library to parse and display emulated text tracks.
|
||||
@@ -179,7 +144,6 @@ var player = videojs('myvideo', {
|
||||
```
|
||||
|
||||
### Text Track Settings
|
||||
|
||||
When using emulated text tracks, captions will have an additional item in the menu called "Caption Settings". This allows the user to alter how captions are styled on screen.
|
||||
|
||||
This feature can be disabled by turning off the `TextTrackSettings` component and hiding the menu item.
|
||||
@@ -199,45 +163,41 @@ var player = videojs('myvideo', {
|
||||
```
|
||||
|
||||
## Text Track Precedence
|
||||
|
||||
In general, `"descriptions"` tracks are of lower precedence than `"captions"` and `"subtitles"`. What this mean for developers using Video.js?
|
||||
|
||||
* If you are using the `default` attribute, Video.js will choose the first track that is marked as `default` and turn it on. If there are multiple tracks marked `default`, it will turn on the first `"captions"` or `"subtitles"` track _before_ any `"descriptions"` tracks.
|
||||
* This only applied to the emulated text track support, native text tracks behavior will change depending on the browser.
|
||||
* If a track is selected from the menu, Video.js will turn off all the other tracks of the same kind. While this suggests Video.js supports both `"subtitles"` and `"captions"` being turned on simultaneously, this is currently not the case; Video.js only supports one track being displayed at a time.
|
||||
* This means that for emulated text tracks, Video.js will display the first enabled `"subtitles"` or `"captions"` track.
|
||||
* When native text tracks are supported, other tracks of the same kind will still be disabled, but it is possible that multiple text tracks are shown.
|
||||
* If a `"descriptions"` track is selected and subsequently a `"subtitles"` or `"captions"` track is selected, the `"descriptions"` track is disabled and its menu button is also disabled.
|
||||
* When enabling a track programmatically, Video.js performs minimal enforcement.
|
||||
* For emulated text tracks, Video.js chooses the first track that's `"showing"` - again choosing `"subtitles"` or `"captions"` over `"descriptions"`.
|
||||
* For native text tracks, this behavior depends on the browser. Some browsers will allow multiple text tracks, but others will disable all other tracks when a new one is selected.
|
||||
- If you are using the `default` attribute, Video.js will choose the first track that is marked as `default` and turn it on. If there are multiple tracks marked `default`, it will turn on the first `"captions"` or `"subtitles"` track _before_ any `"descriptions"` tracks.
|
||||
- This only applied to the emulated text track support, native text tracks behavior will change depending on the browser.
|
||||
- If a track is selected from the menu, Video.js will turn off all the other tracks of the same kind. While this suggests Video.js supports both `"subtitles"` and `"captions"` being turned on simultaneously, this is currently not the case; Video.js only supports one track being displayed at a time.
|
||||
- This means that for emulated text tracks, Video.js will display the first enabled `"subtitles"` or `"captions"` track.
|
||||
- When native text tracks are supported, other tracks of the same kind will still be disabled, but it is possible that multiple text tracks are shown.
|
||||
- If a `"descriptions"` track is selected and subsequently a `"subtitles"` or `"captions"` track is selected, the `"descriptions"` track is disabled and its menu button is also disabled.
|
||||
- When enabling a track programmatically, Video.js performs minimal enforcement.
|
||||
- For emulated text tracks, Video.js chooses the first track that's `"showing"` - again choosing `"subtitles"` or `"captions"` over `"descriptions"`.
|
||||
- For native text tracks, this behavior depends on the browser. Some browsers will allow multiple text tracks, but others will disable all other tracks when a new one is selected.
|
||||
|
||||
## API
|
||||
|
||||
For more complete information, refer to the [Video.js API docs](http://docs.videojs.com/docs/api/index.html).
|
||||
|
||||
### Remote Text Tracks
|
||||
|
||||
As mentioned [above](#a-note-on-remote-text-tracks), remote text tracks represent the recommended API offered by Video.js as they can be removed.
|
||||
|
||||
* `Player#remoteTextTracks()`
|
||||
* `Player#remoteTextTrackEls()`
|
||||
* `Player#addRemoteTextTrack(Object options)`
|
||||
- `Player#remoteTextTracks()`
|
||||
- `Player#remoteTextTrackEls()`
|
||||
- `Player#addRemoteTextTrack(Object options)`
|
||||
|
||||
Available options are the same as the [available `track` attributes](#track-attributes). And `language` is a supported option as an alias for the `srclang` attribute - either works here.
|
||||
|
||||
* `Player#removeRemoteTextTrack(HTMLTrackElement|TextTrack)`
|
||||
- `Player#removeRemoteTextTrack(HTMLTrackElement|TextTrack)`
|
||||
|
||||
### Text Tracks
|
||||
|
||||
It is generally recommended that you use _remote_ text tracks rather than these purely programmatic text tracks for the majority of use-cases.
|
||||
|
||||
* `Player#textTracks()`
|
||||
* `Player#addTextTrack(String kind, [String label [, String language]])`
|
||||
- `Player#textTracks()`
|
||||
- `Player#addTextTrack(String kind, [String label [, String language]])`
|
||||
|
||||
> **Note:** Non-remote text tracks are intended for _purely programmatic usage_ of tracks and have the important limitation that they _cannot be removed once created_.
|
||||
>
|
||||
> The standard `addTextTrack` does **not** have a corresponding `removeTextTrack` method; so, we actually discourage the use of this method!
|
||||
|
||||
* `TextTrackList()`
|
||||
* `TextTrack()`
|
||||
- `TextTrackList()`
|
||||
- `TextTrack()`
|
||||
|
||||
@@ -1,21 +1,11 @@
|
||||
# Tracks
|
||||
|
||||
There are currently three types of tracks:
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Audio Tracks](#audio-tracks)
|
||||
* [Video Tracks](#video-tracks)
|
||||
* [Text Tracks](#text-tracks)
|
||||
|
||||
## [Audio Tracks](./audio-tracks.md)
|
||||
|
||||
Audio tracks allow the selection of alternate audio for a video.
|
||||
|
||||
## [Video Tracks](./video-tracks.md)
|
||||
|
||||
Video tracks allow the selection of alternate video content.
|
||||
|
||||
## [Text Tracks](./text-tracks.md)
|
||||
|
||||
Text tracks are used to display subtitles and captions and add a menu for navigating between chapters in a video.
|
||||
|
||||
@@ -1,59 +1,37 @@
|
||||
# Troubleshooting
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Problems with media formats](#problems-with-media-formats)
|
||||
* [Choosing a video format](#choosing-a-video-format)
|
||||
* [I want to have a single source and don't care about live/adaptive streaming:](#i-want-to-have-a-single-source-and-dont-care-about-liveadaptive-streaming)
|
||||
* [I need adaptive streaming or live streaming](#i-need-adaptive-streaming-or-live-streaming)
|
||||
* [Make sure you are using formats that Video.js can play:](#make-sure-you-are-using-formats-that-videojs-can-play)
|
||||
* [Make sure that the codec used in the file container is supported:](#make-sure-that-the-codec-used-in-the-file-container-is-supported)
|
||||
* [If you are using Flash videos:](#if-you-are-using-flash-videos)
|
||||
* [Problems when hosting media](#problems-when-hosting-media)
|
||||
* [Problems with fullscreen](#problems-with-fullscreen)
|
||||
* [Problems with playback](#problems-with-playback)
|
||||
* [Video.js Errors](#videojs-errors)
|
||||
* [vdata123456 errors](#vdata123456-errors)
|
||||
Troubleshooting
|
||||
|
||||
## Problems with media formats
|
||||
|
||||
### Choosing a video format
|
||||
|
||||
#### I want to have a single source and don't care about live/adaptive streaming:
|
||||
|
||||
Most browsers now play MP4 with h264 video. If you want to have a single source, and neither live streaming
|
||||
nor adaptive streaming is a consideration, MP4 with h264 video and acc audio is a good choice.
|
||||
nor adaptive streaming is a consideration, MP4 is a good choice.
|
||||
|
||||
#### I need adaptive streaming or live streaming
|
||||
|
||||
Use HLS with [videojs-contrib-hls][hls] or
|
||||
Use Dash with [videojs-contrib-dash][dash].
|
||||
HLS is more convenient as mobile browsers have native support.
|
||||
|
||||
### Make sure you are using formats that Video.js can play:
|
||||
|
||||
### Make sure you are using formats that video.js can play:
|
||||
* Does your browser/OS support the type of media that you are trying to play?
|
||||
* Do you have a Video.js plugin that will add support for a media format to Video.js? For example:
|
||||
* Do you have a video.js plugin that will add support for a media format to video.js? For Example:
|
||||
* [videojs-youtube][youtube]
|
||||
* [videojs-contrib-hls][hls]
|
||||
* [videojs-contrib-dash][dash]
|
||||
* Verify that you are using the correct [mime-type/content-type][media-types] for your videos.
|
||||
This is used to determine if Video.js can play a certain type of media.
|
||||
|
||||
### Make sure that the codec used in the file container is supported:
|
||||
This is used to determine if video.js can play a certain type of media.
|
||||
|
||||
### Make sure that the codec for that is being used in the file container is supported:
|
||||
* MP4 in browsers typically only supports h264 video and MP3 or AAC audio
|
||||
* Some low end phones save video in 3GP format but give it an MP4 extension. These files will not play.
|
||||
|
||||
### If you are using Flash videos:
|
||||
|
||||
* Make sure that Flash is installed
|
||||
* Make sure the Flash tech is included with Video.js (in `video.js >= v6.0.0` it won't be by default, see [videojs-flash][flash])
|
||||
* Make sure the Flash tech is included with video.js (in `video.js >= v6.0.0` it won't be, see [videojs-flash][flash])
|
||||
* Flash media include RTMP streams and FLV format media.
|
||||
* SWF is not a media format
|
||||
|
||||
## Problems when hosting media
|
||||
|
||||
* Your server must support byte-range requests as Chrome and Safari rely on them:
|
||||
* Most servers support this by default.
|
||||
* If you are proxying the media files via a server side script (PHP), this script must implement ranges. PHP does not do this by default.
|
||||
@@ -63,25 +41,21 @@ HLS is more convenient as mobile browsers have native support.
|
||||
* You are using [videojs-contrib-hls][hls], [videojs-contrib-dash][dash] and your media is served from a different domain than your page.
|
||||
* You are using [text tracks][text-tracks] (captions, subtitles, etc.) and they are being served from a different domain than your page.
|
||||
|
||||
## Problems with fullscreen
|
||||
|
||||
## Problems with Fullscreen
|
||||
* If your player is in an iframe, the parent iframes must have the following attributes for fullscreen to be allowed:
|
||||
* `allowfullscreen`
|
||||
* `webkitallowfullscreen`
|
||||
* `mozallowfullscreen`
|
||||
|
||||
## Problems with playback
|
||||
|
||||
* Make sure that the media host supports byte-range requests, this could be breaking playback. See [Problems when hosting media][hosting-media] for more info.
|
||||
* Make sure that the media host supports byte-range requests, this could be breaking playback. See [Problems when Hosting media][hosting-media] for more info.
|
||||
* If your media is taking a long time to start playback or the entire mediadownloads before playback:
|
||||
* It is likely that metadata for the media has not been included at the start of the media. In MP4 terms this is called
|
||||
the "moov atom". Many encoders are configured to do this by default, others may require you to choose
|
||||
a "fast start" or "optimize for streaming" option.
|
||||
|
||||
## Video.js Errors
|
||||
|
||||
## video.js Errors
|
||||
### vdata123456 errors
|
||||
|
||||
This error is thrown when an element that is associated with a component is removed
|
||||
from the DOM but the event handlers associated with the element are not removed. This
|
||||
is almost always due to event listeners not being disposed when dispose is called on
|
||||
@@ -89,18 +63,18 @@ a component.
|
||||
|
||||
To fix this issue please make sure that all event listeners are cleaned up on dispose.
|
||||
|
||||
[hosting-media]: #problems-when-hosting-media
|
||||
<!-- same-page -->
|
||||
[hosting-problems]: #problems-when-hosting-media
|
||||
|
||||
[text-tracks]: text-tracks.md
|
||||
<!-- guides -->
|
||||
[text-tracks]: /docs/guides/text-tracks.md
|
||||
|
||||
<!-- official projects -->
|
||||
[hls]: https://github.com/videojs/videojs-contrib-hls
|
||||
|
||||
[dash]: https://github.com/videojs/videojs-contrib-dash
|
||||
|
||||
[youtube]: https://github.com/videojs/videojs-youtube
|
||||
|
||||
[flash]: https://github.com/videojs/videojs-flash
|
||||
|
||||
<!-- External links -->
|
||||
[media-types]: http://www.iana.org/assignments/media-types/media-types.xhtml#video
|
||||
|
||||
[cors]: http://enable-cors.org/
|
||||
@@ -1,33 +1,14 @@
|
||||
# Video Tracks
|
||||
|
||||
> **Note:** While video tracks [are a standard][spec-videotrack], there are no compatible implementations at this time. This is an experimental technology!
|
||||
|
||||
Video tracks are a feature of HTML5 video for providing alternate video tracks to the user, so they can change the type of video they want to watch. Video.js offers a cross-browser implementation of video tracks.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Caveats](#caveats)
|
||||
* [Working with Video Tracks](#working-with-video-tracks)
|
||||
* [Add a Video Track to the Player](#add-a-video-track-to-the-player)
|
||||
* [Listen for a Video Track Becoming Enabled](#listen-for-a-video-track-becoming-enabled)
|
||||
* [Removing an Video Track from the Player](#removing-an-video-track-from-the-player)
|
||||
* [API](#api)
|
||||
* [videojs.VideoTrack](#videojsvideotrack)
|
||||
* [id](#id)
|
||||
* [kind](#kind)
|
||||
* [label](#label)
|
||||
* [language](#language)
|
||||
* [selected](#selected)
|
||||
|
||||
## Caveats
|
||||
|
||||
* It is not possible to add video tracks through HTML like you can with text tracks. They must be added programmatically.
|
||||
* Video.js only stores track representations. Switching video tracks for playback is _not handled by Video.js_ and must be handled elsewhere.
|
||||
- It is not possible to add video tracks through HTML like you can with text tracks. They must be added programmatically.
|
||||
- Video.js only stores track representations. Switching video tracks for playback is _not handled by Video.js_ and must be handled elsewhere.
|
||||
|
||||
## Working with Video Tracks
|
||||
|
||||
### Add a Video Track to the Player
|
||||
|
||||
```js
|
||||
// Create a player.
|
||||
var player = videojs('my-player');
|
||||
@@ -45,7 +26,6 @@ player.videoTracks().addTrack(track);
|
||||
```
|
||||
|
||||
### Listen for a Video Track Becoming Enabled
|
||||
|
||||
When a track is enabled or disabled on an `VideoTrackList`, a `change` event will be fired. You can listen for that event and do something with it.
|
||||
|
||||
> NOTE: The initial `VideoTrack` selection (usually the main track that is selected) should not fire a `change` event.
|
||||
@@ -70,7 +50,6 @@ videoTrackList.addEventListener('change', function() {
|
||||
```
|
||||
|
||||
### Removing an Video Track from the Player
|
||||
|
||||
Assuming a player already exists and has an video track that you want to remove, you might do something like the following:
|
||||
|
||||
```js
|
||||
@@ -82,47 +61,41 @@ player.videoTracks().removeTrack(track);
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
For more complete information, refer to the [Video.js API docs](http://docs.videojs.com/docs/api/index.html), specifically:
|
||||
|
||||
* `Player#videoTracks`
|
||||
* `VideoTrackList`
|
||||
* `VideoTrack`
|
||||
- `Player#videoTracks`
|
||||
- `VideoTrackList`
|
||||
- `VideoTrack`
|
||||
|
||||
### `videojs.VideoTrack`
|
||||
|
||||
This class is based on [the `VideoTrack` standard][spec-videotrack] and can be used to create new video track objects.
|
||||
|
||||
Each property below is available as an option to the `VideoTrack` constructor.
|
||||
|
||||
#### `id`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-id)
|
||||
|
||||
A unique identifier for this track. Video.js will generate one if not given.
|
||||
|
||||
#### `kind`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind)
|
||||
|
||||
Video.js supports standard `kind` values for `VideoTracks`:
|
||||
|
||||
* `"alternative"`: A possible alternative to the main track.
|
||||
* `"captions"`: The main video track with burned in captions
|
||||
* `"main"`: The main video track.
|
||||
* `"sign"`: The main video track with added sign language overlay.
|
||||
* `"subtitles"`: The main video track with burned in subtitles.
|
||||
* `"commentary"`: The main video track with burned in commentary.
|
||||
* `""` (default): No explicit kind, or the kind given by the track's metadata is not recognized by the user agent.
|
||||
- `"alternative"`: A possible alternative to the main track.
|
||||
- `"captions"`: The main video track with burned in captions
|
||||
- `"main"`: The main video track.
|
||||
- `"sign"`: The main video track with added sign language overlay.
|
||||
- `"subtitles"`: The main video track with burned in subtitles.
|
||||
- `"commentary"`: The main video track with burned in commentary.
|
||||
- `""` (default): No explicit kind, or the kind given by the track's metadata is not recognized by the user agent.
|
||||
|
||||
#### `label`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-label)
|
||||
|
||||
The label for the track that will be shown to the user. For example, in a menu that lists the different captions available as alternate video tracks.
|
||||
|
||||
#### `language`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-language)
|
||||
|
||||
The valid [BCP 47](https://tools.ietf.org/html/bcp47) code for the language of the video track, e.g. `"en"` for English or `"es"` for Spanish.
|
||||
@@ -130,9 +103,9 @@ The valid [BCP 47](https://tools.ietf.org/html/bcp47) code for the language of t
|
||||
For supported language translations, please see the [languages folder (/lang)](https://github.com/videojs/video.js/tree/master/lang) folder located in the Video.js root and refer to the [languages guide](./languages.md) for more information on languages in Video.js.
|
||||
|
||||
#### `selected`
|
||||
|
||||
> [standard definition](https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-selected)
|
||||
|
||||
Whether or not this track should be playing. Only one video track may be selected at a time.
|
||||
|
||||
|
||||
[spec-videotrack]: https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
# Usage examples for the functions on videojs
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [videojs()](#videojs)
|
||||
* [options](#options)
|
||||
* [getComponent()](#getcomponent)
|
||||
* [registerComponent](#registercomponent)
|
||||
* [getTech()](#gettech)
|
||||
* [registerTech](#registertech)
|
||||
* [extend()](#extend)
|
||||
* [mergeOptions()](#mergeoptions)
|
||||
* [bind()](#bind)
|
||||
* [plugin()](#plugin)
|
||||
* [xhr](#xhr)
|
||||
|
||||
## `videojs()`
|
||||
|
||||
```js
|
||||
var myPlayer = videojs('my_video_id');
|
||||
```
|
||||
|
||||
## `options`
|
||||
|
||||
```js
|
||||
videojs.options.autoplay = true
|
||||
// -> all players will autoplay by default
|
||||
```
|
||||
|
||||
## `getComponent()`
|
||||
|
||||
```js
|
||||
var VjsButton = videojs.getComponent('Button');
|
||||
// Create a new instance of the component
|
||||
var myButton = new VjsButton(myPlayer);
|
||||
```
|
||||
|
||||
## `registerComponent()`
|
||||
|
||||
```js
|
||||
// Get a component to subclass
|
||||
var VjsButton = videojs.getComponent('Button');
|
||||
// Subclass the component (see 'extend' doc for more info)
|
||||
var MySpecialButton = videojs.extend(VjsButton, {});
|
||||
// Register the new component
|
||||
VjsButton.registerComponent('MySepcialButton', MySepcialButton);
|
||||
// (optionally) add the new component as a default player child
|
||||
myPlayer.addChild('MySepcialButton');
|
||||
```
|
||||
|
||||
## `getTech()`
|
||||
|
||||
```js
|
||||
var Html5 = videojs.getTech('Html5');
|
||||
// Create a new instance of the component
|
||||
var html5 = new Html5(options);
|
||||
```
|
||||
|
||||
## `registerTech()`
|
||||
|
||||
```js
|
||||
// get the Html5 Tech
|
||||
var Html5 = videojs.getTech('Html5');
|
||||
var MyTech = videojs.extend(Html5, {});
|
||||
// Register the new Tech
|
||||
VjsButton.registerTech('Tech', MyTech);
|
||||
var player = videojs('myplayer', {
|
||||
techOrder: ['myTech', 'html5']
|
||||
});
|
||||
```
|
||||
|
||||
## `extend()`
|
||||
|
||||
```js
|
||||
// Create a basic javascript 'class'
|
||||
function MyClass(name) {
|
||||
// Set a property at initialization
|
||||
this.myName = name;
|
||||
}
|
||||
// Create an instance method
|
||||
MyClass.prototype.sayMyName = function() {
|
||||
alert(this.myName);
|
||||
};
|
||||
// Subclass the exisitng class and change the name
|
||||
// when initializing
|
||||
var MySubClass = videojs.extend(MyClass, {
|
||||
constructor: function(name) {
|
||||
// Call the super class constructor for the subclass
|
||||
MyClass.call(this, name)
|
||||
}
|
||||
});
|
||||
// Create an instance of the new sub class
|
||||
var myInstance = new MySubClass('John');
|
||||
myInstance.sayMyName(); // -> should alert "John"
|
||||
```
|
||||
|
||||
## `mergeOptions()`
|
||||
|
||||
```js
|
||||
var defaultOptions = {
|
||||
foo: true,
|
||||
bar: {
|
||||
a: true,
|
||||
b: [1,2,3]
|
||||
}
|
||||
};
|
||||
var newOptions = {
|
||||
foo: false,
|
||||
bar: {
|
||||
b: [4,5,6]
|
||||
}
|
||||
};
|
||||
var result = videojs.mergeOptions(defaultOptions, newOptions);
|
||||
// result.foo = false;
|
||||
// result.bar.a = true;
|
||||
// result.bar.b = [4,5,6];
|
||||
```
|
||||
|
||||
## `bind()`
|
||||
|
||||
```js
|
||||
var someClass = function() {};
|
||||
var someObj = new someClass();
|
||||
videojs.bind(someObj, function() {
|
||||
// this will be the context of someObj here
|
||||
});
|
||||
```
|
||||
|
||||
## `plugin()`
|
||||
|
||||
**See the [plugin guide](plugins.md) in the docs for a more detailed example**
|
||||
|
||||
```js
|
||||
// Make a plugin that alerts when the player plays
|
||||
videojs.plugin('myPlugin', function(myPluginOptions) {
|
||||
myPluginOptions = myPluginOptions || {};
|
||||
|
||||
var player = this;
|
||||
var alertText = myPluginOptions.text || 'Player is playing!'
|
||||
|
||||
player.on('play', function() {
|
||||
alert(alertText);
|
||||
});
|
||||
});
|
||||
// USAGE EXAMPLES
|
||||
// EXAMPLE 1: New player with plugin options, call plugin immediately
|
||||
var player1 = videojs('idOne', {
|
||||
myPlugin: {
|
||||
text: 'Custom text!'
|
||||
}
|
||||
});
|
||||
// Click play
|
||||
// --> Should alert 'Custom text!'
|
||||
// EXAMPLE 3: New player, initialize plugin later
|
||||
var player3 = videojs('idThree');
|
||||
// Click play
|
||||
// --> NO ALERT
|
||||
// Click pause
|
||||
// Initialize plugin using the plugin function on the player instance
|
||||
player3.myPlugin({
|
||||
text: 'Plugin added later!'
|
||||
});
|
||||
// Click play
|
||||
// --> Should alert 'Plugin added later!'
|
||||
```
|
||||
|
||||
## `xhr()`
|
||||
|
||||
```js
|
||||
videojs.xhr({
|
||||
body: someJSONString,
|
||||
uri: "/foo",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}, function (err, resp, body) {
|
||||
// check resp.statusCode
|
||||
});
|
||||
```
|
||||
+31
-62
@@ -1,95 +1,64 @@
|
||||
# [Video.js][vjs-website] Documentation
|
||||
# [Video.js][vjs] Documentation
|
||||
|
||||
There are two categories of docs: [Guides](guides) and [API docs][api].
|
||||
There are two categories of docs: [Guides][guides] and [API docs][api].
|
||||
|
||||
Guides explain general topics and use cases (e.g. setup). API docs are automatically generated from the codebase and give specific details about functions, properties, and events.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Resolving Issues](#resolving-issues)
|
||||
* [FAQ](#faq)
|
||||
* [Troubleshooting](#troubleshooting)
|
||||
* [Guides](#guides)
|
||||
* [Getting Started](#getting-started)
|
||||
* [Setup](#setup)
|
||||
* [Player Workflows](#player-workflows)
|
||||
* [Options](#options)
|
||||
* [Tracks](#tracks)
|
||||
* [Customizing](#customizing)
|
||||
* [Skins](#skins)
|
||||
* [Plugins](#plugins)
|
||||
* [Components](#components)
|
||||
* [Tech](#tech)
|
||||
* [Languages](#languages)
|
||||
* [Hooks](#hooks)
|
||||
* [API Docs](#api-docs)
|
||||
|
||||
## Resolving Issues
|
||||
|
||||
### [FAQ](guides/faq.md)
|
||||
|
||||
The frequently asked questions for video.js.
|
||||
|
||||
### [Troubleshooting](guides/troubleshooting.md)
|
||||
|
||||
Troubleshooting help for video.js.
|
||||
|
||||
## [Guides](guides)
|
||||
## Guides
|
||||
|
||||
### Getting Started
|
||||
|
||||
#### [Setup](guides/setup.md)
|
||||
#### [Setup][guides-setup]
|
||||
|
||||
The setup guide covers all methods of setting up Video.js players.
|
||||
The setup guide covers all methods of setting up Video.js players. After mastering the basics, see the [player workflows guide][guides-workflow].
|
||||
|
||||
#### [Player Workflows](guides/player-workflows.md)
|
||||
|
||||
After mastering the basics of setup move over to this guide for some more advanced player workflows.
|
||||
|
||||
#### [Options](guides/options.md)
|
||||
#### [Options][guides-options]
|
||||
|
||||
There are a number of options that can be used to change how the player behaves, starting with the HTML5 media options like autoplay and preload, and expanding to Video.js specific options.
|
||||
|
||||
#### [Tracks](guides/tracks.md)
|
||||
#### [Tracks][guides-tracks]
|
||||
|
||||
Tracks are used for displaying text information over a video, selecting different audio tracks for a video, or selecting different video tracks.
|
||||
|
||||
### Customizing
|
||||
|
||||
#### [Skins](guides/skins.md)
|
||||
#### [Skins][guides-skins]
|
||||
|
||||
You can change the look of the player across playback technologies just by editing a CSS file. The skins documentation gives you a intro to how the HTML and CSS of the default skin is put together. For a list of skins you can check the [video.js wiki][skins-list].
|
||||
You can change the look of the player across playback technologies just by editing a CSS file. The skins documentation gives you a intro to how the HTML and CSS of the default skin is put together.
|
||||
|
||||
#### [Plugins](guides/plugins.md)
|
||||
#### [Plugins][guides-plugins]
|
||||
|
||||
You can package up interesting Video.js customizations and reuse them elsewhere. Find out how to build your own plugin or [use one created by someone else][plugins-list].
|
||||
You can package up interesting Video.js customizations and reuse them elsewhere. Find out how to build your own plugin or [use one created by someone else](https://github.com/videojs/video.js/wiki/Plugins).
|
||||
|
||||
#### [Components](guides/components.md)
|
||||
#### [Components][guides-components]
|
||||
|
||||
Video.js is built around a collection of components. These are the building blocks of the player UI.
|
||||
|
||||
#### [Tech](guides/tech.md)
|
||||
#### [Tech][guides-tech]
|
||||
|
||||
A "tech" is the shorthand we're using to describe any video playback technology - be it HTML5 video, Flash, . Basically anything that has a unique API to audio or video. Additional playback technologies can be added relatively easily.
|
||||
|
||||
#### [Languages](guides/languages.md)
|
||||
|
||||
Video.js has multi-language support! Follow this guide to see how you can contribute to and use languages.
|
||||
|
||||
#### [Hooks](guides/hooks.md)
|
||||
|
||||
A "hook" is functionality that wants to do when videojs creates a player. Right now only `beforesetup` and `setup` are supported. See the guide for more information on that.
|
||||
|
||||
## [API Docs][api]
|
||||
## API Docs
|
||||
|
||||
You can refer to the [full list of API docs][api], but the most relevant API doc is for the [Player][api-player].
|
||||
|
||||
[plugins-list]: http://videojs.com/plugins
|
||||
|
||||
[skins-list]: https://github.com/videojs/video.js/wiki/Skins
|
||||
|
||||
[api]: http://docs.videojs.com/docs/api/index.html
|
||||
|
||||
[api-player]: http://docs.videojs.com/docs/api/player.html
|
||||
|
||||
[vjs-website]: http://videojs.com
|
||||
[guides]: ./guides/
|
||||
[guides-api]: ./guides/api.md
|
||||
[guides-audio]: ./guides/audio.md
|
||||
[guides-components]: ./guides/components.md
|
||||
[guides-glossary]: ./guides/glossary.md
|
||||
[guides-languages]: ./guides/languages.md
|
||||
[guides-options]: ./guides/options.md
|
||||
[guides-plugins]: ./guides/plugins.md
|
||||
[guides-removing]: ./guides/removing.md
|
||||
[guides-setup]: ./guides/setup.md
|
||||
[guides-skins]: ./guides/skins.md
|
||||
[guides-tech]: ./guides/tech.md
|
||||
[guides-text-tracks]: ./guides/text-tracks.md
|
||||
[guides-tracks]: ./guides/tracks.md
|
||||
[guides-video-tracks]: ./guides/video-tracks.md
|
||||
[guides-workflow]: ./guides/player-workflows.md
|
||||
[vjs]: http://videojs.com
|
||||
|
||||
+24
-33
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "video.js",
|
||||
"description": "An HTML5 and Flash video player with a common API and skin for both.",
|
||||
"version": "5.20.4",
|
||||
"version": "5.14.0",
|
||||
"main": "./es5/video.js",
|
||||
"style": "./dist/video-js.css",
|
||||
"copyright": "Copyright Brightcove, Inc. <https://www.brightcove.com/>",
|
||||
@@ -22,13 +22,10 @@
|
||||
"clean": "grunt clean",
|
||||
"grunt": "grunt",
|
||||
"lint": "vjsstandard",
|
||||
"start": "grunt dev",
|
||||
"start": "grunt watchAll",
|
||||
"test": "grunt test",
|
||||
"docs": "npm run docs:lint && npm run docs:api",
|
||||
"docs:api": "jsdoc -r src/js -d docs/api -c .jsdoc.json",
|
||||
"docs:lint": "remark -- './**/*.md'",
|
||||
"docs:fix": "remark --output -- './**/*.md'",
|
||||
"babel": "babel src/js -d es5"
|
||||
"toc": "doctoc",
|
||||
"docs": "jsdoc -r src/js -d docs/api -c .jsdoc.json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -41,12 +38,11 @@
|
||||
"tsml": "1.0.1",
|
||||
"videojs-font": "2.0.0",
|
||||
"videojs-ie8": "1.1.2",
|
||||
"videojs-swf": "5.4.1",
|
||||
"videojs-vtt.js": "0.12.4",
|
||||
"xhr": "2.2.2"
|
||||
"videojs-swf": "5.1.0",
|
||||
"videojs-vtt.js": "0.12.1",
|
||||
"xhr": "2.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"aliasify": "^2.1.0",
|
||||
"babel-cli": "^6.11.4",
|
||||
"babel-plugin-inline-json": "^1.1.1",
|
||||
"babel-plugin-transform-es3-member-expression-literals": "^6.8.0",
|
||||
@@ -57,41 +53,41 @@
|
||||
"babelify": "^7.3.0",
|
||||
"blanket": "^1.1.6",
|
||||
"browserify-derequire": "^0.9.4",
|
||||
"browserify-istanbul": "^2.0.0",
|
||||
"browserify-istanbul": "^0.2.1",
|
||||
"browserify-versionify": "^1.0.4",
|
||||
"bundle-collapser": "^1.2.1",
|
||||
"chg": "^0.3.2",
|
||||
"conventional-changelog-cli": "^1.2.0",
|
||||
"conventional-changelog-videojs": "^3.0.0",
|
||||
"doctoc": "^1.2.0",
|
||||
"es5-shim": "^4.1.3",
|
||||
"es6-shim": "^0.35.1",
|
||||
"ghooks": "^1.3.2",
|
||||
"grunt": "^0.4.5",
|
||||
"gkatsev-grunt-sass": "^1.1.1",
|
||||
"grunt": "^0.4.4",
|
||||
"grunt-accessibility": "^5.0.0",
|
||||
"grunt-babel": "^6.0.0",
|
||||
"grunt-banner": "^0.6.0",
|
||||
"grunt-browserify": "5.0.0",
|
||||
"grunt-cli": "~1.2.0",
|
||||
"grunt-banner": "^0.4.0",
|
||||
"grunt-browserify": "3.5.1",
|
||||
"grunt-cli": "~0.1.13",
|
||||
"grunt-concurrent": "^2.3.1",
|
||||
"grunt-contrib-clean": "^1.0.0",
|
||||
"grunt-contrib-concat": "^1.0.1",
|
||||
"grunt-contrib-connect": "~1.0.2",
|
||||
"grunt-contrib-copy": "^1.0.0",
|
||||
"grunt-contrib-clean": "~0.4.0a",
|
||||
"grunt-contrib-concat": "^0.5.1",
|
||||
"grunt-contrib-connect": "~0.7.1",
|
||||
"grunt-contrib-copy": "^0.8.0",
|
||||
"grunt-contrib-cssmin": "~1.0.2",
|
||||
"grunt-contrib-uglify": "^2.0.0",
|
||||
"grunt-contrib-watch": "~1.0.0",
|
||||
"grunt-contrib-watch": "~0.1.4",
|
||||
"grunt-coveralls": "^1.0.0",
|
||||
"grunt-fastly": "^0.1.3",
|
||||
"grunt-github-releaser": "^0.1.17",
|
||||
"grunt-karma": "^2.0.0",
|
||||
"grunt-sass": "^2.0.0",
|
||||
"grunt-shell": "^2.0.0",
|
||||
"grunt-version": "~1.1.1",
|
||||
"grunt-version": "~0.3.0",
|
||||
"grunt-videojs-languages": "0.0.4",
|
||||
"grunt-zip": "0.17.1",
|
||||
"istanbul": "^0.4.5",
|
||||
"grunt-zip": "0.10.2",
|
||||
"jsdoc": "^3.4.2",
|
||||
"karma": "1.3.0",
|
||||
"karma": "^1.2.0",
|
||||
"karma-browserify": "^5.1.0",
|
||||
"karma-browserstack-launcher": "^1.0.1",
|
||||
"karma-chrome-launcher": "^2.0.0",
|
||||
@@ -108,17 +104,12 @@
|
||||
"markdown-table": "^1.0.0",
|
||||
"npm-run": "^4.1.0",
|
||||
"proxyquireify": "^3.0.0",
|
||||
"qunitjs": "1.23.1",
|
||||
"remark-cli": "^2.1.0",
|
||||
"remark-lint": "^5.2.0",
|
||||
"remark-toc": "^3.1.0",
|
||||
"remark-validate-links": "^5.0.0",
|
||||
"shelljs": "^0.7.5",
|
||||
"qunitjs": "^1.23.1",
|
||||
"sinon": "^1.16.1",
|
||||
"time-grunt": "^1.1.1",
|
||||
"uglify-js": "~2.7.3",
|
||||
"videojs-doc-generator": "0.0.1",
|
||||
"videojs-standard": "^6.0.1",
|
||||
"videojs-standard": "^5.2.0",
|
||||
"webpack": "^1.13.2"
|
||||
},
|
||||
"vjsstandard": {
|
||||
|
||||
@@ -50,8 +50,3 @@
|
||||
.vjs-error .vjs-big-play-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Show big play button if video is paused and .vjs-show-big-play-button-on-pause is set on video element
|
||||
.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
// Avoiding helvetica: issue #376
|
||||
font-family: $text-font-family;
|
||||
|
||||
@include user-select(none);
|
||||
|
||||
// Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when
|
||||
// checking fullScreenEnabled.
|
||||
&:-moz-full-screen { position: absolute; }
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Hide the poster when controls are disabled because it's clickable
|
||||
// and the native poster can take over
|
||||
.vjs-controls-disabled .vjs-poster {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Hide the poster when native controls are used otherwise it covers them
|
||||
.vjs-using-native-controls .vjs-poster {
|
||||
display: none;
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
.video-js .vjs-progress-holder .vjs-load-progress div {
|
||||
position: absolute;
|
||||
display: block;
|
||||
height: 100%;
|
||||
height: 0.3em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
// updated by javascript during playback
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
padding: 0;
|
||||
margin: 0 0.45em 0 0.45em;
|
||||
|
||||
@include user-select(none);
|
||||
|
||||
@include background-color-with-alpha($secondary-background-color, $secondary-background-transparency);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,13 +11,6 @@ import Component from './component.js';
|
||||
* @extends Button
|
||||
*/
|
||||
class BigPlayButton extends Button {
|
||||
constructor(player, options) {
|
||||
super(player, options);
|
||||
|
||||
this.mouseused_ = false;
|
||||
|
||||
this.on('mousedown', this.handleMouseDown);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the default DOM `className`.
|
||||
@@ -41,40 +34,7 @@ class BigPlayButton extends Button {
|
||||
* @listens click
|
||||
*/
|
||||
handleClick(event) {
|
||||
const playPromise = this.player_.play();
|
||||
|
||||
// exit early if clicked via the mouse
|
||||
if (this.mouseused_ && event.clientX && event.clientY) {
|
||||
return;
|
||||
}
|
||||
|
||||
const cb = this.player_.getChild('controlBar');
|
||||
const playToggle = cb && cb.getChild('playToggle');
|
||||
|
||||
if (!playToggle) {
|
||||
this.player_.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
const playFocus = () => playToggle.focus();
|
||||
|
||||
if (playPromise && playPromise.then) {
|
||||
const ignoreRejectedPlayPromise = () => {};
|
||||
|
||||
playPromise.then(playFocus, ignoreRejectedPlayPromise);
|
||||
} else {
|
||||
this.setTimeout(playFocus, 1);
|
||||
}
|
||||
}
|
||||
|
||||
handleKeyPress(event) {
|
||||
this.mouseused_ = false;
|
||||
|
||||
super.handleKeyPress(event);
|
||||
}
|
||||
|
||||
handleMouseDown(event) {
|
||||
this.mouseused_ = true;
|
||||
this.player_.play();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -92,6 +92,9 @@ class Button extends ClickableComponent {
|
||||
/**
|
||||
* Enable the `Button` element so that it can be activated or clicked. Use this with
|
||||
* {@link Button#disable}.
|
||||
*
|
||||
* @return {Component}
|
||||
* Returns itself; method is chainable.
|
||||
*/
|
||||
enable() {
|
||||
super.enable();
|
||||
@@ -101,6 +104,9 @@ class Button extends ClickableComponent {
|
||||
/**
|
||||
* Enable the `Button` element so that it cannot be activated or clicked. Use this with
|
||||
* {@link Button#enable}.
|
||||
*
|
||||
* @return {Component}
|
||||
* Returns itself; method is chainable.
|
||||
*/
|
||||
disable() {
|
||||
super.disable();
|
||||
|
||||
@@ -121,11 +121,7 @@ class ClickableComponent extends Component {
|
||||
|
||||
this.controlText_ = text;
|
||||
this.controlTextEl_.innerHTML = localizedText;
|
||||
|
||||
if (!this.nonIconControl) {
|
||||
// Set title attribute if only an icon is shown
|
||||
el.setAttribute('title', localizedText);
|
||||
}
|
||||
el.setAttribute('title', localizedText);
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -152,10 +148,8 @@ class ClickableComponent extends Component {
|
||||
if (typeof this.tabIndex_ !== 'undefined') {
|
||||
this.el_.setAttribute('tabIndex', this.tabIndex_);
|
||||
}
|
||||
this.off(['tap', 'click'], this.handleClick);
|
||||
this.off('focus', this.handleFocus);
|
||||
this.off('blur', this.handleBlur);
|
||||
this.on(['tap', 'click'], this.handleClick);
|
||||
this.on('tap', this.handleClick);
|
||||
this.on('click', this.handleClick);
|
||||
this.on('focus', this.handleFocus);
|
||||
this.on('blur', this.handleBlur);
|
||||
return this;
|
||||
@@ -173,7 +167,8 @@ class ClickableComponent extends Component {
|
||||
if (typeof this.tabIndex_ !== 'undefined') {
|
||||
this.el_.removeAttribute('tabIndex');
|
||||
}
|
||||
this.off(['tap', 'click'], this.handleClick);
|
||||
this.off('tap', this.handleClick);
|
||||
this.off('click', this.handleClick);
|
||||
this.off('focus', this.handleFocus);
|
||||
this.off('blur', this.handleBlur);
|
||||
return this;
|
||||
|
||||
+269
-30
@@ -18,6 +18,33 @@ import mergeOptions from './utils/merge-options.js';
|
||||
* in the DOM. They can be children of other components, and can have
|
||||
* children themselves.
|
||||
*
|
||||
* Creating a button component.
|
||||
* ``` js
|
||||
* // adding a button to the player
|
||||
* var player = videojs('some-video-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var button = new Component(player);
|
||||
*
|
||||
* console.log(button.el());
|
||||
* ```
|
||||
*
|
||||
* Above code will log this html.
|
||||
* ```html
|
||||
* <div class="video-js">
|
||||
* <div class="vjs-button">Button</div>
|
||||
* </div>
|
||||
* ```
|
||||
*
|
||||
* Adding a button to the player
|
||||
* ``` js
|
||||
* // adding a button to the player
|
||||
* var player = videojs('some-video-id');
|
||||
* var button = player.addChild('button');
|
||||
*
|
||||
* console.log(button.el());
|
||||
* // will have the same html result as the previous example
|
||||
* ```
|
||||
*
|
||||
* Components can also use methods from {@link EventTarget}
|
||||
*/
|
||||
class Component {
|
||||
@@ -37,12 +64,7 @@ class Component {
|
||||
* The `Player` that this class should be attached to.
|
||||
*
|
||||
* @param {Object} [options]
|
||||
* The key/value store of player options.
|
||||
#
|
||||
* @param {Object[]} [options.children]
|
||||
* An array of children objects to intialize this component with. Children objects have
|
||||
* a name property that will be used if more than one component of the same type needs to be
|
||||
* added.
|
||||
* The key/value store of player options.
|
||||
*
|
||||
* @param {Component~ReadyCallback} [ready]
|
||||
* Function that gets called when the `Component` is ready.
|
||||
@@ -160,6 +182,41 @@ class Component {
|
||||
* > Note: When both `obj` and `options` contain properties whose values are objects.
|
||||
* The two properties get merged using {@link module:mergeOptions}
|
||||
*
|
||||
* Example
|
||||
* ```js
|
||||
* var player = videojs('some-vid-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var component = new Component(player, {
|
||||
* optionSet: {
|
||||
* childOne: {foo: 'bar', asdf: 'fdsa'},
|
||||
* childTwo: {},
|
||||
* childThree: {}
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* const newOptions = {
|
||||
* optionSet: {
|
||||
* childOne: {foo: 'baz', abc: '123'}
|
||||
* childTwo: null,
|
||||
* childFour: {}
|
||||
* }
|
||||
* };
|
||||
*
|
||||
* console.log(component.options(newOptions));
|
||||
* ```
|
||||
*
|
||||
* Result
|
||||
* ```js
|
||||
* {
|
||||
* optionSet: {
|
||||
* childOne: {foo: 'baz', asdf: 'fdsa', abc: '123' },
|
||||
* childTwo: null,
|
||||
* childThree: {},
|
||||
* childFour: {}
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @param {Object} obj
|
||||
* The object that contains new options.
|
||||
*
|
||||
@@ -318,6 +375,37 @@ class Component {
|
||||
/**
|
||||
* Add a child `Component` inside the current `Component`.
|
||||
*
|
||||
* Example:
|
||||
* ```js
|
||||
* var player = videojs('some-vid-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var myComponent = new Component(player);
|
||||
*
|
||||
* console.log(myComponent.el());
|
||||
* // -> <div class='my-component'></div>
|
||||
* console.log(myComponent.children());
|
||||
* // [empty array]
|
||||
*
|
||||
* var myButton = myComponent.addChild('MyButton');
|
||||
*
|
||||
* console.log(myComponent.el());
|
||||
* // -> <div class='my-component'><div class="my-button">myButton<div></div>
|
||||
* console.log(myComponent.children());
|
||||
* // -> myButton === myComponent.children()[0];
|
||||
* ```
|
||||
*
|
||||
* Pass in options for child constructors and options for children of the child.
|
||||
* ```js
|
||||
* var player = videojs('some-vid-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var myComponent = new Component(player);
|
||||
* var myButton = myComponent.addChild('MyButton', {
|
||||
* text: 'Press Me',
|
||||
* buttonChildExample: {
|
||||
* buttonChildOption: true
|
||||
* }
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @param {string|Component} child
|
||||
* The name or instance of a child to add.
|
||||
@@ -392,7 +480,7 @@ class Component {
|
||||
|
||||
// If a name wasn't used to create the component, check if we can use the
|
||||
// name function of the component
|
||||
componentName = componentName || (component.name && toTitleCase(component.name()));
|
||||
componentName = componentName || (component.name && component.name());
|
||||
|
||||
if (componentName) {
|
||||
this.childNameIndex_[componentName] = component;
|
||||
@@ -453,6 +541,48 @@ class Component {
|
||||
|
||||
/**
|
||||
* Add and initialize default child `Component`s based upon options.
|
||||
*
|
||||
* Example.
|
||||
* ```js
|
||||
* var MyComponent = videojs.extend(videojs.getComponent('Component'));
|
||||
* // when an instance of MyComponent is created, all children in options
|
||||
* // will be added to the instance by their name strings and options
|
||||
* MyComponent.prototype.options_ = {
|
||||
* children: [
|
||||
* 'myChildComponent'
|
||||
* ],
|
||||
* myChildComponent: {
|
||||
* myChildOption: true
|
||||
* }
|
||||
* };
|
||||
*
|
||||
* // Or when creating the component
|
||||
* var player = videojs('some-player-id');
|
||||
* var myComp = new MyComponent(player, {
|
||||
* children: [
|
||||
* 'myChildComponent'
|
||||
* ],
|
||||
* myChildComponent: {
|
||||
* myChildOption: true
|
||||
* }
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* The children option can also be an array of child options objects
|
||||
* (that also include a 'name' key). This will get used if you have two child
|
||||
* components of the same type that need different options.
|
||||
* ```js
|
||||
* // MyComponent is from the above example
|
||||
* var myComp = new MyComponent(player, {
|
||||
* children: ['button', {
|
||||
* name: 'button',
|
||||
* someOtherOption: true
|
||||
* }, {
|
||||
* name: 'button',
|
||||
* someOtherOption: false
|
||||
* }]
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
initChildren() {
|
||||
const children = this.options_.children;
|
||||
@@ -566,17 +696,46 @@ class Component {
|
||||
/**
|
||||
* Add an `event listener` to this `Component`s element.
|
||||
*
|
||||
* ```js
|
||||
* var player = videojs('some-player-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var myComponent = new Component(player);
|
||||
* var myFunc = function() {
|
||||
* var myComponent = this;
|
||||
* console.log('myFunc called');
|
||||
* };
|
||||
*
|
||||
* myComponent.on('eventType', myFunc);
|
||||
* myComponent.trigger('eventType');
|
||||
* // logs 'myFunc called'
|
||||
* ```
|
||||
*
|
||||
* The context of `myFunc` will be `myComponent` unless it is bound. You can add
|
||||
* a listener to another element or component.
|
||||
* ```js
|
||||
* var otherComponent = new Component(player);
|
||||
*
|
||||
* // myComponent/myFunc is from the above example
|
||||
* myComponent.on(otherComponent.el(), 'eventName', myFunc);
|
||||
* myComponent.on(otherComponent, 'eventName', myFunc);
|
||||
*
|
||||
* otherComponent.trigger('eventName');
|
||||
* // logs 'myFunc called' twice
|
||||
* ```
|
||||
*
|
||||
* The benefit of using this over the following:
|
||||
* - `VjsEvents.on(otherElement, 'eventName', myFunc)`
|
||||
* - `otherComponent.on('eventName', myFunc)`
|
||||
*
|
||||
* 1. Is that the listeners will get cleaned up when either component gets disposed.
|
||||
* 1. It will also bind `myComponent` as the context of `myFunc`.
|
||||
* Is that the listeners will get cleaned up when either component gets disposed.
|
||||
* It will also bind `myComponent` as the context of `myFunc`.
|
||||
* > NOTE: If you remove the element from the DOM that has used `on` you need to
|
||||
* clean up references using: `myComponent.trigger(el, 'dispose')`
|
||||
* This will also allow the browser to garbage collect it. In special
|
||||
* cases such as with `window` and `document`, which are both permanent,
|
||||
* this is not necessary.
|
||||
* clean up references using:
|
||||
*
|
||||
* `myComponent.trigger(el, 'dispose')`
|
||||
*
|
||||
* This will also allow the browser to garbage collect it. In special
|
||||
* cases such as with `window` and `document`, which are both permanent,
|
||||
* this is not necessary.
|
||||
*
|
||||
* @param {string|Component|string[]} [first]
|
||||
* The event name, and array of event names, or another `Component`.
|
||||
@@ -638,8 +797,47 @@ class Component {
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an event listener from this `Component`s element. If the second argument is
|
||||
* exluded all listeners for the type passed in as the first argument will be removed.
|
||||
* Remove an event listener from this `Component`s element.
|
||||
* ```js
|
||||
* var player = videojs('some-player-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var myComponent = new Component(player);
|
||||
* var myFunc = function() {
|
||||
* var myComponent = this;
|
||||
* console.log('myFunc called');
|
||||
* };
|
||||
* myComponent.on('eventType', myFunc);
|
||||
* myComponent.trigger('eventType');
|
||||
* // logs 'myFunc called'
|
||||
*
|
||||
* myComponent.off('eventType', myFunc);
|
||||
* myComponent.trigger('eventType');
|
||||
* // does nothing
|
||||
* ```
|
||||
*
|
||||
* If myFunc gets excluded, ALL listeners for the event type will get removed. If
|
||||
* eventType gets excluded, ALL listeners will get removed from the component.
|
||||
* You can use `off` to remove listeners that get added to other elements or
|
||||
* components using:
|
||||
*
|
||||
* `myComponent.on(otherComponent...`
|
||||
*
|
||||
* In this case both the event type and listener function are **REQUIRED**.
|
||||
*
|
||||
* ```js
|
||||
* var otherComponent = new Component(player);
|
||||
*
|
||||
* // myComponent/myFunc is from the above example
|
||||
* myComponent.on(otherComponent.el(), 'eventName', myFunc);
|
||||
* myComponent.on(otherComponent, 'eventName', myFunc);
|
||||
*
|
||||
* otherComponent.trigger('eventName');
|
||||
* // logs 'myFunc called' twice
|
||||
* myComponent.off(ootherComponent.el(), 'eventName', myFunc);
|
||||
* myComponent.off(otherComponent, 'eventName', myFunc);
|
||||
* otherComponent.trigger('eventName');
|
||||
* // does nothing
|
||||
* ```
|
||||
*
|
||||
* @param {string|Component|string[]} [first]
|
||||
* The event name, and array of event names, or another `Component`.
|
||||
@@ -683,6 +881,38 @@ class Component {
|
||||
|
||||
/**
|
||||
* Add an event listener that gets triggered only once and then gets removed.
|
||||
* ```js
|
||||
* var player = videojs('some-player-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var myComponent = new Component(player);
|
||||
* var myFunc = function() {
|
||||
* var myComponent = this;
|
||||
* console.log('myFunc called');
|
||||
* };
|
||||
* myComponent.one('eventName', myFunc);
|
||||
* myComponent.trigger('eventName');
|
||||
* // logs 'myFunc called'
|
||||
*
|
||||
* myComponent.trigger('eventName');
|
||||
* // does nothing
|
||||
*
|
||||
* ```
|
||||
*
|
||||
* You can also add a listener to another element or component that will get
|
||||
* triggered only once.
|
||||
* ```js
|
||||
* var otherComponent = new Component(player);
|
||||
*
|
||||
* // myComponent/myFunc is from the above example
|
||||
* myComponent.one(otherComponent.el(), 'eventName', myFunc);
|
||||
* myComponent.one(otherComponent, 'eventName', myFunc);
|
||||
*
|
||||
* otherComponent.trigger('eventName');
|
||||
* // logs 'myFunc called' twice
|
||||
*
|
||||
* otherComponent.trigger('eventName');
|
||||
* // does nothing
|
||||
* ```
|
||||
*
|
||||
* @param {string|Component|string[]} [first]
|
||||
* The event name, and array of event names, or another `Component`.
|
||||
@@ -722,6 +952,29 @@ class Component {
|
||||
/**
|
||||
* Trigger an event on an element.
|
||||
*
|
||||
* ```js
|
||||
* var player = videojs('some-player-id');
|
||||
* var Component = videojs.getComponent('Component');
|
||||
* var myComponent = new Component(player);
|
||||
* var myFunc = function(data) {
|
||||
* var myComponent = this;
|
||||
* console.log('myFunc called');
|
||||
* console.log(data);
|
||||
* };
|
||||
* myComponent.one('eventName', myFunc);
|
||||
* myComponent.trigger('eventName');
|
||||
* // logs 'myFunc called' and 'undefined'
|
||||
*
|
||||
* myComponent.trigger({'type':'eventName'});
|
||||
* // logs 'myFunc called' and 'undefined'
|
||||
*
|
||||
* myComponent.trigger('eventName', {data: 'some data'});
|
||||
* // logs 'myFunc called' and "{data: 'some data'}"
|
||||
*
|
||||
* myComponent.trigger({'type':'eventName'}, {data: 'some data'});
|
||||
* // logs 'myFunc called' and "{data: 'some data'}"
|
||||
* ```
|
||||
*
|
||||
* @param {EventTarget~Event|Object|string} event
|
||||
* The event name, and Event, or an event-like object with a type attribute
|
||||
* set to the event name.
|
||||
@@ -1232,20 +1485,6 @@ class Component {
|
||||
return this.currentDimension('height');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the focus to this component
|
||||
*/
|
||||
focus() {
|
||||
this.el_.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the focus from this component
|
||||
*/
|
||||
blur() {
|
||||
this.el_.blur();
|
||||
}
|
||||
|
||||
/**
|
||||
* Emit a 'tap' events when touch event support gets detected. This gets used to
|
||||
* support toggling the controls through a tap on the video. They get enabled
|
||||
|
||||
@@ -49,9 +49,6 @@ class AudioTrackButton extends TrackButton {
|
||||
* An array of menu items
|
||||
*/
|
||||
createItems(items = []) {
|
||||
// if there's only one audio track, there no point in showing it
|
||||
this.hideThreshold_ = 1;
|
||||
|
||||
const tracks = this.player_.audioTracks && this.player_.audioTracks();
|
||||
|
||||
if (!tracks) {
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário