123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>JSDoc: Source: flash-media-source.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: flash-media-source.js</h1>
-
-
- <section>
- <article>
- <pre class="prettyprint source linenums"><code>/**
- * @file flash-media-source.js
- */
- import document from 'global/document';
- import videojs from 'video.js';
- import FlashSourceBuffer from './flash-source-buffer';
- import FlashConstants from './flash-constants';
- import {parseContentType} from './codec-utils';
- /**
- * A flash implmentation of HTML MediaSources and a polyfill
- * for browsers that don't support native or HTML MediaSources..
- *
- * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource
- * @class FlashMediaSource
- * @extends videojs.EventTarget
- */
- export default class FlashMediaSource extends videojs.EventTarget {
- constructor() {
- super();
- this.sourceBuffers = [];
- this.readyState = 'closed';
- this.on(['sourceopen', 'webkitsourceopen'], (event) => {
- // find the swf where we will push media data
- this.swfObj = document.getElementById(event.swfId);
- this.player_ = videojs(this.swfObj.parentNode);
- this.tech_ = this.swfObj.tech;
- this.readyState = 'open';
- this.tech_.on('seeking', () => {
- let i = this.sourceBuffers.length;
- while (i--) {
- this.sourceBuffers[i].abort();
- }
- });
- // trigger load events
- if (this.swfObj) {
- this.swfObj.vjs_load();
- }
- });
- }
- /**
- * We have this function so that the html and flash interfaces
- * are the same.
- *
- * @private
- */
- addSeekableRange_() {
- // intentional no-op
- }
- /**
- * Create a new flash source buffer and add it to our flash media source.
- *
- * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/addSourceBuffer
- * @param {String} type the content-type of the source
- * @return {Object} the flash source buffer
- */
- addSourceBuffer(type) {
- let parsedType = parseContentType(type);
- let sourceBuffer;
- // if this is an FLV type, we'll push data to flash
- if (parsedType.type === 'video/mp2t' || parsedType.type === 'audio/mp2t') {
- // Flash source buffers
- sourceBuffer = new FlashSourceBuffer(this);
- } else {
- throw new Error('NotSupportedError (Video.js)');
- }
- this.sourceBuffers.push(sourceBuffer);
- return sourceBuffer;
- }
- /**
- * Signals the end of the stream.
- *
- * @link https://w3c.github.io/media-source/#widl-MediaSource-endOfStream-void-EndOfStreamError-error
- * @param {String=} error Signals that a playback error
- * has occurred. If specified, it must be either "network" or
- * "decode".
- */
- endOfStream(error) {
- if (error === 'network') {
- // MEDIA_ERR_NETWORK
- this.tech_.error(2);
- } else if (error === 'decode') {
- // MEDIA_ERR_DECODE
- this.tech_.error(3);
- }
- if (this.readyState !== 'ended') {
- this.readyState = 'ended';
- this.swfObj.vjs_endOfStream();
- }
- }
- }
- /**
- * Set or return the presentation duration.
- *
- * @param {Double} value the duration of the media in seconds
- * @param {Double} the current presentation duration
- * @link http://www.w3.org/TR/media-source/#widl-MediaSource-duration
- */
- try {
- Object.defineProperty(FlashMediaSource.prototype, 'duration', {
- /**
- * Return the presentation duration.
- *
- * @return {Double} the duration of the media in seconds
- * @link http://www.w3.org/TR/media-source/#widl-MediaSource-duration
- */
- get() {
- if (!this.swfObj) {
- return NaN;
- }
- // get the current duration from the SWF
- return this.swfObj.vjs_getProperty('duration');
- },
- /**
- * Set the presentation duration.
- *
- * @param {Double} value the duration of the media in seconds
- * @return {Double} the duration of the media in seconds
- * @link http://www.w3.org/TR/media-source/#widl-MediaSource-duration
- */
- set(value) {
- let i;
- let oldDuration = this.swfObj.vjs_getProperty('duration');
- this.swfObj.vjs_setProperty('duration', value);
- if (value < oldDuration) {
- // In MSE, this triggers the range removal algorithm which causes
- // an update to occur
- for (i = 0; i < this.sourceBuffers.length; i++) {
- this.sourceBuffers[i].remove(value, oldDuration);
- }
- }
- return value;
- }
- });
- } catch (e) {
- // IE8 throws if defineProperty is called on a non-DOM node. We
- // don't support IE8 but we shouldn't throw an error if loaded
- // there.
- FlashMediaSource.prototype.duration = NaN;
- }
- for (let property in FlashConstants) {
- FlashMediaSource[property] = FlashConstants[property];
- }
- </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>
|