kontainer-js
Version:
A media file format generator/parser that exposes a React-like API.
196 lines (137 loc) • 5.49 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _Component2 = require('../../core/Component');
var _Component3 = _interopRequireDefault(_Component2);
var _Writer = require('../../core/Writer');
var _Writer2 = _interopRequireDefault(_Writer);
var _Reader = require('../../core/Reader');
var _Reader2 = _interopRequireDefault(_Reader);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Box = function (_Component) {
(0, _inherits3.default)(Box, _Component);
function Box(type, props) {
(0, _classCallCheck3.default)(this, Box);
var _this = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(Box).call(this, type, props));
_this.size = 0;
return _this;
}
(0, _createClass3.default)(Box, [{
key: 'serialize',
value: function serialize(buffer) {
var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
//console.log('--- Box.serialize enter.');
var size = this.size;
var type = this.type;
var base = offset;
if (size < 4294967296) {
base += _Writer2.default.writeNumber(size, buffer, base, 4);
} else {
console.error('IsoBmff.Box.serialize(' + size + '): largesize(>4GB) is not supported.');
return 0;
}
base += _Writer2.default.writeString(type, buffer, base, 4);
if (type === 'uuid') {
base += _Writer2.default.writeString(this.props.extendedType, buffer, base, 16);
}
this.size = base - offset;
//console.log(`--- Box.serialize exit. size=${this.size}`);
return this.size;
}
}, {
key: 'getSize',
value: function getSize() {
return this.size;
}
}, {
key: 'setSize',
value: function setSize(size, buffer) {
var offset = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];
if (size < 4294967296) {
_Writer2.default.writeNumber(size, buffer, offset, 4);
} else {
console.error('IsoBmff.Box.setSize(' + size + '): largesize(>4GB) is not supported.');
return 0;
}
this.size = size;
}
// Parses buffer and returns props.
}], [{
key: 'parse',
value: function parse(buffer) {
var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
var LENGTH = buffer.length;
var size = void 0;
var type = void 0;
var extendedType = void 0;
var base = offset;
var readNum = void 0;
// Read size.
var _Reader$readNumber = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber2 = (0, _slicedToArray3.default)(_Reader$readNumber, 2);
readNum = _Reader$readNumber2[0];
size = _Reader$readNumber2[1];
base += readNum;
// Read boxType.
var _Reader$readString = _Reader2.default.readString(buffer, base, 4);
var _Reader$readString2 = (0, _slicedToArray3.default)(_Reader$readString, 2);
readNum = _Reader$readString2[0];
type = _Reader$readString2[1];
base += readNum;
if (size === 0) {
// box extends to end of file
void 0;
} else if (size === 1) {
var _Reader$readNumber3 = _Reader2.default.readNumber(buffer, base, 8);
// 64bit largesize
var _Reader$readNumber4 = (0, _slicedToArray3.default)(_Reader$readNumber3, 2);
readNum = _Reader$readNumber4[0];
size = _Reader$readNumber4[1];
base += readNum;
}
if (type === 'uuid') {
var _Reader$readString3 = _Reader2.default.readString(buffer, base, 16);
var _Reader$readString4 = (0, _slicedToArray3.default)(_Reader$readString3, 2);
readNum = _Reader$readString4[0];
extendedType = _Reader$readString4[1];
base += 16;
}
return [base - offset, {
size: size,
type: type,
extendedType: extendedType
}];
}
}, {
key: 'getMimeType',
value: function getMimeType(element) {
var results = element.querySelectorAll('hdlr');
var audioOnly = results.every(function (hdlr) {
return hdlr.props.handlerType === 'audio';
});
if (audioOnly) {
return 'audio/mp4';
}
return 'video/mp4';
}
}]);
return Box;
}(_Component3.default);
exports.default = Box;
Box.QUANTITY_ANY_NUMBER = _Component3.default.QUANTITY_ANY_NUMBER;
Box.QUANTITY_EXACTLY_ONE = _Component3.default.QUANTITY_EXACTLY_ONE;
Box.QUANTITY_ZERO_OR_ONE = _Component3.default.QUANTITY_ZERO_OR_ONE;