/** * Copyright 2015 Mozilla Foundation * Copyright 2016 - 2020 Stephan Hesse, EMLIRI (c) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ export declare const AAC_SAMPLES_PER_FRAME = 1024; export declare const AAC_SAMPLING_FREQUENCIES: number[]; export declare const SOUND_CODECS: string[]; export declare const MP3_SOUND_CODEC_ID = 2; export declare const AAC_SOUND_CODEC_ID = 10; export declare type AudioFrame = { decodingTime: number; compositionTime: number; codecDescription: string; codecId: number; data: Uint8Array; rate: number; size: number; channels: number; samples: number; type: AudioFrameType; sampleDescriptionIndex: number; }; export declare enum AudioFrameType { HEADER = 0, RAW = 1 } export declare type AudioDetails = { sampleRate: number; sampleDepth: number; samplesPerFrame: number; numChannels: number; }; export declare const VIDEOCODECS: string[]; export declare const VP6_VIDEO_CODEC_ID = 4; export declare const AVC_VIDEO_CODEC_ID = 7; export declare type VideoFrame = { frameFlag: VideoFrameFlag; codecId: number; codecDescription: string; data: Uint8Array; type: VideoFrameType; decodingTime: number; compositionTime: number; horizontalOffset?: number; verticalOffset?: number; sampleDescriptionIndex: number; }; export declare enum VideoFrameFlag { KEY = 1, INTRA = 2 } export declare enum VideoFrameType { HEADER = 0, NALU = 1 } export declare enum MP4MuxFrameType { AUDIO = 8, VIDEO = 9 } export declare type MP4Track = { codecDescription?: string; codecId: number; timescale: number; duration: number; framerate?: number; width?: number; height?: number; samplerate?: number; channels?: number; samplesize?: number; audioObjectType?: number; language?: string; }; export declare type MP4MovieMetadata = { tracks: MP4Track[]; duration: number; audioTrackId: number; videoTrackId: number; audioBaseDts: number; videoBaseDts: number; }; export declare enum MP4MuxState { CAN_GENERATE_HEADER = 0, NEED_HEADER_DATA = 1, MAIN_PACKETS = 2 } export declare type MP4TrackState = { trackId: number; trackInfo: MP4Track; cachedDuration: number; samplesProcessed: number; initializationData: Uint8Array[]; mimeTypeCodec?: string; }; export declare class MP4Mux { private _movMetadata; private _fragmentedMode; private _generateHeader; private _trackStates; private _audioTrackState; private _videoTrackState; private _cachedFrames; private _filePos; private _fragmentCount; private _state; oncodecinfo: (codecs: string[]) => void; ondata: (data: Uint8Array, baseMediaDts: number) => void; constructor(_movMetadata: MP4MovieMetadata, _fragmentedMode?: boolean, _generateHeader?: boolean); /** * @returns Number of fragments/chunks written (only fragmented mode) */ getFragmnentCount(): number; /** * @returns {number} Position bytes offset of output file data */ getFilePosition(): number; getAudioTrackState(): MP4TrackState; getVideoTrackState(): MP4TrackState; getMovieMetadata(): MP4MovieMetadata; pushFrame(type: MP4MuxFrameType, codecId: number, data: Uint8Array, timestamp: number, isInitData?: boolean, isKeyframe?: boolean, cto?: number, audioDetails?: AudioDetails): void; flush(): void; reset(): void; private _getMovTracksMinCachedDurationSeconds; private _initNeedHeaderDataState; private _insertCodecInitData; private _generatePlainMovFile; private _createTrackBox; private _createPlainMovMediaData; private _haveAllInitData; private _makeMovHeader; private _generateMovieHeaderFragmentedMode; private _generateMovieFragment; }