| 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>
 |