Comparing version 1.0.3 to 1.0.4
@@ -823,3 +823,3 @@ "use strict"; | ||
var FIRST_TIMESTAMP_BEHAVIORS = ["strict", "offset", "permissive"]; | ||
var _options, _writer, _mdat, _videoTrack, _audioTrack, _creationTime, _finalized, _validateOptions, validateOptions_fn, _writeHeader, writeHeader_fn, _prepareTracks, prepareTracks_fn, _addSampleToTrack, addSampleToTrack_fn, _validateTimestamp, validateTimestamp_fn, _writeCurrentChunk, writeCurrentChunk_fn, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn, _ensureNotFinalized, ensureNotFinalized_fn; | ||
var _options, _writer, _mdat, _videoTrack, _audioTrack, _creationTime, _finalized, _validateOptions, validateOptions_fn, _writeHeader, writeHeader_fn, _prepareTracks, prepareTracks_fn, _generateMpeg4AudioSpecificConfig, generateMpeg4AudioSpecificConfig_fn, _addSampleToTrack, addSampleToTrack_fn, _validateTimestamp, validateTimestamp_fn, _writeCurrentChunk, writeCurrentChunk_fn, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn, _ensureNotFinalized, ensureNotFinalized_fn; | ||
var Muxer = class { | ||
@@ -830,2 +830,4 @@ constructor(options) { | ||
__privateAdd(this, _prepareTracks); | ||
// https://wiki.multimedia.cx/index.php/MPEG-4_Audio | ||
__privateAdd(this, _generateMpeg4AudioSpecificConfig); | ||
__privateAdd(this, _addSampleToTrack); | ||
@@ -948,2 +950,9 @@ __privateAdd(this, _validateTimestamp); | ||
if (__privateGet(this, _options).audio) { | ||
let guessedCodecPrivate = __privateMethod(this, _generateMpeg4AudioSpecificConfig, generateMpeg4AudioSpecificConfig_fn).call( | ||
this, | ||
2, | ||
// Object type for AAC-LC, since it's the most common | ||
__privateGet(this, _options).audio.sampleRate, | ||
__privateGet(this, _options).audio.numberOfChannels | ||
); | ||
__privateSet(this, _audioTrack, { | ||
@@ -958,3 +967,3 @@ id: __privateGet(this, _options).video ? 2 : 1, | ||
timescale: __privateGet(this, _options).audio.sampleRate, | ||
codecPrivate: new Uint8Array(0), | ||
codecPrivate: guessedCodecPrivate, | ||
samples: [], | ||
@@ -968,2 +977,21 @@ writtenChunks: [], | ||
}; | ||
_generateMpeg4AudioSpecificConfig = new WeakSet(); | ||
generateMpeg4AudioSpecificConfig_fn = function(objectType, sampleRate, numberOfChannels) { | ||
let frequencyIndices = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; | ||
let frequencyIndex = frequencyIndices.indexOf(sampleRate); | ||
let channelConfig = numberOfChannels; | ||
let configBits = ""; | ||
configBits += objectType.toString(2).padStart(5, "0"); | ||
configBits += frequencyIndex.toString(2).padStart(4, "0"); | ||
if (frequencyIndex === 15) | ||
configBits += sampleRate.toString(2).padStart(24, "0"); | ||
configBits += channelConfig.toString(2).padStart(4, "0"); | ||
let paddingLength = Math.ceil(configBits.length / 8) * 8; | ||
configBits = configBits.padEnd(paddingLength, "0"); | ||
let configBytes = new Uint8Array(configBits.length / 8); | ||
for (let i = 0; i < configBits.length; i += 8) { | ||
configBytes[i / 8] = parseInt(configBits.slice(i, i + 8), 2); | ||
} | ||
return configBytes; | ||
}; | ||
_addSampleToTrack = new WeakSet(); | ||
@@ -970,0 +998,0 @@ addSampleToTrack_fn = function(track, data, type, timestamp, duration, meta) { |
{ | ||
"name": "mp4-muxer", | ||
"version": "1.0.3", | ||
"version": "1.0.4", | ||
"description": "MP4 multiplexer in pure TypeScript with support for WebCodecs API, video & audio.", | ||
@@ -9,3 +9,3 @@ "main": "./build/mp4-muxer.js", | ||
"scripts": { | ||
"watch": "node build.js", | ||
"watch": "node build.mjs", | ||
"check": "npx tsc --noEmit --skipLibCheck", | ||
@@ -12,0 +12,0 @@ "lint": "npx eslint src demo build" |
55517
1212