123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>JSDoc: Source: videojs-contrib-media-sources.js</title>
- <script src="scripts/prettify/prettify.js"> </script>
- <script src="scripts/prettify/lang-css.js"> </script>
- <!--[if lt IE 9]>
- <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
- <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
- </head>
- <body>
- <div id="main">
- <h1 class="page-title">Source: videojs-contrib-media-sources.js</h1>
-
-
- <section>
- <article>
- <pre class="prettyprint source linenums"><code>/**
- * @file videojs-contrib-media-sources.js
- */
- import window from 'global/window';
- import FlashMediaSource from './flash-media-source';
- import HtmlMediaSource from './html-media-source';
- import videojs from 'video.js';
- let urlCount = 0;
- // ------------
- // Media Source
- // ------------
- const defaults = {
- // how to determine the MediaSource implementation to use. There
- // are three available modes:
- // - auto: use native MediaSources where available and Flash
- // everywhere else
- // - html5: always use native MediaSources
- // - flash: always use the Flash MediaSource polyfill
- mode: 'auto'
- };
- // store references to the media sources so they can be connected
- // to a video element (a swf object)
- // TODO: can we store this somewhere local to this module?
- videojs.mediaSources = {};
- /**
- * Provide a method for a swf object to notify JS that a
- * media source is now open.
- *
- * @param {String} msObjectURL string referencing the MSE Object URL
- * @param {String} swfId the swf id
- */
- const open = function(msObjectURL, swfId) {
- let mediaSource = videojs.mediaSources[msObjectURL];
- if (mediaSource) {
- mediaSource.trigger({type: 'sourceopen', swfId});
- } else {
- throw new Error('Media Source not found (Video.js)');
- }
- };
- /**
- * Check to see if the native MediaSource object exists and supports
- * an MP4 container with both H.264 video and AAC-LC audio.
- *
- * @return {Boolean} if native media sources are supported
- */
- const supportsNativeMediaSources = function() {
- return (!!window.MediaSource && !!window.MediaSource.isTypeSupported &&
- window.MediaSource.isTypeSupported('video/mp4;codecs="avc1.4d400d,mp4a.40.2"'));
- };
- /**
- * An emulation of the MediaSource API so that we can support
- * native and non-native functionality such as flash and
- * video/mp2t videos. returns an instance of HtmlMediaSource or
- * FlashMediaSource depending on what is supported and what options
- * are passed in.
- *
- * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/MediaSource
- * @param {Object} options options to use during setup.
- */
- export const MediaSource = function(options) {
- let settings = videojs.mergeOptions(defaults, options);
- this.MediaSource = {
- open,
- supportsNativeMediaSources
- };
- // determine whether HTML MediaSources should be used
- if (settings.mode === 'html5' ||
- (settings.mode === 'auto' && supportsNativeMediaSources())) {
- return new HtmlMediaSource();
- } else if (videojs.getTech('Flash')) {
- return new FlashMediaSource();
- }
- throw new Error('Cannot use Flash or Html5 to create a MediaSource for this video');
- };
- MediaSource.open = open;
- MediaSource.supportsNativeMediaSources = supportsNativeMediaSources;
- /**
- * A wrapper around the native URL for our MSE object
- * implementation, this object is exposed under videojs.URL
- *
- * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/URL
- */
- export const URL = {
- /**
- * A wrapper around the native createObjectURL for our objects.
- * This function maps a native or emulated mediaSource to a blob
- * url so that it can be loaded into video.js
- *
- * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
- * @param {MediaSource} object the object to create a blob url to
- */
- createObjectURL(object) {
- let objectUrlPrefix = 'blob:vjs-media-source/';
- let url;
- // use the native MediaSource to generate an object URL
- if (object instanceof HtmlMediaSource) {
- url = window.URL.createObjectURL(object.nativeMediaSource_);
- object.url_ = url;
- return url;
- }
- // if the object isn't an emulated MediaSource, delegate to the
- // native implementation
- if (!(object instanceof FlashMediaSource)) {
- url = window.URL.createObjectURL(object);
- object.url_ = url;
- return url;
- }
- // build a URL that can be used to map back to the emulated
- // MediaSource
- url = objectUrlPrefix + urlCount;
- urlCount++;
- // setup the mapping back to object
- videojs.mediaSources[url] = object;
- return url;
- }
- };
- videojs.MediaSource = MediaSource;
- videojs.URL = URL;
- </code></pre>
- </article>
- </section>
- </div>
- <nav>
- <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="FlashMediaSource.html">FlashMediaSource</a></li><li><a href="FlashSourceBuffer.html">FlashSourceBuffer</a></li><li><a href="HtmlMediaSource.html">HtmlMediaSource</a></li><li><a href="MessageHandlers.html">MessageHandlers</a></li><li><a href="VirtualSourceBuffer.html">VirtualSourceBuffer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#abort">abort</a></li><li><a href="global.html#addSourceBuffer">addSourceBuffer</a></li><li><a href="global.html#appendBuffer">appendBuffer</a></li><li><a href="global.html#appendGopInfo_">appendGopInfo_</a></li><li><a href="global.html#endOfStream">endOfStream</a></li><li><a href="global.html#FlashTransmuxerWorker">FlashTransmuxerWorker</a></li><li><a href="global.html#get">get</a></li><li><a href="global.html#gopsSafeToAlignWith">gopsSafeToAlignWith</a></li><li><a href="global.html#MediaSource">MediaSource</a></li><li><a href="global.html#open">open</a></li><li><a href="global.html#remove">remove</a></li><li><a href="global.html#removeGopBuffer">removeGopBuffer</a></li><li><a href="global.html#set">set</a></li><li><a href="global.html#supportsNativeMediaSources">supportsNativeMediaSources</a></li><li><a href="global.html#TransmuxerWorker">TransmuxerWorker</a></li><li><a href="global.html#updateGopBuffer">updateGopBuffer</a></li><li><a href="global.html#URL">URL</a></li></ul>
- </nav>
- <br class="clear">
- <footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.4</a> on Thu Nov 02 2017 12:03:25 GMT-0400 (EDT)
- </footer>
- <script> prettyPrint(); </script>
- <script src="scripts/linenumber.js"> </script>
- </body>
- </html>
|