├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── devnotes.txt ├── hls-vod.js ├── package.json └── static ├── app.js ├── bootstrap-3.3.5-dist ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.css.map │ └── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 └── js │ ├── bootstrap.js │ ├── bootstrap.min.js │ └── npm.js ├── font-awesome-4.4.0 ├── HELP-US-OUT.txt ├── css │ ├── font-awesome.css │ └── font-awesome.min.css ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ └── fontawesome-webfont.woff2 ├── less │ ├── animated.less │ ├── bordered-pulled.less │ ├── core.less │ ├── fixed-width.less │ ├── font-awesome.less │ ├── icons.less │ ├── larger.less │ ├── list.less │ ├── mixins.less │ ├── path.less │ ├── rotated-flipped.less │ ├── stacked.less │ └── variables.less └── scss │ ├── _animated.scss │ ├── _bordered-pulled.scss │ ├── _core.scss │ ├── _fixed-width.scss │ ├── _icons.scss │ ├── _larger.scss │ ├── _list.scss │ ├── _mixins.scss │ ├── _path.scss │ ├── _rotated-flipped.scss │ ├── _stacked.scss │ ├── _variables.scss │ └── font-awesome.scss ├── index.html ├── jquery-1.11.3.min.js ├── main.css ├── mediaelement-mediaelement-8474a01 ├── .babelrc ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .stylelintrc ├── .travis.yml ├── .versions ├── Gruntfile.js ├── README.md ├── TODO.md ├── bower.json ├── build │ ├── lang │ │ ├── ca.js │ │ ├── cs.js │ │ ├── de.js │ │ ├── es.js │ │ ├── fa.js │ │ ├── fr.js │ │ ├── hr.js │ │ ├── hu.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── ko.js │ │ ├── nl.js │ │ ├── pl.js │ │ ├── pt.js │ │ ├── ro.js │ │ ├── ru.js │ │ ├── sk.js │ │ ├── sv.js │ │ ├── uk.js │ │ ├── zh-cn.js │ │ └── zh.js │ ├── mediaelement-and-player.js │ ├── mediaelement-and-player.min.js │ ├── mediaelement-flash-audio-ogg.swf │ ├── mediaelement-flash-audio.swf │ ├── mediaelement-flash-video-hls.swf │ ├── mediaelement-flash-video-mdash.swf │ ├── mediaelement-flash-video.swf │ ├── mediaelement.js │ ├── mediaelement.min.js │ ├── mediaelementplayer-legacy.css │ ├── mediaelementplayer-legacy.min.css │ ├── mediaelementplayer.css │ ├── mediaelementplayer.min.css │ ├── mejs-controls.png │ ├── mejs-controls.svg │ └── renderers │ │ ├── dailymotion.js │ │ ├── dailymotion.min.js │ │ ├── facebook.js │ │ ├── facebook.min.js │ │ ├── soundcloud.js │ │ ├── soundcloud.min.js │ │ ├── twitch.js │ │ ├── twitch.min.js │ │ ├── vimeo.js │ │ └── vimeo.min.js ├── changelog.md ├── compile_swf.sh ├── demo │ ├── chapters.vtt │ ├── demo.js │ ├── favicon.ico │ ├── index.html │ └── mediaelement.vtt ├── docs │ ├── api.md │ ├── guidelines.md │ ├── installation.md │ ├── resources.md │ ├── usage.md │ └── utils.md ├── full.js ├── media │ └── README ├── package.js ├── package.json ├── src │ ├── css │ │ ├── mediaelementplayer-legacy.css │ │ ├── mediaelementplayer.css │ │ ├── mejs-controls.ai │ │ ├── mejs-controls.png │ │ └── mejs-controls.svg │ ├── flash │ │ ├── flash-audio-ogg │ │ │ ├── OggMediaElement.as │ │ │ ├── com │ │ │ │ └── automatastudios │ │ │ │ │ ├── audio │ │ │ │ │ └── audiodecoder │ │ │ │ │ │ ├── AudioDecoder.as │ │ │ │ │ │ ├── decoders │ │ │ │ │ │ ├── AudioInfo.as │ │ │ │ │ │ ├── IDecoder.as │ │ │ │ │ │ ├── OggVorbisDecoder.as │ │ │ │ │ │ └── WAVDecoder.as │ │ │ │ │ │ └── events │ │ │ │ │ │ └── AudioDecoderEvent.as │ │ │ │ │ └── data │ │ │ │ │ └── riff │ │ │ │ │ ├── RIFFChunkInfo.as │ │ │ │ │ └── RIFFParser.as │ │ │ ├── flacc │ │ │ │ └── oggvorbis.c │ │ │ └── oggvorbis.swc │ │ ├── flash-audio │ │ │ └── AudioMediaElement.as │ │ ├── flash-video-dash │ │ │ ├── DashMediaElement.as │ │ │ ├── OSMF.swc │ │ │ └── com │ │ │ │ └── castlabs │ │ │ │ └── dash │ │ │ │ ├── DashContext.as │ │ │ │ ├── DashNetLoader.as │ │ │ │ ├── DashNetStream.as │ │ │ │ ├── DashPlugin.as │ │ │ │ ├── DashPluginInfo.as │ │ │ │ ├── DashSeekTrait.as │ │ │ │ ├── DashTimeTrait.as │ │ │ │ ├── boxes │ │ │ │ ├── Box.as │ │ │ │ ├── FLVTag.as │ │ │ │ ├── FullBox.as │ │ │ │ ├── HandlerReferenceBox.as │ │ │ │ ├── MediaBox.as │ │ │ │ ├── MediaHeaderBox.as │ │ │ │ ├── MediaInformationBox.as │ │ │ │ ├── MovieBox.as │ │ │ │ ├── MovieExtendsBox.as │ │ │ │ ├── MovieFragmentBox.as │ │ │ │ ├── Muxer.as │ │ │ │ ├── NalUnit.as │ │ │ │ ├── SampleDescriptionBox.as │ │ │ │ ├── SampleEntry.as │ │ │ │ ├── SampleTableBox.as │ │ │ │ ├── TrackBox.as │ │ │ │ ├── TrackExtendsBox.as │ │ │ │ ├── TrackFragmentBox.as │ │ │ │ ├── TrackFragmentHeaderBox.as │ │ │ │ ├── TrackFragmentRunBox.as │ │ │ │ └── TrackHeaderBox.as │ │ │ │ ├── descriptors │ │ │ │ ├── Representation.as │ │ │ │ ├── index │ │ │ │ │ ├── SegmentIndex.as │ │ │ │ │ ├── SegmentIndexFactory.as │ │ │ │ │ ├── SegmentList.as │ │ │ │ │ ├── SegmentRange.as │ │ │ │ │ ├── SegmentTemplate.as │ │ │ │ │ └── SegmentTimeline.as │ │ │ │ └── segments │ │ │ │ │ ├── DataSegment.as │ │ │ │ │ ├── MediaDataSegment.as │ │ │ │ │ ├── NullSegment.as │ │ │ │ │ ├── ReflexiveSegment.as │ │ │ │ │ ├── Segment.as │ │ │ │ │ └── WaitSegment.as │ │ │ │ ├── events │ │ │ │ ├── FragmentEvent.as │ │ │ │ ├── ManifestEvent.as │ │ │ │ ├── SegmentEvent.as │ │ │ │ └── StreamEvent.as │ │ │ │ ├── handlers │ │ │ │ ├── AudioSegmentHandler.as │ │ │ │ ├── IndexSegmentHandler.as │ │ │ │ ├── InitializationAudioSegmentHandler.as │ │ │ │ ├── InitializationSegmentHandler.as │ │ │ │ ├── InitializationVideoSegmentHandler.as │ │ │ │ ├── ManifestHandler.as │ │ │ │ ├── MediaSegmentHandler.as │ │ │ │ ├── SegmentHandler.as │ │ │ │ └── VideoSegmentHandler.as │ │ │ │ ├── loaders │ │ │ │ ├── DataSegmentLoader.as │ │ │ │ ├── FragmentLoader.as │ │ │ │ ├── ManifestLoader.as │ │ │ │ ├── NullSegmentLoader.as │ │ │ │ ├── ReflexiveSegmentLoader.as │ │ │ │ └── SegmentLoader.as │ │ │ │ └── utils │ │ │ │ ├── AdaptiveSegmentDispatcher.as │ │ │ │ ├── BandwidthMonitor.as │ │ │ │ ├── Bytes.as │ │ │ │ ├── Console.as │ │ │ │ ├── Manifest.as │ │ │ │ └── SmoothMonitor.as │ │ ├── flash-video-hls │ │ │ ├── HlsMediaElement.as │ │ │ └── flashls.swc │ │ └── flash-video │ │ │ └── VideoMediaElement.as │ └── js │ │ ├── core │ │ ├── i18n.js │ │ ├── mediaelement.js │ │ ├── mejs.js │ │ └── renderer.js │ │ ├── features │ │ ├── fullscreen.js │ │ ├── playpause.js │ │ ├── progress.js │ │ ├── time.js │ │ ├── tracks.js │ │ └── volume.js │ │ ├── header.js │ │ ├── languages │ │ ├── ca.js │ │ ├── cs.js │ │ ├── de.js │ │ ├── en.js │ │ ├── es.js │ │ ├── fa.js │ │ ├── fr.js │ │ ├── hr.js │ │ ├── hu.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── ko.js │ │ ├── nl.js │ │ ├── pl.js │ │ ├── pt.js │ │ ├── ro.js │ │ ├── ru.js │ │ ├── sk.js │ │ ├── sv.js │ │ ├── uk.js │ │ ├── zh-cn.js │ │ └── zh.js │ │ ├── player.js │ │ ├── player │ │ ├── default.js │ │ └── library.js │ │ ├── renderers │ │ ├── dailymotion.js │ │ ├── dash.js │ │ ├── facebook.js │ │ ├── flash.js │ │ ├── flv.js │ │ ├── hls.js │ │ ├── html5.js │ │ ├── soundcloud.js │ │ ├── twitch.js │ │ ├── vimeo.js │ │ └── youtube.js │ │ └── utils │ │ ├── constants.js │ │ ├── dom.js │ │ ├── general.js │ │ ├── media.js │ │ ├── polyfill.js │ │ └── time.js ├── standalone.js └── test │ ├── player.html │ ├── player.tests.js │ └── unit │ ├── i18n.spec.js │ ├── renderer.spec.js │ └── utils.spec.js └── prefixfree.min.js /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: mifi 2 | custom: https://paypal.me/mifino 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | cache 2 | node_modules 3 | .DS_Store 4 | .idea 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | hls-vod 📺 2 | ======= 3 | 4 | HTTP Live Streaming with on-the-fly encoding of any video file for Apple TV, iPhone, iPad, iPod, Mac Safari and other devices that support HTTP Live Streaming. Also supports Android and normal desktop browsers through the use of [mediaelement.js](http://www.mediaelementjs.com/) 5 | 6 | 7 | 8 | `hls-vod` is a server application lets you stream your whole video collection on-demand, regardless of format, to your iOS devices, playable from Safari, working with AirPlay as well. It does this by invoking ffmpeg/VLC on the fly through the command line, and presenting a web based GUI for playback. 9 | 10 | Version 1.0 is out with simpler usage 🎉 11 | 12 | Requirements 13 | ------------ 14 | - [node.js](https://nodejs.org/en/) (Tested on >=4) 15 | - [ffmpeg](https://ffmpeg.org/) (needs >=v1, must be built with libx264 and libmp3lame) OR [VLC](https://www.videolan.org/) 16 | - Tested on Linux and Mac, but it might work on Windows too. 17 | 18 | Installation 19 | ------------ 20 | ``` 21 | npm i -g hls-vod 22 | ``` 23 | 24 | Running (with ffmpeg, default) 25 | ------------------------------ 26 | - Make sure you have node.js and ffmpeg in PATH 27 | - `hls-vod --root-path /path/to/my/videos` 28 | - Or: `hls-vod --transcoder-path /path/to/ffmpeg --root-path /path/to/my/videos` 29 | - Browse to http://localhost:4040/ 30 | 31 | Running (with VLC) 32 | ------------------ 33 | - Make sure you have node.js and VLC installed and in PATH 34 | - `hls-vod --transcoder-type vlc --root-path /path/to/my/videos` 35 | - Or: `hls-vod --transcoder-type vlc --transcoder-path /usr/bin/vlc --root-path /path/to/my/videos` 36 | - Browse to http://localhost:4040/ 37 | 38 | VLC or ffmpeg ? 39 | -------------- 40 | `hls-vod` supports both VLC and ffmpeg as streaming backend. ffmpeg gives the best performance and best format/codec support, in my experience. Thumbs and audio is not implemented for VLC. 41 | 42 | 43 | Arguments 44 | ------------------ 45 | ``` 46 | --root-path PATH - Root path allowed to read files in. Defaults to current directory. 47 | 48 | --cache-path PATH - Where to write transcoded video cache. Defaults to OS temp dir. 49 | 50 | --transcoder-type vlc|ffmpeg - Defaults to ffmpeg. 51 | 52 | --transcoder-path PATH - Will use ffmpeg or vlc in PATH if not specified. 53 | ``` 54 | 55 | For more arguments run it without arguments: `hls-vod` 56 | 57 | Limitations 58 | ----------- 59 | - Currently only supports encoding one stream at a time (only one user at a time). 60 | -------------------------------------------------------------------------------- /devnotes.txt: -------------------------------------------------------------------------------- 1 | https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/StreamingMediaGuide.pdf 2 | https://developer.apple.com/library/ios/technotes/tn2288/_index.html 3 | 4 | http://jxcore.com/turn-node-applications-into-executables/ 5 | https://github.com/jaredallard/nexe 6 | https://github.com/nwjs/nw.js/wiki/how-to-package-and-distribute-your-apps 7 | 8 | google "http live streaming polyfill" -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hls-vod", 3 | "version": "1.0.2", 4 | "description": "Node CLI for on-demand encoding and streaming of videos", 5 | "scripts": {}, 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/mifi/hls-vod.git" 9 | }, 10 | "author": { 11 | "name": "Mikael Finstad", 12 | "email": "finstaden@gmail.com", 13 | "url": "mifi.no" 14 | }, 15 | "license": "MIT", 16 | "files": [ 17 | "hls-vod.js", 18 | "static" 19 | ], 20 | "bin": { 21 | "hls-vod": "hls-vod.js" 22 | }, 23 | "engines": { 24 | "node": ">=4" 25 | }, 26 | "dependencies": { 27 | "body-parser": "^1.14.1", 28 | "express": "^4.13.3", 29 | "fs-extra": "^4.0.2", 30 | "serve-static": "^1.10.0", 31 | "socket.io": "^2.0.3", 32 | "underscore": "^1.8.3", 33 | "wrench": "1.4.4" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /static/bootstrap-3.3.5-dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fonticons (https://fonticons.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/font-awesome-4.4.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/font-awesome-4.4.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/font-awesome-4.4.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/font-awesome-4.4.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mifi/hls-vod/58aa1dcc5a01b1faa1f648f341aba4394a9c67f4/static/font-awesome-4.4.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.4.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 |
37 |
38 | 39 |
40 |
41 | 42 |
43 | 44 |
45 | 46 |
47 | 48 | 49 |
50 |
51 | 52 |
53 | 54 | 55 | 56 |
Settings
57 |
58 |
59 |
60 | Settings 61 |
62 | 63 |
64 |
65 | 66 | 73 |
74 |
75 |
76 |
77 |
78 | 79 | 80 | -------------------------------------------------------------------------------- /static/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 3em; 3 | background-color: #eee; 4 | color: black; 5 | -webkit-overflow-scrolling: touch; 6 | font-family: 'Open Sans', sans-serif; 7 | } 8 | a, a:visited, a:active { 9 | color: inherit; 10 | } 11 | #file-list { 12 | list-style: none; 13 | padding-left: 0; 14 | margin-top: 0; 15 | } 16 | #file-list li { 17 | cursor: pointer; 18 | background: linear-gradient(to bottom, #fff 0%, #eee 48%, #ddd 52%, #ccc 100%); 19 | border: 1px solid #ccc; 20 | text-shadow: 1px 1px #ccc; 21 | color: #000; 22 | font-size: 1.2em; 23 | padding: .4em .5em; 24 | white-space: nowrap; 25 | overflow-x: auto; 26 | overflow-y: hidden; 27 | } 28 | #file-list li img.thumbnail { 29 | height: 50px; 30 | vertical-align: middle; 31 | padding-right: .7em; 32 | } 33 | #dir-header { 34 | background: linear-gradient(to bottom, #fff 0%, #eee 48%, #ddd 52%, #ccc 100%); 35 | border: 1px solid #ccc; 36 | text-shadow: 1px 1px #ccc; 37 | color: #c00; 38 | font-size: 1.2em; 39 | padding: .2em .5em; 40 | overflow: hidden; 41 | } 42 | 43 | #transcoders { 44 | color: white; 45 | padding: .2em .5em; 46 | position: absolute; 47 | top: 0; 48 | left: 0; 49 | z-index: 1; 50 | } 51 | 52 | audio { 53 | margin: auto; 54 | display: block; 55 | } 56 | #audio-container { 57 | background: black; 58 | width: 100%; 59 | padding: 3em; 60 | } 61 | #audio-container audio { 62 | width: 100%; 63 | } 64 | #audio-song-name { 65 | color: white; 66 | text-align: center; 67 | font-size: 1.5em; 68 | padding-bottom: 1em; 69 | } 70 | 71 | #preview-image { 72 | background: black; 73 | display: block; 74 | width: 100%; 75 | min-height: 400px; 76 | } 77 | 78 | #player-loading { 79 | position: absolute; 80 | z-index: 1; 81 | font-size: 4em; 82 | margin-top: -.5em; 83 | text-align: center; 84 | left: 0; 85 | right: 0; 86 | top: 50%; 87 | color: white; 88 | } 89 | 90 | ::-webkit-scrollbar { 91 | height: 12px; 92 | } 93 | 94 | ::-webkit-scrollbar-track { 95 | background: #e8e8e8; 96 | border-radius: 12px; 97 | } 98 | 99 | ::-webkit-scrollbar-thumb { 100 | background-color: rgba(51, 51, 51, .7); 101 | border-radius: 12px; 102 | max-width: 10px; 103 | } 104 | 105 | #settings-btn { 106 | cursor: pointer; 107 | } 108 | #settings-container { 109 | display: none; 110 | } 111 | -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "comments": false, 3 | "presets": [ 4 | ["env", { 5 | "targets": { 6 | "browsers": ["last 5 versions", "ie > 10", "ios > 7", "android > 3"] 7 | } 8 | }] 9 | ] 10 | } -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "es6": true, 4 | "browser": true, 5 | "mocha": true, 6 | "node": true, 7 | "jquery": true 8 | }, 9 | "extends": "eslint:recommended", 10 | "parserOptions": { 11 | "ecmaVersion": 6, 12 | "sourceType": "module" 13 | }, 14 | "rules": { 15 | "no-console": 0, 16 | "no-undef" : 0, 17 | "no-case-declarations": 0, 18 | "no-empty": 0 19 | } 20 | } -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.jar binary 4 | *.mp3 binary 5 | *.mp4 binary 6 | *.ogv binary 7 | *.png binary 8 | *.webm binary 9 | *.swf binary 10 | *.swc binary 11 | *.fla binary 12 | *.xap binary 13 | 14 | -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.gitignore: -------------------------------------------------------------------------------- 1 | # silverlight stuff 2 | src/silverlight/obj/* 3 | src/silverlight/Bin/* 4 | build/AppManifest.xaml 5 | build/SilverlightMediaElementTestPage.html 6 | build/SilverlightMediaElement.pdb 7 | build/SilverlightMediaElement.dll 8 | tests/* 9 | newfeatures/* 10 | /mejs3/ 11 | node_modules 12 | local-build 13 | # PhpStorm/WebStorm configuration 14 | .idea 15 | media/* 16 | !media/README 17 | src/flash/flex_sdk_* 18 | coverage 19 | npm-debug.log 20 | tmp -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "stylelint-order" 4 | ], 5 | "rules": { 6 | "color-hex-case": ["lower"], 7 | "color-hex-length": "short", 8 | "declaration-block-no-duplicate-properties": [ 9 | true, 10 | { 11 | "ignore": [ 12 | "consecutive-duplicates-with-different-values" 13 | ] 14 | } 15 | ], 16 | "function-comma-space-after": "always-single-line", 17 | "function-comma-space-before": "never", 18 | "indentation": 4, 19 | "length-zero-no-unit": true, 20 | "number-leading-zero": "always", 21 | "number-no-trailing-zeros": true, 22 | "order/order": [ 23 | "custom-properties", 24 | "declarations" 25 | ], 26 | "order/properties-alphabetical-order": true, 27 | "property-case": "lower", 28 | "property-no-unknown": true, 29 | "selector-combinator-space-after": "always", 30 | "selector-combinator-space-before": "always", 31 | "selector-list-comma-newline-after": "always", 32 | "shorthand-property-no-redundant-values": true, 33 | "string-quotes": "single" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - node 4 | before_install: 5 | - "curl -L http://git.io/ejPSng | /bin/sh" 6 | after_success: 'npm run coveralls' -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/.versions: -------------------------------------------------------------------------------- 1 | johndyer:mediaelement@4.2.6 2 | jquery@1.11.10 3 | meteor@1.7.0 4 | modules@0.9.2 5 | modules-runtime@0.8.0 6 | underscore@1.0.10 7 | -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/TODO.md: -------------------------------------------------------------------------------- 1 | ### TODO 2 | 3 | #### Features to be implemented related to renderers and player 4 | 5 | *All items listed in https://github.com/mediaelement/mediaelement/labels/Feature* 6 | 7 | **NOTE** Please make sure any features are labeled with `Feature` to make them available with the link above. 8 | 9 | #### Known issues related to renderers and player 10 | 11 | *Known issues to be resolved listed in https://github.com/mediaelement/mediaelement/labels/Bug* 12 | 13 | **NOTE** Please make sure any bugs are labeled with `Bug` to make them available with the link above. 14 | 15 | ### Any features/issues related to elements in controlbar or additional 16 | 17 | *All items listed in https://github.com/mediaelement/mediaelement-plugins/issues* 18 | -------------------------------------------------------------------------------- /static/mediaelement-mediaelement-8474a01/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mediaelement", 3 | "homepage": "https://github.com/mediaelement/mediaelement", 4 | "description": "HTML5