From 442696cfc2be6ac51b2cf63d1256abc519f57668 Mon Sep 17 00:00:00 2001 From: Steve Heffernan Date: Fri, 30 Sep 2011 17:28:43 -0700 Subject: [PATCH] Version 3.0 BETA --- README.markdown | 215 - README.md | 153 + demo-subtitles.srt | 13 - demo.html | 100 +- dev/build/combine_sources.sh | 36 + dev/combine_sources.sh | 13 - dev/compare/compare.css | 6 + dev/compare/compare.html | 102 + dev/compare/compare.js | 55 + dev/decisions.txt | 8 + dev/demo-subtitles.srt | 13 + dev/design/Icon Design.png | Bin 0 -> 86601 bytes dev/design/skin.old.css | 190 + dev/design/video-js.css | 307 ++ dev/design/video-js.png | Bin 0 -> 7460 bytes dev/dev.html | 62 + dev/flash/VideoJS.swf | Bin 0 -> 9388 bytes dev/flash/swfobject.js | 6 + dev/flowplayer/flowplayer-3.2.4.min.js | 24 - dev/flowplayer/test.html | 114 - dev/map/coords.srt | 13 - dev/map/map.html | 92 - dev/src/_begin.js | 22 +- dev/src/api.js | 263 +- dev/src/autoload.js | 37 + dev/src/behaviors.js | 579 --- dev/src/behaviors/behaviors.js | 310 ++ dev/src/behaviors/seekBar.js | 213 + dev/src/behaviors/texttrackdisplays.js | 43 + dev/src/behaviors/volume.js | 177 + dev/src/controls/bar.js | 153 + dev/src/controls/bigPlay.js | 52 + dev/src/controls/controls.html | 157 + dev/src/controls/main.js | 133 + dev/src/controls/subtitlesBox.js | 22 + dev/src/core.js | 381 ++ dev/src/ecma.js | 217 + dev/src/events.js | 287 ++ dev/src/flash.js | 77 - dev/src/html5.js | 474 -- dev/src/json.js | 54 + dev/src/lib.js | 324 +- dev/src/log.js | 15 + dev/src/main.js | 306 -- .../tech/flowplayer.js} | 136 +- dev/src/tech/h5swf.js | 152 + dev/src/tech/html5.js | 157 + dev/src/tracks.js | 131 + dev/src/video-js.jquery.js | 24 - dev/test.html | 150 - dev/test/qunit/.gitignore | 7 + dev/test/qunit/README.md | 27 + dev/test/qunit/addons/canvas/README.md | 16 + dev/test/qunit/addons/canvas/canvas-test.js | 76 + dev/test/qunit/addons/canvas/canvas.html | 19 + dev/test/qunit/addons/canvas/qunit-canvas.js | 6 + dev/test/qunit/addons/close-enough/README.md | 17 + .../addons/close-enough/close-enough-test.js | 37 + .../addons/close-enough/close-enough.html | 18 + .../addons/close-enough/qunit-close-enough.js | 32 + dev/test/qunit/addons/composite/README.md | 7 + .../addons/composite/composite-demo-test.html | 33 + .../addons/composite/composite-test.html | 20 + .../qunit/addons/composite/composite-test.js | 159 + .../addons/composite/dummy-qunit-test.html | 19 + .../addons/composite/dummy-same-test.html | 19 + dev/test/qunit/addons/composite/index.html | 35 + .../addons/composite/qunit-composite.css | 13 + .../qunit/addons/composite/qunit-composite.js | 82 + dev/test/qunit/addons/step/README.md | 18 + dev/test/qunit/addons/step/qunit-step.js | 25 + dev/test/qunit/addons/step/step-test.js | 13 + dev/test/qunit/addons/step/step.html | 19 + dev/test/qunit/package.json | 27 + dev/test/qunit/qunit/qunit.css | 226 + dev/test/qunit/qunit/qunit.js | 1552 ++++++ dev/test/qunit/test/headless.html | 24 + dev/test/qunit/test/index.html | 19 + dev/test/qunit/test/logs.html | 17 + dev/test/qunit/test/logs.js | 153 + dev/test/qunit/test/same.js | 1421 ++++++ dev/test/qunit/test/test.js | 471 ++ dev/test/test.html | 56 + dev/test/test.js | 154 + docs/API.markdown | 214 - docs/api.md | 156 + docs/{behaviors.markdown => behaviors.md} | 3 - docs/{glossary.markdown => glossary.md} | 0 docs/options.md | 2 + docs/setup.md | 29 + docs/tech.md | 44 + docs/timerange.md | 2 + docs/video-tag.md | 8 + skins/hu.css | 116 - skins/tube.css | 111 - skins/vim.css | 89 - video-js.css | 458 +- video-js.png | Bin 0 -> 7460 bytes video-js.swf | Bin 0 -> 9388 bytes video.js | 4193 +++++++++++------ 100 files changed, 12239 insertions(+), 4591 deletions(-) delete mode 100644 README.markdown create mode 100644 README.md delete mode 100755 demo-subtitles.srt create mode 100755 dev/build/combine_sources.sh delete mode 100755 dev/combine_sources.sh create mode 100644 dev/compare/compare.css create mode 100644 dev/compare/compare.html create mode 100644 dev/compare/compare.js create mode 100644 dev/decisions.txt create mode 100644 dev/demo-subtitles.srt create mode 100644 dev/design/Icon Design.png create mode 100644 dev/design/skin.old.css create mode 100644 dev/design/video-js.css create mode 100644 dev/design/video-js.png create mode 100644 dev/dev.html create mode 100644 dev/flash/VideoJS.swf create mode 100644 dev/flash/swfobject.js delete mode 100644 dev/flowplayer/flowplayer-3.2.4.min.js delete mode 100644 dev/flowplayer/test.html delete mode 100755 dev/map/coords.srt delete mode 100644 dev/map/map.html create mode 100644 dev/src/autoload.js delete mode 100644 dev/src/behaviors.js create mode 100644 dev/src/behaviors/behaviors.js create mode 100644 dev/src/behaviors/seekBar.js create mode 100644 dev/src/behaviors/texttrackdisplays.js create mode 100644 dev/src/behaviors/volume.js create mode 100644 dev/src/controls/bar.js create mode 100644 dev/src/controls/bigPlay.js create mode 100644 dev/src/controls/controls.html create mode 100644 dev/src/controls/main.js create mode 100644 dev/src/controls/subtitlesBox.js create mode 100644 dev/src/core.js create mode 100644 dev/src/ecma.js create mode 100644 dev/src/events.js delete mode 100644 dev/src/flash.js delete mode 100644 dev/src/html5.js create mode 100644 dev/src/json.js create mode 100644 dev/src/log.js delete mode 100644 dev/src/main.js rename dev/{flowplayer/video-js.flowplayer.js => src/tech/flowplayer.js} (84%) create mode 100644 dev/src/tech/h5swf.js create mode 100644 dev/src/tech/html5.js create mode 100644 dev/src/tracks.js delete mode 100644 dev/src/video-js.jquery.js delete mode 100644 dev/test.html create mode 100755 dev/test/qunit/.gitignore create mode 100755 dev/test/qunit/README.md create mode 100755 dev/test/qunit/addons/canvas/README.md create mode 100755 dev/test/qunit/addons/canvas/canvas-test.js create mode 100755 dev/test/qunit/addons/canvas/canvas.html create mode 100755 dev/test/qunit/addons/canvas/qunit-canvas.js create mode 100755 dev/test/qunit/addons/close-enough/README.md create mode 100755 dev/test/qunit/addons/close-enough/close-enough-test.js create mode 100755 dev/test/qunit/addons/close-enough/close-enough.html create mode 100755 dev/test/qunit/addons/close-enough/qunit-close-enough.js create mode 100755 dev/test/qunit/addons/composite/README.md create mode 100755 dev/test/qunit/addons/composite/composite-demo-test.html create mode 100755 dev/test/qunit/addons/composite/composite-test.html create mode 100755 dev/test/qunit/addons/composite/composite-test.js create mode 100755 dev/test/qunit/addons/composite/dummy-qunit-test.html create mode 100755 dev/test/qunit/addons/composite/dummy-same-test.html create mode 100755 dev/test/qunit/addons/composite/index.html create mode 100755 dev/test/qunit/addons/composite/qunit-composite.css create mode 100755 dev/test/qunit/addons/composite/qunit-composite.js create mode 100755 dev/test/qunit/addons/step/README.md create mode 100755 dev/test/qunit/addons/step/qunit-step.js create mode 100755 dev/test/qunit/addons/step/step-test.js create mode 100755 dev/test/qunit/addons/step/step.html create mode 100755 dev/test/qunit/package.json create mode 100755 dev/test/qunit/qunit/qunit.css create mode 100755 dev/test/qunit/qunit/qunit.js create mode 100755 dev/test/qunit/test/headless.html create mode 100755 dev/test/qunit/test/index.html create mode 100755 dev/test/qunit/test/logs.html create mode 100755 dev/test/qunit/test/logs.js create mode 100755 dev/test/qunit/test/same.js create mode 100755 dev/test/qunit/test/test.js create mode 100644 dev/test/test.html create mode 100644 dev/test/test.js delete mode 100644 docs/API.markdown create mode 100644 docs/api.md rename docs/{behaviors.markdown => behaviors.md} (91%) rename docs/{glossary.markdown => glossary.md} (100%) create mode 100644 docs/options.md create mode 100644 docs/setup.md create mode 100644 docs/tech.md create mode 100644 docs/timerange.md create mode 100644 docs/video-tag.md delete mode 100644 skins/hu.css delete mode 100644 skins/tube.css delete mode 100644 skins/vim.css create mode 100644 video-js.png create mode 100644 video-js.swf diff --git a/README.markdown b/README.markdown deleted file mode 100644 index 471b00671e..0000000000 --- a/README.markdown +++ /dev/null @@ -1,215 +0,0 @@ -VideoJS - [HTML5 Video Player](http://videojs.com) -================================================== -Version 2.0.2 - -View [VideoJS.com](http://videojs.com) for a demo and overview. - -VideoJS is an HTML5 video player that uses the HTML5 video tag built into modern browsers, and uses javascript to add custom controls, new functionality, and to fix cross browser bugs. - -The base of VideoJS is Kroc Camen's [Video for Everybody](http://camendesign.com/code/video_for_everybody), which is a video embed code that falls back to a Flash video player or download links for browsers and devices that don't support HTML5 video. - -View demo.html for an example of how to use it. - -Originally based on [this tutorial](http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/). - -Contributors (Github Username) ------------------------------- -heff, dz0ny, sentientbit, tvdeyen, brandonarbini, gordonbrander, Shraymonks, albertogasparin, sandaru1, nicholasbs, majornista, Fredust85, @wonderboymusic, ellis-, emirpprime, eirikb, mbrubeck - - -Getting Started ---------------- - -### Step 1: Include VideoJS Javascript and CSS files in your page. -Change the src/href to the appropriate location on your server. - - - - - -### Step 2: Add the VideoJS setup code to your page or another script. -Must run after the VideoJS javascript file has been included - - - - -### Step 3: Add the VideoJS embed code to your page (grab the latest version for demo.html). -Change the video and image files to your own. You can even swap out the Flash Fallback for your own, just maintain the "vjs-flash-fallback" class on the object. I know, seems like a lot of HTML, but it's super compatible. [Check it](http://camendesign.com/code/video_for_everybody/test.html). - - -
- - - -

Download Video: - MP4, - WebM, - Ogg
- - HTML5 Video Player by VideoJS -

-
- - - -Storing a Reference to the Player(s) ------------------------------------- -You can set up the player(s) in a way that allows you to access it later, and control things like the video playback. In this case, the setup has to happen after the DOM has been loaded. You can use any library's DOM Ready method, or the one built into VideoJS. - -### Using a Video's ID or Element - - VideoJS.DOMReady(function(){ - var myPlayer = VideoJS.setup("example_video_1"); - }); - - -### Using an array of video elements/IDs -Note: It returns an array of players - - VideoJS.DOMReady(function(){ - var myManyPlayers = VideoJS.setup(["example_video_1", "example_video_2", video3Element]); - }); - - -### All videos on the page with the "video-js" class - - VideoJS.DOMReady(function(){ - var myManyPlayers = VideoJS.setup("All"); - }); - - -### After you have references to your players you can...(example) - - VideoJS.DOMReady(function(){ - var myPlayer = VideoJS.setup("example_video_1"); - myPlayer.play(); // Starts playing the video for this player. - }); - - -Setting Options ---------------- -Set options when setting up the videos. The defaults are shown here. - - VideoJS.setupAllWhenReady({ - controlsBelow: false, // Display control bar below video instead of in front of - controlsHiding: true, // Hide controls when mouse is not over the video - defaultVolume: 0.85, // Will be overridden by user's last volume if available - flashPlayerVersion: 9, // Required flash version for fallback - }); - -### Or as the second option of VideoJS.setup - - VideoJS.DOMReady(function(){ - var myPlayer = VideoJS.setup("example_video_1", { - // Same options - }); - }); - - -Coming Next ------------ -- API to Flash fallback - -Changelog ---------- -2.0.3 - -- Feature: Made returning to the start at the end of the movie an option ("returnToStart"). -- Feature: Added loop option to loop movie ("loop"). -- Feature: Reorganized player API and listeners. -- Feature: Added option to disable controls. controlsEnabled: false -- Feature: Setup method now has a callback, so you can more easily work with the player after setup -- Feature: Added listeners for enter/exit full screen/window. -- Feature: Added a VideoJS.player(id) function for getting the player for a video ID -- Changes: setupAllWhenReady is now just setupAll (backward compatible) -- Fix: Check for Android browser now excludes firefox and opera - -2.0.2 (2010-12-10) - -- Feature: Rewrote and optimized subtitle code. -- Feature: Protecting against volume ranges outside of 1 and 0. -- Fix: Bug in Safari for Mac OS 10.5 (Leopard) that was breaking fullscreen. - -2.0.1 (2010-11-22) - -- Fix: Issue with big play button when multiple videos are on the page. -- Fix: Optimized play progress tracking. -- Fix: Optimized buffer progress checking. -- Fix: Firefox not showing Flash fallback object. - -2.0.0 (2010-11-21) - -- Feature: Created "behaviors" concept for adding behaviors to elements -- Feature: Switched back to divs for controls, for more portable styles -- Feature: Created playerFallbackOrder array option. ["html5", "flash", "links"] -- Feature: Created playerType concept, for initializing different platforms -- Feature: Added play button for Android -- Feature: Added spinner for iPad (non-fullscreen) -- Feature: Split into multiple files for easier development -- Feature: Combined VideoJS & _V_ into the same variable to reduce confusion -- Fix: Checking for m3u8 files (Apple HTTP Streaming) -- Fix: Catching error on localStorage full that safari seems to randomly throw -- Fix: Scrubbing to end doesn't trigger onEnded - -1.1.5 (2010-11-09) - -- Feature: Switched to track method for setting subtitles. Now works like spec. -- Feature: Created "players" concept for defining fallbacks and fallback order -- Fix: Android playback bug. -- Fix: Massive reorganization of code to make easier to navigate - -1.1.4 (2010-11-06) - -- Feature: Added loading spinner. -- Feature: Improved styles loaded checking. -- Feature: Added volume() function to get and set volume through the player. -- Fix: Fix issue where FF would loop video in background when ended. -- Fix: Bug in Chrome that shows poster & plays audio if you set currentTime too quickly. -- Fix: Bug in Safari where waiting is triggered and shows spinner when not needed -- Fix: Updated to show links if only unplayable sources and no Flash. -- Fix: Issue where if play button was loaded after play, it wouldn't hide. - -1.1.3 (2010-10-19) - -- Feature: Width/Height functions for resizing the player -- Feature: Made initial click & hold trigger new value on progress and volume -- Feature: Made controls not hide when hovering over them -- Feature: Added big play button as default starting control. -- Fix: Removed trailing comma that was breaking IE7 -- Fix: Removed some vars from global scope -- Fix: Changed a document.onmousemove to an eventListener to prevent conflicts -- Fix: Added a unique ID to FlowPlayer demo object to fix a FlowPlayer bug. Thanks @emirpprime. -- Fix: Safari error on unloaded video - -1.1.2 (2010-09-20) - -- Added a fix for the poster bug in iPad/iPhone -- Added more specificity to styles - -1.1.1 (2010-09-14) - -- First Formally Versioned Release - -1.0.0 (2010-05-18) - -- First released diff --git a/README.md b/README.md new file mode 100644 index 0000000000..33b7ebf332 --- /dev/null +++ b/README.md @@ -0,0 +1,153 @@ +VideoJS - [HTML5 Video Player](http://videojs.com) +================================================== +Version 3.0 BETA + +--- +BETA NOTES +Version 3 is almost a complete rewrite of the previous versions of VideoJS. New features includes: + + - HTML/CSS Controls and API now work for both the HTML5 and Flash versions. + - Custom Super-lightweight Flash Fallback + - Embed Code is much simpler. + - No more "vjs-box" div required, just use the video tag. + - No more embedding of Flash fallback within the video tag HTML. + +--- + +View [VideoJS.com](http://videojs.com) for a demo and overview. + +VideoJS is an HTML5 video player that uses the HTML5 video tag built into modern browsers, and uses javascript to add custom controls, new functionality, and to fix cross browser bugs. For browsers that don't support HTML5, it will fallback to a Flash player. + +View demo.html for an example of how to use it. + +Originally based on [this tutorial](http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/). + +Contributors (Github Username) +------------------------------ +heff, dz0ny, sentientbit, tvdeyen, brandonarbini, gordonbrander, Shraymonks, albertogasparin, sandaru1, nicholasbs, majornista, Fredust85, @wonderboymusic, ellis-, emirpprime, eirikb, mbrubeck + + +Getting Started +--------------- + +### Step 1: Include the VideoJS Javascript and CSS files in the head of your page. +Change the file urls to point to the files on your server. + + + + + +### Step 2: Add an HTML5 video tag to your page. +Use the video tag as normal, with a few extra pieces for VideoJS: + + 1. The 'data-setup' Atrribute tells VideoJS to automatically set up the video when the page is ready, and read any options (in JSON format) from the attribute. + 2. The 'id' Attribute: Should be used and unique for every video on the same page. + 3. The 'class' attribute contains two classes: + - 'video-js' applies styles that are required for VideoJS functionality, like fullscreen and subtitles. + - 'vjs-default-skin' applies the default skin to the HTML controls, and can be removed or overridden to create your own controls design. + +Otherwise include/exclude attributes, settings, sources, and tracks exactly as you would for HTML5 video. + + + + +### Step 3: Nada! +That's all it take to get started. See the docs for more advanced uses. + + +Coming Next +----------- +- Stable Release + +Changelog +--------- +3.0b + +- Complete rewrite in progress + +2.0.3 + +- Feature: Made returning to the start at the end of the movie an option ("returnToStart"). +- Feature: Added loop option to loop movie ("loop"). +- Feature: Reorganized player API and listeners. +- Feature: Added option to disable controls. controlsEnabled: false +- Feature: Setup method now has a callback, so you can more easily work with the player after setup +- Feature: Added listeners for enter/exit full screen/window. +- Feature: Added a VideoJS.player(id) function for getting the player for a video ID +- Changes: setupAllWhenReady is now just setupAll (backward compatible) +- Fix: Check for Android browser now excludes firefox and opera + +2.0.2 (2010-12-10) + +- Feature: Rewrote and optimized subtitle code. +- Feature: Protecting against volume ranges outside of 1 and 0. +- Fix: Bug in Safari for Mac OS 10.5 (Leopard) that was breaking fullscreen. + +2.0.1 (2010-11-22) + +- Fix: Issue with big play button when multiple videos are on the page. +- Fix: Optimized play progress tracking. +- Fix: Optimized buffer progress checking. +- Fix: Firefox not showing Flash fallback object. + +2.0.0 (2010-11-21) + +- Feature: Created "behaviors" concept for adding behaviors to elements +- Feature: Switched back to divs for controls, for more portable styles +- Feature: Created playerFallbackOrder array option. ["html5", "flash", "links"] +- Feature: Created playerType concept, for initializing different platforms +- Feature: Added play button for Android +- Feature: Added spinner for iPad (non-fullscreen) +- Feature: Split into multiple files for easier development +- Feature: Combined VideoJS & _V_ into the same variable to reduce confusion +- Fix: Checking for m3u8 files (Apple HTTP Streaming) +- Fix: Catching error on localStorage full that safari seems to randomly throw +- Fix: Scrubbing to end doesn't trigger onEnded + +1.1.5 (2010-11-09) + +- Feature: Switched to track method for setting subtitles. Now works like spec. +- Feature: Created "players" concept for defining fallbacks and fallback order +- Fix: Android playback bug. +- Fix: Massive reorganization of code to make easier to navigate + +1.1.4 (2010-11-06) + +- Feature: Added loading spinner. +- Feature: Improved styles loaded checking. +- Feature: Added volume() function to get and set volume through the player. +- Fix: Fix issue where FF would loop video in background when ended. +- Fix: Bug in Chrome that shows poster & plays audio if you set currentTime too quickly. +- Fix: Bug in Safari where waiting is triggered and shows spinner when not needed +- Fix: Updated to show links if only unplayable sources and no Flash. +- Fix: Issue where if play button was loaded after play, it wouldn't hide. + +1.1.3 (2010-10-19) + +- Feature: Width/Height functions for resizing the player +- Feature: Made initial click & hold trigger new value on progress and volume +- Feature: Made controls not hide when hovering over them +- Feature: Added big play button as default starting control. +- Fix: Removed trailing comma that was breaking IE7 +- Fix: Removed some vars from global scope +- Fix: Changed a document.onmousemove to an eventListener to prevent conflicts +- Fix: Added a unique ID to FlowPlayer demo object to fix a FlowPlayer bug. Thanks @emirpprime. +- Fix: Safari error on unloaded video + +1.1.2 (2010-09-20) + +- Added a fix for the poster bug in iPad/iPhone +- Added more specificity to styles + +1.1.1 (2010-09-14) + +- First Formally Versioned Release + +1.0.0 (2010-05-18) + +- First released diff --git a/demo-subtitles.srt b/demo-subtitles.srt deleted file mode 100755 index 0d25ac63b4..0000000000 --- a/demo-subtitles.srt +++ /dev/null @@ -1,13 +0,0 @@ -1 -00:00:02,400 --> 00:00:05,200 -[Background Music Playing] - -2 -00:00:15,712 --> 00:00:17,399 -Heay!! - -3 -00:00:25,712 --> 00:00:30,399 -[Bird noises] - - diff --git a/demo.html b/demo.html index 35fc892fb7..833843f7ae 100644 --- a/demo.html +++ b/demo.html @@ -1,102 +1,22 @@ - - HTML5 Video Player + VideoJS | HTML5 Video Player - - + - - // Add VideoJS to all video tags on the page when the DOM is ready - VideoJS.setupAllWhenReady(); - - /* ============= OR ============ */ - - // Setup and store a reference to the player(s). - // Must happen after the DOM is loaded - // You can use any library's DOM Ready method instead of VideoJS.DOMReady - - /* - VideoJS.DOMReady(function(){ - - // Using the video's ID or element - var myPlayer = VideoJS.setup("example_video_1"); - - // OR using an array of video elements/IDs - // Note: It returns an array of players - var myManyPlayers = VideoJS.setup(["example_video_1", "example_video_2", video3Element]); - - // OR all videos on the page - var myManyPlayers = VideoJS.setup("All"); - - // After you have references to your players you can...(example) - myPlayer.play(); // Starts playing the video for this player. - }); - */ - - /* ========= SETTING OPTIONS ========= */ - - // Set options when setting up the videos. The defaults are shown here. - - /* - VideoJS.setupAllWhenReady({ - controlsBelow: false, // Display control bar below video instead of in front of - controlsHiding: true, // Hide controls when mouse is not over the video - defaultVolume: 0.85, // Will be overridden by user's last volume if available - flashVersion: 9, // Required flash version for fallback - linksHiding: true // Hide download links when video is supported - }); - */ - - // Or as the second option of VideoJS.setup - - /* - VideoJS.DOMReady(function(){ - var myPlayer = VideoJS.setup("example_video_1", { - // Same options - }); - }); - */ - - - - - - -
- - - -

Download Video: - MP4, - WebM, - Ogg
- - HTML5 Video Player by VideoJS -

-
- + diff --git a/dev/build/combine_sources.sh b/dev/build/combine_sources.sh new file mode 100755 index 0000000000..e97105f90d --- /dev/null +++ b/dev/build/combine_sources.sh @@ -0,0 +1,36 @@ +#! /bin/csh +# Combines Source Files. In terminal, sh combine_sources.sh +# It will put a new video.js file under dist/ + +cat ../src/_begin.js > ../dist/video.js + +cat ../src/core.js >> ../dist/video.js +cat ../src/api.js >> ../dist/video.js + +cat ../src/lib.js >> ../dist/video.js +cat ../src/log.js >> ../dist/video.js + +cat ../src/ecma.js >> ../dist/video.js +cat ../src/json.js >> ../dist/video.js +cat ../src/events.js >> ../dist/video.js +cat ../src/tracks.js >> ../dist/video.js + +cat ../src/tech/html5.js >> ../dist/video.js +cat ../src/tech/flowplayer.js >> ../dist/video.js + +# h5swf temporarily requires swfobject +cat ../src/tech/h5swf.js >> ../dist/video.js +cat ../flash/swfobject.js >> ../dist/video.js + +cat ../src/behaviors/behaviors.js >> ../dist/video.js +cat ../src/behaviors/seekBar.js >> ../dist/video.js +cat ../src/behaviors/texttrackdisplays.js >> ../dist/video.js +cat ../src/behaviors/volume.js >> ../dist/video.js + +cat ../src/controls/bar.js >> ../dist/video.js +cat ../src/controls/bigPlay.js >> ../dist/video.js +cat ../src/controls/subtitlesBox.js >> ../dist/video.js + +cat ../src/autoload.js >> ../dist/video.js + +cat ../src/_end.js >> ../dist/video.js \ No newline at end of file diff --git a/dev/combine_sources.sh b/dev/combine_sources.sh deleted file mode 100755 index 84b18b35b0..0000000000 --- a/dev/combine_sources.sh +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/csh -# Combines Source Files. In terminal, sh combine_sources.sh -cat src/_begin.js > combined.js - -cat src/main.js >> combined.js -cat src/api.js >> combined.js -cat src/html5.js >> combined.js -cat src/flash.js >> combined.js -cat src/behaviors.js >> combined.js -cat src/lib.js >> combined.js -cat src/video-js.jquery.js >> combined.js - -cat src/_end.js >> combined.js \ No newline at end of file diff --git a/dev/compare/compare.css b/dev/compare/compare.css new file mode 100644 index 0000000000..c475cb5e6c --- /dev/null +++ b/dev/compare/compare.css @@ -0,0 +1,6 @@ +body { font-size: 11px; font-family: 'Helvetica Neue', helvetica, arial; } +td, th { text-align: left; vertical-align: top; } +td.info-col { width: 240px; } +td.data { text-align: right; } +span.na { color: red; } +span.undefined { color: #999; } \ No newline at end of file diff --git a/dev/compare/compare.html b/dev/compare/compare.html new file mode 100644 index 0000000000..f82a0ab407 --- /dev/null +++ b/dev/compare/compare.html @@ -0,0 +1,102 @@ + + + + + HTML5 Video Player + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HTML5H5SwfFlowplayer
+ + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/dev/compare/compare.js b/dev/compare/compare.js new file mode 100644 index 0000000000..c5b6dc515b --- /dev/null +++ b/dev/compare/compare.js @@ -0,0 +1,55 @@ +$(function(){ + var tech, i, + techList = ["html5","h5swf","flowplayer"], + props = "error,currentSrc,networkState,buffered,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoWidth,videoHeight,textTracks,preload,currentTime,playbackRate,autoplay,loop,controls,volume,muted,defaultMuted".split(","), + methods = "play,pause,src,load,canPlayType,addTextTrack", + notUsed = "mediaGroup,controller,videoTracks,audioTracks,defaultPlaybackRate"; + + + for (i=0; i < techList.length; i++) { + tech = techList[i]; + + var player = _V_("vid"+(i+1), { "techOrder":[tech] }); + + _V_.each(_V_.html5Events, function(evt){ + player.addEvent(evt, _V_.proxy(tech, function(evt){ + var eventsId = "#"+this+"_events", + type = evt.type, + prev = $(eventsId+" div").first(); + + if (prev && prev.html() && prev.html().indexOf(type + " ") === 0) { + var countSpan = prev.children(".count"); + countSpan.html(parseInt(countSpan.html() || 1) + 1); + } else { + $("#"+this+"_events").prepend("
" + evt.type + "
"); + } + })); + }); + + var propTable = $("#"+tech+"_props"); + _V_.each(props, function(prop){ + propTable.append(""+prop+"") + }); + + setInterval(_V_.proxy(player, function(){ + _V_.each(props, _V_.proxy(this, function(prop){ + var result = "" + try { + result = this[prop](); + if (result === false) result = "false"; + if (result === true) result = "true"; + if (result === "") result = "''"; + if (result === null) result = "null"; + if (result === undefined) result = "undefined"; + if (typeof result.start == "function") { + result = (result.length > 0) ? "s:"+result.start(0)+" e:"+result.end(0) : "-"; + } + } catch(e) { + result = "N/A"; + } + $("#"+this.currentTechName+prop).html(result); + })); + }), 500); + + }; +}); \ No newline at end of file diff --git a/dev/decisions.txt b/dev/decisions.txt new file mode 100644 index 0000000000..3f030af59d --- /dev/null +++ b/dev/decisions.txt @@ -0,0 +1,8 @@ +Tracking/Polling CurrentTime Manually +------------------------------------- +- Necessary for most flash players and browsers that don't trigger timeupdate events. +- In VJS 1-2, we always tracked time because timeupdate was rare. +- Now most browsers support it well. There is a delay bug in the current Chrome. + http://code.google.com/p/chromium/issues/detail?id=92251 + Andrew from Chrome told me it would be fix in an upcoming release. +Going to rely on browsers timeupdates when available now. \ No newline at end of file diff --git a/dev/demo-subtitles.srt b/dev/demo-subtitles.srt new file mode 100644 index 0000000000..1a5217306c --- /dev/null +++ b/dev/demo-subtitles.srt @@ -0,0 +1,13 @@ +1 +00:00:00,000 --> 00:00:07,200 +[Background Music Playing] + +2 +00:00:16,000 --> 00:00:17,200 +Welcome to this week's episode + +3 +00:00:17,400 --> 00:00:19,000 +of explore California + + diff --git a/dev/design/Icon Design.png b/dev/design/Icon Design.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1b79fe700aff2d25ccc8480f70c5b9b0b380ae GIT binary patch literal 86601 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 z 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 literal 0 HcmV?d00001 diff --git a/dev/design/skin.old.css b/dev/design/skin.old.css new file mode 100644 index 0000000000..657ae32179 --- /dev/null +++ b/dev/design/skin.old.css @@ -0,0 +1,190 @@ +/* DEFAULT SKIN (override in another file) +================================================================================ +Using all CSS to draw the controls. Images could be used if desired. +Instead of editing this file, I recommend creating your own skin CSS file to be included after this file, +so you can upgrade to newer versions easier. */ + +.vjs-original-skin .vjs-controls { + position: absolute; margin: 0; opacity: 0.85; color: #fff; + display: block; /* Start hidden */ + left: 0; right: 0; /* 100% width of video-js-box */ + width: 100%; + bottom: 0px; /* Distance from the bottom of the box/video. Keep 0. Use height to add more bottom margin. */ + height: 35px; /* Including any margin you want above or below control items */ + padding: 0; /* Controls are absolutely position, so no padding necessary */ + -webkit-transition: opacity 0.5s linear; + -moz-transition: opacity 0.5s linear; + -o-transition: opacity 0.5s linear; + -ms-transition: opacity 0.5s linear; + transition: opacity 0.5s linear; +} + +.vjs-original-skin .vjs-control { + position: absolute; /* Use top, bottom, left, and right to specifically position the control. */ + text-align: center; margin: 0; padding: 0; + height: 25px; /* Default height of individual controls */ + top: 5px; /* Top margin to put space between video and controls when controls are below */ + + /* CSS Background Gradients + Using to give the aqua-ish look. */ + /* Default */ background-color: #0B151A; + /* Webkit */ background: #1F3744 -webkit-gradient(linear, left top, left bottom, from(#0B151A), to(#1F3744)) left 12px; + /* Firefox */ background: #1F3744 -moz-linear-gradient(top, #0B151A, #1F3744) left 12px; + + /* CSS Curved Corners */ + -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; + + /* CSS Shadows */ + -webkit-box-shadow: 1px 1px 2px #000; -moz-box-shadow: 1px 1px 2px #000; box-shadow: 1px 1px 2px #000; +} + +/* Placement of Control Items + - Left side of pogress bar, use left & width + - Rigth side of progress bar, use right & width + - Expand with the video (like progress bar) use left & right + (using div.x to make more specific than vjs-control style) +*/ +.vjs-original-skin div.vjs-play-control { left: 5px; width: 25px; } +.vjs-original-skin div.vjs-progress-control { left: 35px; right: 165px; } /* Using left & right so it expands with the width of the video */ +.vjs-original-skin div.vjs-time-control { width: 75px; right: 90px; } /* Time control and progress bar are combined to look like one */ +.vjs-original-skin div.vjs-volume-control { width: 50px; right: 35px; } +.vjs-original-skin div.vjs-fullscreen-control { width: 25px; right: 5px; } + +/* Removing curved corners on progress control and time control to join them. */ +.vjs-original-skin div.vjs-progress-control { + -webkit-border-top-right-radius: 0; -moz-border-radius-topright: 0; border-top-right-radius: 0; + -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomright: 0; border-bottom-right-radius: 0; +} +.vjs-original-skin div.vjs-time-control { + -webkit-border-top-left-radius: 0; -moz-border-radius-topleft: 0; border-top-left-radius: 0; + -webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomleft: 0; border-bottom-left-radius: 0; +} + +/* Play/Pause +-------------------------------------------------------------------------------- */ +.vjs-original-skin .vjs-play-control { cursor: pointer !important; } +/* Play Icon */ +.vjs-original-skin .vjs-play-control span { display: block; font-size: 0; line-height: 0; } +.vjs-original-skin.vjs-paused .vjs-play-control span { + width: 0; height: 0; margin: 8px 0 0 8px; + /* Drawing the play triangle with borders - http://www.infimum.dk/HTML/slantinfo.html */ + border-left: 10px solid #fff; /* Width & Color of play icon */ + /* Height of play icon is total top & bottom border widths. Color is transparent. */ + border-top: 5px solid rgba(0,0,0,0); border-bottom: 5px solid rgba(0,0,0,0); +} +.vjs-original-skin.vjs-playing .vjs-play-control span { + width: 3px; height: 10px; margin: 8px auto 0; + /* Drawing the pause bars with borders */ + border-top: 0px; border-left: 3px solid #fff; border-bottom: 0px; border-right: 3px solid #fff; +} + +/* Progress +-------------------------------------------------------------------------------- */ +.vjs-original-skin .vjs-progress-holder { /* Box containing play and load progresses */ + position: relative; padding: 0; overflow:hidden; cursor: pointer !important; + height: 9px; border: 1px solid #777; + margin: 7px 1px 0 5px; /* Placement within the progress control item */ + -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; +} +.vjs-original-skin .vjs-progress-holder div { /* Progress Bars */ + position: absolute; display: block; width: 0; height: 9px; margin: 0; padding: 0; + left: 0; top: 0; /*Needed for IE6*/ + -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; +} +.vjs-original-skin .vjs-play-progress { + /* CSS Gradient */ + /* Default */ background: #fff; + /* Webkit */ background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#777)); + /* Firefox */ background: -moz-linear-gradient(top, #fff, #777); +} +.vjs-original-skin .vjs-load-progress { + opacity: 0.8; + /* CSS Gradient */ + /* Default */ background-color: #555; + /* Webkit */ background: -webkit-gradient(linear, left top, left bottom, from(#555), to(#aaa)); + /* Firefox */ background: -moz-linear-gradient(top, #555, #aaa); +} + +/* Time Display +-------------------------------------------------------------------------------- */ +.vjs-original-skin .vjs-time-control { font-size: 10px; line-height: 1; font-weight: normal; font-family: Helvetica, Arial, sans-serif; } +.vjs-original-skin .vjs-time-control span { line-height: 25px; /* Centering vertically */ } + +/* Volume +-------------------------------------------------------------------------------- */ +.vjs-original-skin .vjs-volume-control { cursor: pointer !important; } +.vjs-original-skin .vjs-volume-control div { display: block; margin: 0 5px 0 5px; padding: 4px 0 0 0; } +/* Drawing the volume icon using 6 span elements */ +.vjs-original-skin .vjs-volume-control div span { /* Individual volume bars */ + float: left; padding: 0; font-size: 0; line-height: 0; + margin: 0 2px 0 0; /* Space between */ + width: 5px; height: 0px; /* Total height is height + bottom border */ + border-bottom: 18px solid #555; /* Default (off) color and height of visible portion */ +} +.vjs-original-skin .vjs-volume-control div span.vjs-volume-level-on { border-color: #fff; /* Volume on bar color */ } +/* Creating differnt bar heights through height (transparent) and bottom border (visible). */ +.vjs-original-skin .vjs-volume-control div span.vjs-vc-1 { border-bottom-width: 2px; height: 16px; } +.vjs-original-skin .vjs-volume-control div span.vjs-vc-2 { border-bottom-width: 4px; height: 14px; } +.vjs-original-skin .vjs-volume-control div span.vjs-vc-3 { border-bottom-width: 7px; height: 11px; } +.vjs-original-skin .vjs-volume-control div span.vjs-vc-4 { border-bottom-width: 10px; height: 8px; } +.vjs-original-skin .vjs-volume-control div span.vjs-vc-5 { border-bottom-width: 14px; height: 4px; } +.vjs-original-skin .vjs-volume-control div span.vjs-vc-6 { margin-right: 0; } + +/* Fullscreen +-------------------------------------------------------------------------------- */ +.vjs-original-skin .vjs-fullscreen-control { cursor: pointer !important; } +.vjs-original-skin .vjs-fullscreen-control div { + padding: 0; text-align: left; vertical-align: top; cursor: pointer !important; + margin: 5px 0 0 5px; /* Placement within the fullscreen control item */ + width: 20px; height: 20px; +} +/* Drawing the fullscreen icon using 4 span elements */ +.vjs-original-skin .vjs-fullscreen-control div span { float: left; margin: 0; padding: 0; font-size: 0; line-height: 0; width: 0; text-align: left; vertical-align: top; } +.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-1 { /* Top-left triangle */ + margin-right: 3px; /* Space between top-left and top-right */ + margin-bottom: 3px; /* Space between top-left and bottom-left */ + border-top: 6px solid #fff; /* Height and color */ + border-right: 6px solid rgba(0,0,0,0); /* Width */ +} +.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-2 { border-top: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } +.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-3 { clear: both; margin: 0 3px 0 0; border-bottom: 6px solid #fff; border-right: 6px solid rgba(0,0,0,0); } +.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-4 { border-bottom: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } +/* Icon when video is in fullscreen mode */ +.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-1 { border: none; border-bottom: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } +.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-2 { border: none; border-bottom: 6px solid #fff; border-right: 6px solid rgba(0,0,0,0); } +.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-3 { border: none; border-top: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } +.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-4 { border: none; border-top: 6px solid #fff; border-right: 6px solid rgba(0,0,0,0); } + + + + + +/* Big Play Button (at start) +---------------------------------------------------------*/ +.vjs-original-skin .vjs-big-play-button { + display: block; /* Start hidden */ z-index: 2; + position: absolute; top: 50%; left: 50%; width: 80px; height: 80px; margin: -43px 0 0 -43px; text-align: center; vertical-align: center; cursor: pointer !important; + border: 3px solid #fff; opacity: 0.9; + -webkit-border-radius: 20px; -moz-border-radius: 20px; border-radius: 20px; + + /* CSS Background Gradients */ + /* Default */ background-color: #0B151A; + /* Webkit */ background: #1F3744 -webkit-gradient(linear, left top, left bottom, from(#0B151A), to(#1F3744)) left 40px; + /* Firefox */ background: #1F3744 -moz-linear-gradient(top, #0B151A, #1F3744) left 40px; + + /* CSS Shadows */ + -webkit-box-shadow: 4px 4px 8px #000; -moz-box-shadow: 4px 4px 8px #000; box-shadow: 4px 4px 8px #000; +} + +.vjs-original-skin div.vjs-big-play-button:hover { + -webkit-box-shadow: 0px 0px 80px #fff; -moz-box-shadow: 0px 0px 80px #fff; box-shadow: 0px 0px 80px #fff; +} + +.vjs-original-skin div.vjs-big-play-button span { + display: block; font-size: 0; line-height: 0; + width: 0; height: 0; margin: 20px 0 0 23px; + /* Drawing the play triangle with borders - http://www.infimum.dk/HTML/slantinfo.html */ + border-left: 40px solid #fff; /* Width & Color of play icon */ + /* Height of play icon is total top & bottom border widths. Color is transparent. */ + border-top: 20px solid rgba(0,0,0,0); border-bottom: 20px solid rgba(0,0,0,0); +} \ No newline at end of file diff --git a/dev/design/video-js.css b/dev/design/video-js.css new file mode 100644 index 0000000000..2ff806fedd --- /dev/null +++ b/dev/design/video-js.css @@ -0,0 +1,307 @@ +/* +VideoJS Default Styles (http://videojs.com) +Version 3.0 + +REQUIRED STYLES (be careful overriding) +================================================================================ */ +/* When loading the player, the video tag is replaced with a DIV, + that will hold the video tag or object tag for other playback methods. + The div contains the video playback element (Flash or HTML5) and controls, and sets the width and height of the video. + + ** If you want to add some kind of border/padding (e.g. a frame), or special positioning, use another containing element. + Otherwise you risk messing up control positioning and full window mode. ** +*/ +.video-js { + background-color: #000; position: relative; padding: 0; + /* Start with 10px for base font size so other dimensions can be em based and easily calculable. */ + font-size: 10px; +} + +/* Playback technology elements expand to the width/height of the containing div.