@norskvideo/moq-hang 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/catalog/audio.d.ts +139 -0
- package/catalog/audio.d.ts.map +1 -0
- package/catalog/audio.js +55 -0
- package/catalog/audio.js.map +1 -0
- package/catalog/consumer.d.ts +34 -0
- package/catalog/consumer.d.ts.map +1 -0
- package/catalog/consumer.js +30 -0
- package/catalog/consumer.js.map +1 -0
- package/catalog/container.d.ts +24 -0
- package/catalog/container.d.ts.map +1 -0
- package/catalog/container.js +30 -0
- package/catalog/container.js.map +1 -0
- package/catalog/format.d.ts +13 -0
- package/catalog/format.d.ts.map +1 -0
- package/catalog/format.js +24 -0
- package/catalog/format.js.map +1 -0
- package/catalog/index.d.ts +18 -0
- package/catalog/index.d.ts.map +1 -0
- package/catalog/index.js +19 -0
- package/catalog/index.js.map +1 -0
- package/catalog/integers.d.ts +23 -0
- package/catalog/integers.d.ts.map +1 -0
- package/catalog/integers.js +24 -0
- package/catalog/integers.js.map +1 -0
- package/catalog/priority.d.ts +7 -0
- package/catalog/priority.d.ts.map +1 -0
- package/catalog/priority.js +9 -0
- package/catalog/priority.js.map +1 -0
- package/catalog/producer.d.ts +31 -0
- package/catalog/producer.d.ts.map +1 -0
- package/catalog/producer.js +25 -0
- package/catalog/producer.js.map +1 -0
- package/catalog/root.d.ts +252 -0
- package/catalog/root.d.ts.map +1 -0
- package/catalog/root.js +17 -0
- package/catalog/root.js.map +1 -0
- package/catalog/root.test.d.ts +2 -0
- package/catalog/root.test.d.ts.map +1 -0
- package/catalog/root.test.js +20 -0
- package/catalog/root.test.js.map +1 -0
- package/catalog/timeline.d.ts +26 -0
- package/catalog/timeline.d.ts.map +1 -0
- package/catalog/timeline.js +33 -0
- package/catalog/timeline.js.map +1 -0
- package/catalog/track.d.ts +8 -0
- package/catalog/track.d.ts.map +1 -0
- package/catalog/track.js +7 -0
- package/catalog/track.js.map +1 -0
- package/catalog/video.d.ts +171 -0
- package/catalog/video.d.ts.map +1 -0
- package/catalog/video.js +87 -0
- package/catalog/video.js.map +1 -0
- package/container/cmaf/decode.d.ts +68 -0
- package/container/cmaf/decode.d.ts.map +1 -0
- package/container/cmaf/decode.js +303 -0
- package/container/cmaf/decode.js.map +1 -0
- package/container/cmaf/encode.d.ts +51 -0
- package/container/cmaf/encode.d.ts.map +1 -0
- package/container/cmaf/encode.js +834 -0
- package/container/cmaf/encode.js.map +1 -0
- package/container/cmaf/format.d.ts +12 -0
- package/container/cmaf/format.d.ts.map +1 -0
- package/container/cmaf/format.js +19 -0
- package/container/cmaf/format.js.map +1 -0
- package/container/cmaf/index.d.ts +9 -0
- package/container/cmaf/index.d.ts.map +1 -0
- package/container/cmaf/index.js +10 -0
- package/container/cmaf/index.js.map +1 -0
- package/container/consumer.d.ts +41 -0
- package/container/consumer.d.ts.map +1 -0
- package/container/consumer.js +424 -0
- package/container/consumer.js.map +1 -0
- package/container/consumer.test.d.ts +2 -0
- package/container/consumer.test.d.ts.map +1 -0
- package/container/consumer.test.js +396 -0
- package/container/consumer.test.js.map +1 -0
- package/container/format.d.ts +12 -0
- package/container/format.d.ts.map +1 -0
- package/container/format.js +3 -0
- package/container/format.js.map +1 -0
- package/container/index.d.ts +14 -0
- package/container/index.d.ts.map +1 -0
- package/container/index.js +18 -0
- package/container/index.js.map +1 -0
- package/container/legacy.d.ts +39 -0
- package/container/legacy.d.ts.map +1 -0
- package/container/legacy.js +53 -0
- package/container/legacy.js.map +1 -0
- package/container/timeline.d.ts +67 -0
- package/container/timeline.d.ts.map +1 -0
- package/container/timeline.js +87 -0
- package/container/timeline.js.map +1 -0
- package/container/types.d.ts +22 -0
- package/container/types.d.ts.map +1 -0
- package/container/types.js +22 -0
- package/container/types.js.map +1 -0
- package/index.d.ts +13 -0
- package/index.d.ts.map +1 -0
- package/index.js +18 -0
- package/index.js.map +1 -0
- package/package.json +37 -0
- package/util/aac.d.ts +8 -0
- package/util/aac.d.ts.map +1 -0
- package/util/aac.js +57 -0
- package/util/aac.js.map +1 -0
- package/util/aac.test.d.ts +2 -0
- package/util/aac.test.d.ts.map +1 -0
- package/util/aac.test.js +34 -0
- package/util/aac.test.js.map +1 -0
- package/util/hacks.d.ts +5 -0
- package/util/hacks.d.ts.map +1 -0
- package/util/hacks.js +6 -0
- package/util/hacks.js.map +1 -0
- package/util/hex.d.ts +5 -0
- package/util/hex.d.ts.map +1 -0
- package/util/hex.js +18 -0
- package/util/hex.js.map +1 -0
- package/util/index.d.ts +12 -0
- package/util/index.d.ts.map +1 -0
- package/util/index.js +18 -0
- package/util/index.js.map +1 -0
- package/util/latency.d.ts +38 -0
- package/util/latency.d.ts.map +1 -0
- package/util/latency.js +49 -0
- package/util/latency.js.map +1 -0
- package/util/libav.d.ts +3 -0
- package/util/libav.d.ts.map +1 -0
- package/util/libav.js +26 -0
- package/util/libav.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/container/cmaf/encode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MP4 encoding utilities for creating fMP4 init and data segments.\n * Used by MSE to create init segments (ftyp+moov) and data segments (moof+mdat).\n */\n\nimport {\n\ttype DataEntryUrlBox,\n\ttype DataInformationBox,\n\ttype DataReferenceBox,\n\ttype DecodingTimeToSampleBox,\n\ttype FileTypeBox,\n\ttype HandlerReferenceBox,\n\ttype IsoBoxStreamable,\n\ttype IsoBoxWriterMap,\n\ttype MediaBox,\n\ttype MediaDataBox,\n\ttype MediaHeaderBox,\n\ttype MediaInformationBox,\n\ttype MovieBox,\n\ttype MovieExtendsBox,\n\ttype MovieFragmentBox,\n\ttype MovieFragmentHeaderBox,\n\ttype MovieHeaderBox,\n\ttype SampleDescriptionBox,\n\ttype SampleTableBox,\n\ttype SoundMediaHeaderBox,\n\ttype TrackBox,\n\ttype TrackExtendsBox,\n\ttype TrackFragmentBaseMediaDecodeTimeBox,\n\ttype TrackFragmentBox,\n\ttype TrackFragmentHeaderBox,\n\ttype TrackHeaderBox,\n\ttype TrackRunBox,\n\ttype VideoMediaHeaderBox,\n\twriteDref,\n\twriteFtyp,\n\twriteHdlr,\n\twriteIsoBoxes,\n\twriteMdat,\n\twriteMdhd,\n\twriteMfhd,\n\twriteMvhd,\n\twriteSmhd,\n\twriteStsd,\n\twriteStts,\n\twriteTfdt,\n\twriteTfhd,\n\twriteTkhd,\n\twriteTrex,\n\twriteTrun,\n\twriteUrl,\n\twriteVmhd,\n} from \"@svta/cml-iso-bmff\";\n\nimport type * as Catalog from \"../../catalog\";\nimport * as Aac from \"../../util/aac\";\nimport * as Hex from \"../../util/hex\";\n\n// Identity matrix for tkhd/mvhd (stored as 16.16 fixed point)\nconst IDENTITY_MATRIX = [0x00010000, 0, 0, 0, 0x00010000, 0, 0, 0, 0x40000000];\n\n// Writers config - maps box types to their writer functions\nconst WRITERS: IsoBoxWriterMap = {\n\t// Init segment boxes\n\tftyp: writeFtyp,\n\tmvhd: writeMvhd,\n\ttkhd: writeTkhd,\n\tmdhd: writeMdhd,\n\thdlr: writeHdlr,\n\tvmhd: writeVmhd,\n\tsmhd: writeSmhd,\n\t\"url \": writeUrl,\n\tdref: writeDref,\n\tstsd: writeStsd,\n\tstts: writeStts,\n\ttrex: writeTrex,\n\t// Data segment boxes\n\tmfhd: writeMfhd,\n\ttfhd: writeTfhd,\n\ttfdt: writeTfdt,\n\ttrun: writeTrun,\n\tmdat: writeMdat,\n\t// For boxes without library writers, we create them manually as Uint8Arrays\n};\n\n/** Write boxes using our WRITERS config. */\nfunction writeBoxes(boxes: Iterable<IsoBoxStreamable>): Uint8Array[] {\n\treturn writeIsoBoxes(boxes, { writers: WRITERS });\n}\n\n/**\n * Helper to create a simple full box (version + flags + content) as raw bytes.\n * Used for boxes that don't have writers in the library.\n */\nfunction createFullBox(type: string, version: number, flags: number, content: Uint8Array): Uint8Array {\n\tconst size = 8 + 4 + content.length; // header + version/flags + content\n\tconst box = new Uint8Array(size);\n\tconst view = new DataView(box.buffer);\n\n\tview.setUint32(0, size, false);\n\tbox[4] = type.charCodeAt(0);\n\tbox[5] = type.charCodeAt(1);\n\tbox[6] = type.charCodeAt(2);\n\tbox[7] = type.charCodeAt(3);\n\tview.setUint32(8, (version << 24) | flags, false);\n\tbox.set(content, 12);\n\n\treturn box;\n}\n\n/**\n * Create an empty stsc (Sample to Chunk) box for fragmented MP4.\n */\nfunction createEmptyStsc(): Uint8Array {\n\t// stsc: version(1) + flags(3) + entry_count(4) = 4 bytes content\n\tconst content = new Uint8Array(4); // entry_count = 0\n\treturn createFullBox(\"stsc\", 0, 0, content);\n}\n\n/**\n * Create an empty stsz (Sample Size) box for fragmented MP4.\n */\nfunction createEmptyStsz(): Uint8Array {\n\t// stsz: version(1) + flags(3) + sample_size(4) + sample_count(4) = 8 bytes content\n\tconst content = new Uint8Array(8); // sample_size = 0, sample_count = 0\n\treturn createFullBox(\"stsz\", 0, 0, content);\n}\n\n/**\n * Create an empty stco (Chunk Offset) box for fragmented MP4.\n */\nfunction createEmptyStco(): Uint8Array {\n\t// stco: version(1) + flags(3) + entry_count(4) = 4 bytes content\n\tconst content = new Uint8Array(4); // entry_count = 0\n\treturn createFullBox(\"stco\", 0, 0, content);\n}\n\n/**\n * Create an avc1 (H.264 Visual Sample Entry) box with embedded avcC.\n * Built manually because the library doesn't properly serialize Uint8Array child boxes.\n */\nfunction createAvc1Box(width: number, height: number, avcC: Uint8Array): Uint8Array {\n\t// avc1 box structure:\n\t// - 6 bytes reserved (0)\n\t// - 2 bytes data_reference_index (1)\n\t// - 2 bytes pre_defined (0)\n\t// - 2 bytes reserved (0)\n\t// - 12 bytes pre_defined (0)\n\t// - 2 bytes width\n\t// - 2 bytes height\n\t// - 4 bytes horizresolution (0x00480000 = 72 dpi)\n\t// - 4 bytes vertresolution (0x00480000 = 72 dpi)\n\t// - 4 bytes reserved (0)\n\t// - 2 bytes frame_count (1)\n\t// - 32 bytes compressorname (null-padded string)\n\t// - 2 bytes depth (0x0018 = 24)\n\t// - 2 bytes pre_defined (-1 = 0xFFFF)\n\t// - child boxes (avcC)\n\n\tconst avcCSize = 8 + avcC.length; // box header + payload\n\tconst avc1ContentSize = 6 + 2 + 2 + 2 + 12 + 2 + 2 + 4 + 4 + 4 + 2 + 32 + 2 + 2 + avcCSize;\n\tconst avc1Size = 8 + avc1ContentSize; // box header + content\n\n\tconst box = new Uint8Array(avc1Size);\n\tconst view = new DataView(box.buffer);\n\tlet offset = 0;\n\n\t// Box header\n\tview.setUint32(offset, avc1Size, false);\n\toffset += 4;\n\tbox[offset++] = 0x61; // 'a'\n\tbox[offset++] = 0x76; // 'v'\n\tbox[offset++] = 0x63; // 'c'\n\tbox[offset++] = 0x31; // '1'\n\n\t// SampleEntry fields\n\toffset += 6; // reserved (6 bytes of 0)\n\tview.setUint16(offset, 1, false);\n\toffset += 2; // data_reference_index = 1\n\n\t// VisualSampleEntry fields\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // pre_defined\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // reserved\n\toffset += 12; // pre_defined (12 bytes of 0)\n\tview.setUint16(offset, width, false);\n\toffset += 2;\n\tview.setUint16(offset, height, false);\n\toffset += 2;\n\tview.setUint32(offset, 0x00480000, false);\n\toffset += 4; // horizresolution (72 dpi)\n\tview.setUint32(offset, 0x00480000, false);\n\toffset += 4; // vertresolution (72 dpi)\n\tview.setUint32(offset, 0, false);\n\toffset += 4; // reserved\n\tview.setUint16(offset, 1, false);\n\toffset += 2; // frame_count = 1\n\toffset += 32; // compressorname (32 bytes of 0)\n\tview.setUint16(offset, 0x0018, false);\n\toffset += 2; // depth = 24\n\tview.setUint16(offset, 0xffff, false);\n\toffset += 2; // pre_defined = -1\n\n\t// avcC child box\n\tview.setUint32(offset, avcCSize, false);\n\toffset += 4;\n\tbox[offset++] = 0x61; // 'a'\n\tbox[offset++] = 0x76; // 'v'\n\tbox[offset++] = 0x63; // 'c'\n\tbox[offset++] = 0x43; // 'C'\n\tbox.set(avcC, offset);\n\n\treturn box;\n}\n\n/**\n * Creates an MSE-compatible initialization segment (ftyp + moov) for H.264 video.\n *\n * @example\n * ```ts\n * // From WebCodecs EncodedVideoChunkMetadata\n * const config = await encoder.encode(frame);\n * const metadata = config.decoderConfig;\n *\n * const initSegment = createVideoInitSegment({\n * width: metadata.codedWidth,\n * height: metadata.codedHeight,\n * avcC: new Uint8Array(metadata.description),\n * });\n *\n * sourceBuffer.appendBuffer(initSegment);\n * ```\n */\nexport function createVideoInitSegment(config: Catalog.VideoConfig): Uint8Array {\n\tconst { codedWidth, codedHeight, description } = config;\n\tif (!codedWidth || !codedHeight || !description) {\n\t\tthrow new Error(\"Missing required fields to create video init segment\");\n\t}\n\n\t// Legacy container always uses microsecond timescale and track ID 1.\n\t// For CMAF, the init segment in the catalog is authoritative; this builder\n\t// is only used for the legacy path.\n\tconst timescale = 1_000_000;\n\tconst trackId = 1;\n\n\t// ftyp - File Type Box\n\tconst ftyp: FileTypeBox = {\n\t\ttype: \"ftyp\",\n\t\tmajorBrand: \"isom\",\n\t\tminorVersion: 0x200,\n\t\tcompatibleBrands: [\"isom\", \"iso6\", \"mp41\"],\n\t};\n\n\t// mvhd - Movie Header Box\n\tconst mvhd: MovieHeaderBox = {\n\t\ttype: \"mvhd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tcreationTime: 0,\n\t\tmodificationTime: 0,\n\t\ttimescale: timescale,\n\t\tduration: 0, // Unknown/fragmented\n\t\trate: 0x00010000, // 1.0 in 16.16 fixed point\n\t\tvolume: 0x0100, // 1.0 in 8.8 fixed point\n\t\treserved1: 0,\n\t\treserved2: [0, 0],\n\t\tmatrix: IDENTITY_MATRIX,\n\t\tpreDefined: [0, 0, 0, 0, 0, 0],\n\t\tnextTrackId: trackId + 1,\n\t};\n\n\t// tkhd - Track Header Box\n\tconst tkhd: TrackHeaderBox = {\n\t\ttype: \"tkhd\",\n\t\tversion: 0,\n\t\tflags: 0x000003, // Track enabled + in movie\n\t\tcreationTime: 0,\n\t\tmodificationTime: 0,\n\t\ttrackId: trackId,\n\t\treserved1: 0,\n\t\tduration: 0,\n\t\treserved2: [0, 0],\n\t\tlayer: 0,\n\t\talternateGroup: 0,\n\t\tvolume: 0, // Video tracks have 0 volume\n\t\treserved3: 0,\n\t\tmatrix: IDENTITY_MATRIX,\n\t\twidth: codedWidth * 0x10000, // 16.16 fixed point (avoid << which produces signed int)\n\t\theight: codedHeight * 0x10000,\n\t};\n\n\t// mdhd - Media Header Box\n\tconst mdhd: MediaHeaderBox = {\n\t\ttype: \"mdhd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tcreationTime: 0,\n\t\tmodificationTime: 0,\n\t\ttimescale: timescale,\n\t\tduration: 0,\n\t\tlanguage: \"und\",\n\t\tpreDefined: 0,\n\t};\n\n\t// hdlr - Handler Reference Box\n\tconst hdlr: HandlerReferenceBox = {\n\t\ttype: \"hdlr\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tpreDefined: 0,\n\t\thandlerType: \"vide\",\n\t\treserved: [0, 0, 0],\n\t\tname: \"VideoHandler\",\n\t};\n\n\t// vmhd - Video Media Header Box\n\tconst vmhd: VideoMediaHeaderBox = {\n\t\ttype: \"vmhd\",\n\t\tversion: 0,\n\t\tflags: 1, // Required to be 1\n\t\tgraphicsmode: 0,\n\t\topcolor: [0, 0, 0],\n\t};\n\n\t// url - Data Entry URL Box (self-contained)\n\tconst urlBox: DataEntryUrlBox = {\n\t\ttype: \"url \",\n\t\tversion: 0,\n\t\tflags: 0x000001, // Self-contained flag\n\t\tlocation: \"\",\n\t};\n\n\t// dref - Data Reference Box\n\tconst dref: DataReferenceBox = {\n\t\ttype: \"dref\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tentryCount: 1,\n\t\tentries: [urlBox],\n\t};\n\n\t// dinf - Data Information Box\n\tconst dinf: DataInformationBox = {\n\t\ttype: \"dinf\",\n\t\tboxes: [dref],\n\t};\n\n\t// Build the avc1 box manually since the library doesn't properly serialize Uint8Array children\n\tconst avc1Box = createAvc1Box(codedWidth, codedHeight, Hex.toBytes(description));\n\n\t// stsd - Sample Description Box\n\tconst stsd: SampleDescriptionBox = {\n\t\ttype: \"stsd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tentryCount: 1,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Raw avc1 box since library doesn't handle avcC children\n\t\tentries: [avc1Box] as any[],\n\t};\n\n\t// stts - Decoding Time to Sample (empty for fragmented)\n\tconst stts: DecodingTimeToSampleBox = {\n\t\ttype: \"stts\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tentryCount: 0,\n\t\tentries: [],\n\t};\n\n\t// Create raw boxes for types without library writers\n\tconst stsc = createEmptyStsc();\n\tconst stsz = createEmptyStsz();\n\tconst stco = createEmptyStco();\n\n\t// stbl - Sample Table Box\n\t// Note: stsc, stsz, stco are raw Uint8Arrays since the library doesn't have writers for them\n\tconst stbl: SampleTableBox = {\n\t\ttype: \"stbl\",\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Raw boxes for types without library writers\n\t\tboxes: [stsd, stts, stsc, stsz, stco] as any[],\n\t};\n\n\t// minf - Media Information Box\n\tconst minf: MediaInformationBox = {\n\t\ttype: \"minf\",\n\t\tboxes: [vmhd, dinf, stbl],\n\t};\n\n\t// mdia - Media Box\n\tconst mdia: MediaBox = {\n\t\ttype: \"mdia\",\n\t\tboxes: [mdhd, hdlr, minf],\n\t};\n\n\t// trak - Track Box\n\tconst trak: TrackBox = {\n\t\ttype: \"trak\",\n\t\tboxes: [tkhd, mdia],\n\t};\n\n\t// trex - Track Extends Box (required for fragmented MP4)\n\tconst trex: TrackExtendsBox = {\n\t\ttype: \"trex\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\ttrackId: trackId,\n\t\tdefaultSampleDescriptionIndex: 1,\n\t\tdefaultSampleDuration: 0,\n\t\tdefaultSampleSize: 0,\n\t\tdefaultSampleFlags: 0,\n\t};\n\n\t// mvex - Movie Extends Box (signals fragmented MP4)\n\tconst mvex: MovieExtendsBox = {\n\t\ttype: \"mvex\",\n\t\tboxes: [trex],\n\t};\n\n\t// moov - Movie Box\n\tconst moov: MovieBox = {\n\t\ttype: \"moov\",\n\t\tboxes: [mvhd, trak, mvex],\n\t};\n\n\t// Write all boxes and concatenate\n\tconst buffers = writeBoxes([ftyp, moov]);\n\tconst totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);\n\tconst result = new Uint8Array(totalLength);\n\n\tlet offset = 0;\n\tfor (const buf of buffers) {\n\t\tresult.set(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength), offset);\n\t\toffset += buf.byteLength;\n\t}\n\n\treturn result;\n}\n\n/**\n * Creates an MSE-compatible initialization segment (ftyp + moov) for audio.\n * Supports AAC (mp4a) and Opus codecs.\n */\nexport function createAudioInitSegment(config: Catalog.AudioConfig): Uint8Array {\n\tconst { sampleRate, numberOfChannels, description, codec } = config;\n\n\t// Legacy container always uses microsecond timescale and track ID 1.\n\tconst timescale = 1_000_000;\n\tconst trackId = 1;\n\n\t// ftyp - File Type Box\n\tconst ftyp: FileTypeBox = {\n\t\ttype: \"ftyp\",\n\t\tmajorBrand: \"isom\",\n\t\tminorVersion: 0x200,\n\t\tcompatibleBrands: [\"isom\", \"iso6\", \"mp41\"],\n\t};\n\n\t// mvhd - Movie Header Box\n\tconst mvhd: MovieHeaderBox = {\n\t\ttype: \"mvhd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tcreationTime: 0,\n\t\tmodificationTime: 0,\n\t\ttimescale: timescale,\n\t\tduration: 0,\n\t\trate: 0x00010000,\n\t\tvolume: 0x0100,\n\t\treserved1: 0,\n\t\treserved2: [0, 0],\n\t\tmatrix: IDENTITY_MATRIX,\n\t\tpreDefined: [0, 0, 0, 0, 0, 0],\n\t\tnextTrackId: trackId + 1,\n\t};\n\n\t// tkhd - Track Header Box\n\tconst tkhd: TrackHeaderBox = {\n\t\ttype: \"tkhd\",\n\t\tversion: 0,\n\t\tflags: 0x000003,\n\t\tcreationTime: 0,\n\t\tmodificationTime: 0,\n\t\ttrackId: trackId,\n\t\treserved1: 0,\n\t\tduration: 0,\n\t\treserved2: [0, 0],\n\t\tlayer: 0,\n\t\talternateGroup: 0,\n\t\tvolume: 0x0100, // Audio tracks have volume (1.0 in 8.8 fixed point)\n\t\treserved3: 0,\n\t\tmatrix: IDENTITY_MATRIX,\n\t\twidth: 0,\n\t\theight: 0,\n\t};\n\n\t// mdhd - Media Header Box\n\tconst mdhd: MediaHeaderBox = {\n\t\ttype: \"mdhd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tcreationTime: 0,\n\t\tmodificationTime: 0,\n\t\ttimescale: timescale,\n\t\tduration: 0,\n\t\tlanguage: \"und\",\n\t\tpreDefined: 0,\n\t};\n\n\t// hdlr - Handler Reference Box\n\tconst hdlr: HandlerReferenceBox = {\n\t\ttype: \"hdlr\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tpreDefined: 0,\n\t\thandlerType: \"soun\",\n\t\treserved: [0, 0, 0],\n\t\tname: \"SoundHandler\",\n\t};\n\n\t// smhd - Sound Media Header Box\n\tconst smhd: SoundMediaHeaderBox = {\n\t\ttype: \"smhd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tbalance: 0,\n\t\treserved: 0,\n\t};\n\n\t// url - Data Entry URL Box (self-contained)\n\tconst urlBox: DataEntryUrlBox = {\n\t\ttype: \"url \",\n\t\tversion: 0,\n\t\tflags: 0x000001,\n\t\tlocation: \"\",\n\t};\n\n\t// dref - Data Reference Box\n\tconst dref: DataReferenceBox = {\n\t\ttype: \"dref\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tentryCount: 1,\n\t\tentries: [urlBox],\n\t};\n\n\t// dinf - Data Information Box\n\tconst dinf: DataInformationBox = {\n\t\ttype: \"dinf\",\n\t\tboxes: [dref],\n\t};\n\n\t// Build codec-specific sample entry (manually to ensure child boxes are properly serialized)\n\tconst sampleEntry = createAudioSampleEntry(codec, sampleRate, numberOfChannels, description);\n\n\t// stsd - Sample Description Box\n\tconst stsd: SampleDescriptionBox = {\n\t\ttype: \"stsd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tentryCount: 1,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Raw sample entry box\n\t\tentries: [sampleEntry] as any[],\n\t};\n\n\t// stts - Decoding Time to Sample (empty for fragmented)\n\tconst stts: DecodingTimeToSampleBox = {\n\t\ttype: \"stts\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tentryCount: 0,\n\t\tentries: [],\n\t};\n\n\t// Create raw boxes for types without library writers\n\tconst stsc = createEmptyStsc();\n\tconst stsz = createEmptyStsz();\n\tconst stco = createEmptyStco();\n\n\t// stbl - Sample Table Box\n\t// Note: stsc, stsz, stco are raw Uint8Arrays since the library doesn't have writers for them\n\tconst stbl: SampleTableBox = {\n\t\ttype: \"stbl\",\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Raw boxes for types without library writers\n\t\tboxes: [stsd, stts, stsc, stsz, stco] as any[],\n\t};\n\n\t// minf - Media Information Box\n\tconst minf: MediaInformationBox = {\n\t\ttype: \"minf\",\n\t\tboxes: [smhd, dinf, stbl],\n\t};\n\n\t// mdia - Media Box\n\tconst mdia: MediaBox = {\n\t\ttype: \"mdia\",\n\t\tboxes: [mdhd, hdlr, minf],\n\t};\n\n\t// trak - Track Box\n\tconst trak: TrackBox = {\n\t\ttype: \"trak\",\n\t\tboxes: [tkhd, mdia],\n\t};\n\n\t// trex - Track Extends Box\n\tconst trex: TrackExtendsBox = {\n\t\ttype: \"trex\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\ttrackId: trackId,\n\t\tdefaultSampleDescriptionIndex: 1,\n\t\tdefaultSampleDuration: 0,\n\t\tdefaultSampleSize: 0,\n\t\tdefaultSampleFlags: 0,\n\t};\n\n\t// mvex - Movie Extends Box\n\tconst mvex: MovieExtendsBox = {\n\t\ttype: \"mvex\",\n\t\tboxes: [trex],\n\t};\n\n\t// moov - Movie Box\n\tconst moov: MovieBox = {\n\t\ttype: \"moov\",\n\t\tboxes: [mvhd, trak, mvex],\n\t};\n\n\t// Write all boxes and concatenate\n\tconst buffers = writeBoxes([ftyp, moov]);\n\tconst totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);\n\tconst result = new Uint8Array(totalLength);\n\n\tlet offset = 0;\n\tfor (const buf of buffers) {\n\t\tresult.set(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength), offset);\n\t\toffset += buf.byteLength;\n\t}\n\n\treturn result;\n}\n\n/**\n * Create an audio sample entry box (mp4a or Opus) with embedded codec config.\n * Built manually because the library doesn't properly serialize Uint8Array child boxes.\n */\nfunction createAudioSampleEntry(\n\tcodec: string,\n\tsampleRate: number,\n\tchannelCount: number,\n\tdescription?: string,\n): Uint8Array {\n\tif (codec.startsWith(\"mp4a\")) {\n\t\treturn createMp4aBox(sampleRate, channelCount, description);\n\t} else if (codec === \"opus\") {\n\t\treturn createOpusBox(sampleRate, channelCount, description);\n\t}\n\tthrow new Error(`Unsupported audio codec: ${codec}`);\n}\n\n/**\n * Create an mp4a (AAC Audio Sample Entry) box with embedded esds.\n */\nfunction createMp4aBox(sampleRate: number, channelCount: number, description?: string): Uint8Array {\n\tconst esds = createEsdsBox(sampleRate, channelCount, description);\n\n\t// mp4a box structure (AudioSampleEntry):\n\t// - 6 bytes reserved (0)\n\t// - 2 bytes data_reference_index (1)\n\t// - 8 bytes reserved (0) - includes reserved2[2] and pre_defined fields\n\t// - 2 bytes channelcount\n\t// - 2 bytes samplesize (16)\n\t// - 2 bytes pre_defined (0)\n\t// - 2 bytes reserved (0)\n\t// - 4 bytes samplerate (16.16 fixed point)\n\t// - child boxes (esds)\n\n\tconst mp4aContentSize = 6 + 2 + 8 + 2 + 2 + 2 + 2 + 4 + esds.length;\n\tconst mp4aSize = 8 + mp4aContentSize;\n\n\tconst box = new Uint8Array(mp4aSize);\n\tconst view = new DataView(box.buffer);\n\tlet offset = 0;\n\n\t// Box header\n\tview.setUint32(offset, mp4aSize, false);\n\toffset += 4;\n\tbox[offset++] = 0x6d; // 'm'\n\tbox[offset++] = 0x70; // 'p'\n\tbox[offset++] = 0x34; // '4'\n\tbox[offset++] = 0x61; // 'a'\n\n\t// SampleEntry fields\n\toffset += 6; // reserved (6 bytes of 0)\n\tview.setUint16(offset, 1, false);\n\toffset += 2; // data_reference_index = 1\n\n\t// AudioSampleEntry fields\n\toffset += 8; // reserved (8 bytes of 0)\n\tview.setUint16(offset, channelCount, false);\n\toffset += 2;\n\tview.setUint16(offset, 16, false);\n\toffset += 2; // samplesize = 16\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // pre_defined\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // reserved\n\tview.setUint32(offset, sampleRate * 0x10000, false);\n\toffset += 4; // samplerate (16.16 fixed point)\n\n\t// esds child box (already includes box header)\n\tbox.set(esds, offset);\n\n\treturn box;\n}\n\n/**\n * Create an Opus (Opus Audio Sample Entry) box with embedded dOps.\n */\nfunction createOpusBox(sampleRate: number, channelCount: number, description?: string): Uint8Array {\n\tconst dOps = createDOpsBox(channelCount, sampleRate, description);\n\n\t// Opus box structure (AudioSampleEntry):\n\t// Same structure as mp4a\n\tconst opusContentSize = 6 + 2 + 8 + 2 + 2 + 2 + 2 + 4 + dOps.length;\n\tconst opusSize = 8 + opusContentSize;\n\n\tconst box = new Uint8Array(opusSize);\n\tconst view = new DataView(box.buffer);\n\tlet offset = 0;\n\n\t// Box header\n\tview.setUint32(offset, opusSize, false);\n\toffset += 4;\n\tbox[offset++] = 0x4f; // 'O'\n\tbox[offset++] = 0x70; // 'p'\n\tbox[offset++] = 0x75; // 'u'\n\tbox[offset++] = 0x73; // 's'\n\n\t// SampleEntry fields\n\toffset += 6; // reserved (6 bytes of 0)\n\tview.setUint16(offset, 1, false);\n\toffset += 2; // data_reference_index = 1\n\n\t// AudioSampleEntry fields\n\toffset += 8; // reserved (8 bytes of 0)\n\tview.setUint16(offset, channelCount, false);\n\toffset += 2;\n\tview.setUint16(offset, 16, false);\n\toffset += 2; // samplesize = 16\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // pre_defined\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // reserved\n\tview.setUint32(offset, sampleRate * 0x10000, false);\n\toffset += 4; // samplerate (16.16 fixed point)\n\n\t// dOps child box (already includes box header)\n\tbox.set(dOps, offset);\n\n\treturn box;\n}\n\n/**\n * Creates an esds (Elementary Stream Descriptor) box for AAC.\n * The description from WebCodecs is the AudioSpecificConfig.\n * If no description is provided, generates one from sampleRate and channelCount.\n */\nfunction createEsdsBox(sampleRate: number, channelCount: number, description?: string): Uint8Array {\n\tconst audioSpecificConfig = description\n\t\t? Hex.toBytes(description)\n\t\t: Aac.audioSpecificConfig(sampleRate, channelCount);\n\n\t// ES_Descriptor structure:\n\t// - tag (0x03) + size + ES_ID (2) + flags (1)\n\t// - DecoderConfigDescriptor: tag (0x04) + size + objectTypeIndication (1) + streamType (1) + bufferSizeDB (3) + maxBitrate (4) + avgBitrate (4)\n\t// - DecoderSpecificInfo: tag (0x05) + size + AudioSpecificConfig\n\t// - SLConfigDescriptor: tag (0x06) + size + predefined (1)\n\n\tconst decSpecificInfoSize = audioSpecificConfig.length;\n\tconst decConfigDescSize = 13 + 2 + decSpecificInfoSize; // 13 fixed + tag/size + ASC\n\tconst esDescSize = 3 + 2 + decConfigDescSize + 3; // 3 fixed + tag/size + DCD + SLC (3 bytes)\n\n\tconst esdsSize = 12 + 2 + esDescSize; // 4 (size) + 4 (type) + 4 (version/flags) + tag/size + ESD\n\tconst esds = new Uint8Array(esdsSize);\n\tconst view = new DataView(esds.buffer);\n\n\tlet offset = 0;\n\n\t// Box header\n\tview.setUint32(offset, esdsSize, false);\n\toffset += 4;\n\tesds[offset++] = 0x65; // 'e'\n\tesds[offset++] = 0x73; // 's'\n\tesds[offset++] = 0x64; // 'd'\n\tesds[offset++] = 0x73; // 's'\n\n\t// Version and flags (full box)\n\tview.setUint32(offset, 0, false);\n\toffset += 4;\n\n\t// ES_Descriptor\n\tesds[offset++] = 0x03; // tag\n\tesds[offset++] = esDescSize; // size (assuming < 128)\n\n\tview.setUint16(offset, 0, false);\n\toffset += 2; // ES_ID\n\tesds[offset++] = 0; // flags\n\n\t// DecoderConfigDescriptor\n\tesds[offset++] = 0x04; // tag\n\tesds[offset++] = decConfigDescSize; // size\n\n\tesds[offset++] = 0x40; // objectTypeIndication: Audio ISO/IEC 14496-3 (AAC)\n\tesds[offset++] = 0x15; // streamType (5 = audio) << 2 | upstream (0) << 1 | reserved (1)\n\tesds[offset++] = 0x00; // bufferSizeDB (3 bytes)\n\tesds[offset++] = 0x00;\n\tesds[offset++] = 0x00;\n\tview.setUint32(offset, 0, false);\n\toffset += 4; // maxBitrate\n\tview.setUint32(offset, 0, false);\n\toffset += 4; // avgBitrate\n\n\t// DecoderSpecificInfo (AudioSpecificConfig)\n\tesds[offset++] = 0x05; // tag\n\tesds[offset++] = decSpecificInfoSize; // size\n\tesds.set(audioSpecificConfig, offset);\n\toffset += decSpecificInfoSize;\n\n\t// SLConfigDescriptor\n\tesds[offset++] = 0x06; // tag\n\tesds[offset++] = 0x01; // size\n\tesds[offset++] = 0x02; // predefined = MP4\n\n\treturn esds;\n}\n\n/**\n * Creates a dOps (Opus Specific) box.\n * See https://opus-codec.org/docs/opus_in_isobmff.html\n */\nfunction createDOpsBox(channelCount: number, sampleRate: number, description?: string): Uint8Array {\n\t// If description is provided, it's the OpusHead without the magic signature\n\tif (description) {\n\t\tconst opusHead = Hex.toBytes(description);\n\t\tconst dOpsSize = 8 + opusHead.length;\n\t\tconst dOps = new Uint8Array(dOpsSize);\n\t\tconst view = new DataView(dOps.buffer);\n\n\t\tview.setUint32(0, dOpsSize, false);\n\t\tdOps[4] = 0x64; // 'd'\n\t\tdOps[5] = 0x4f; // 'O'\n\t\tdOps[6] = 0x70; // 'p'\n\t\tdOps[7] = 0x73; // 's'\n\t\tdOps.set(opusHead, 8);\n\n\t\treturn dOps;\n\t}\n\n\t// Build minimal dOps box\n\t// dOps structure: Version (1) + OutputChannelCount (1) + PreSkip (2) +\n\t// InputSampleRate (4) + OutputGain (2) + ChannelMappingFamily (1)\n\tconst dOpsSize = 8 + 11; // box header + content\n\tconst dOps = new Uint8Array(dOpsSize);\n\tconst view = new DataView(dOps.buffer);\n\n\tlet offset = 0;\n\tview.setUint32(offset, dOpsSize, false);\n\toffset += 4;\n\tdOps[offset++] = 0x64; // 'd'\n\tdOps[offset++] = 0x4f; // 'O'\n\tdOps[offset++] = 0x70; // 'p'\n\tdOps[offset++] = 0x73; // 's'\n\n\tdOps[offset++] = 0; // Version\n\tdOps[offset++] = channelCount;\n\tview.setUint16(offset, 312, false);\n\toffset += 2; // PreSkip (typical value)\n\tview.setUint32(offset, sampleRate, false);\n\toffset += 4; // InputSampleRate\n\tview.setInt16(offset, 0, false);\n\toffset += 2; // OutputGain\n\tdOps[offset++] = 0; // ChannelMappingFamily (0 = mono/stereo)\n\n\treturn dOps;\n}\n\nexport interface DataSegmentOptions {\n\t/** Raw frame data */\n\tdata: Uint8Array;\n\t/** Timestamp in timescale units */\n\ttimestamp: number;\n\t/** Duration in timescale units */\n\tduration: number;\n\t/** Whether this is a keyframe */\n\tkeyframe: boolean;\n\t/** Sequence number for this fragment */\n\tsequence: number;\n\t/** Track ID (default: 1) */\n\ttrackId?: number;\n}\n\n/**\n * Encode a raw frame into a moof+mdat segment for MSE.\n *\n * @param opts - Options for the data segment\n * @returns The encoded moof+mdat segment\n */\nexport function encodeDataSegment(opts: DataSegmentOptions): Uint8Array {\n\tconst { data, timestamp, duration, keyframe, sequence, trackId = 1 } = opts;\n\n\t// Sample flags:\n\t// - sample_depends_on: bits 25-24 (2 = does not depend on others for IDR, 1 = depends on others)\n\t// - sample_is_non_sync_sample: bit 16 (0 = sync/keyframe, 1 = non-sync)\n\t// For keyframe: depends_on=2 (0x02000000), non_sync=0\n\t// For non-keyframe: depends_on=1 (0x01000000), non_sync=1 (0x00010000)\n\tconst sampleFlags = keyframe ? 0x02000000 : 0x01010000;\n\n\t// mfhd - Movie Fragment Header\n\tconst mfhd: MovieFragmentHeaderBox = {\n\t\ttype: \"mfhd\",\n\t\tversion: 0,\n\t\tflags: 0,\n\t\tsequenceNumber: sequence,\n\t};\n\n\t// tfhd - Track Fragment Header\n\t// Flags: default-base-is-moof (0x020000)\n\tconst tfhd: TrackFragmentHeaderBox = {\n\t\ttype: \"tfhd\",\n\t\tversion: 0,\n\t\tflags: 0x020000,\n\t\ttrackId,\n\t};\n\n\t// tfdt - Track Fragment Base Media Decode Time\n\tconst tfdt: TrackFragmentBaseMediaDecodeTimeBox = {\n\t\ttype: \"tfdt\",\n\t\tversion: 1, // version 1 for 64-bit baseMediaDecodeTime\n\t\tflags: 0,\n\t\tbaseMediaDecodeTime: timestamp,\n\t};\n\n\t// trun - Track Run\n\t// Flags: data-offset-present (0x000001) | sample-duration-present (0x000100) |\n\t// sample-size-present (0x000200) | sample-flags-present (0x000400)\n\tconst trun: TrackRunBox = {\n\t\ttype: \"trun\",\n\t\tversion: 0,\n\t\tflags: 0x000001 | 0x000100 | 0x000200 | 0x000400,\n\t\tsampleCount: 1,\n\t\tdataOffset: 0, // Will be calculated after we know moof size\n\t\tsamples: [\n\t\t\t{\n\t\t\t\tsampleDuration: duration,\n\t\t\t\tsampleSize: data.byteLength,\n\t\t\t\tsampleFlags,\n\t\t\t},\n\t\t],\n\t};\n\n\t// traf - Track Fragment\n\tconst traf: TrackFragmentBox = {\n\t\ttype: \"traf\",\n\t\tboxes: [tfhd, tfdt, trun],\n\t};\n\n\t// moof - Movie Fragment\n\tconst moof: MovieFragmentBox = {\n\t\ttype: \"moof\",\n\t\tboxes: [mfhd, traf],\n\t};\n\n\t// Write moof to calculate its size\n\tconst moofBuffers = writeBoxes([moof]);\n\tlet moofSize = 0;\n\tfor (const buf of moofBuffers) {\n\t\tmoofSize += buf.byteLength;\n\t}\n\n\t// Update trun.dataOffset to point to mdat data\n\t// dataOffset is relative to moof start, so it's moofSize + 8 (mdat header)\n\ttrun.dataOffset = moofSize + 8;\n\n\t// Re-write moof with correct dataOffset\n\tconst moofBuffersFinal = writeBoxes([moof]);\n\tmoofSize = 0;\n\tfor (const buf of moofBuffersFinal) {\n\t\tmoofSize += buf.byteLength;\n\t}\n\n\t// mdat - Media Data\n\t// Need to ensure the data is a proper ArrayBuffer-backed Uint8Array for the library\n\tconst mdatBuffer = new ArrayBuffer(data.byteLength);\n\tconst mdatData = new Uint8Array(mdatBuffer);\n\tmdatData.set(data);\n\tconst mdat: MediaDataBox = {\n\t\ttype: \"mdat\",\n\t\tdata: mdatData,\n\t};\n\n\tconst mdatBuffers = writeBoxes([mdat]);\n\tlet mdatSize = 0;\n\tfor (const buf of mdatBuffers) {\n\t\tmdatSize += buf.byteLength;\n\t}\n\n\t// Concatenate all buffers\n\tconst result = new Uint8Array(moofSize + mdatSize);\n\tlet offset = 0;\n\n\tfor (const buf of moofBuffersFinal) {\n\t\tresult.set(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength), offset);\n\t\toffset += buf.byteLength;\n\t}\n\n\tfor (const buf of mdatBuffers) {\n\t\tresult.set(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength), offset);\n\t\toffset += buf.byteLength;\n\t}\n\n\treturn result;\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Format as ContainerFormat } from "../format";
|
|
2
|
+
import type { Frame } from "../types";
|
|
3
|
+
import { type InitSegment } from "./decode";
|
|
4
|
+
/** CMAF container format: decodes each MoQ frame as a moof+mdat fragment using the parsed init segment. */
|
|
5
|
+
export declare class Format implements ContainerFormat {
|
|
6
|
+
#private;
|
|
7
|
+
/** Create a format bound to the given parsed init segment (timescale, codec defaults). */
|
|
8
|
+
constructor(init: InitSegment);
|
|
9
|
+
/** Decode one CMAF fragment into its media frames. */
|
|
10
|
+
decode(frame: Uint8Array): Frame[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/container/cmaf/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE/D,2GAA2G;AAC3G,qBAAa,MAAO,YAAW,eAAe;;IAG7C,0FAA0F;IAC1F,YAAY,IAAI,EAAE,WAAW,EAE5B;IAED,sDAAsD;IACtD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,CAMjC;CACD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* @ts-self-types="./format.d.ts" */
|
|
2
|
+
import { decodeDataSegment } from "./decode";
|
|
3
|
+
/** CMAF container format: decodes each MoQ frame as a moof+mdat fragment using the parsed init segment. */
|
|
4
|
+
export class Format {
|
|
5
|
+
#init;
|
|
6
|
+
/** Create a format bound to the given parsed init segment (timescale, codec defaults). */
|
|
7
|
+
constructor(init) {
|
|
8
|
+
this.#init = init;
|
|
9
|
+
}
|
|
10
|
+
/** Decode one CMAF fragment into its media frames. */
|
|
11
|
+
decode(frame) {
|
|
12
|
+
return decodeDataSegment(frame, this.#init).map((s) => ({
|
|
13
|
+
data: s.data,
|
|
14
|
+
timestamp: s.timestamp,
|
|
15
|
+
keyframe: s.keyframe,
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/container/cmaf/format.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAC;AAE/D,2GAA2G;AAC3G,MAAM,OAAO,MAAM;IAClB,KAAK,CAAc;IAEnB,0FAA0F;IAC1F,YAAY,IAAiB;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,sDAAsD;IACtD,MAAM,CAAC,KAAiB;QACvB,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAuB;YACpC,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACpB,CAAC,CAAC,CAAC;IACL,CAAC;CACD","sourcesContent":["import type { Time } from \"@moq/net\";\nimport type { Format as ContainerFormat } from \"../format\";\nimport type { Frame } from \"../types\";\nimport { decodeDataSegment, type InitSegment } from \"./decode\";\n\n/** CMAF container format: decodes each MoQ frame as a moof+mdat fragment using the parsed init segment. */\nexport class Format implements ContainerFormat {\n\t#init: InitSegment;\n\n\t/** Create a format bound to the given parsed init segment (timescale, codec defaults). */\n\tconstructor(init: InitSegment) {\n\t\tthis.#init = init;\n\t}\n\n\t/** Decode one CMAF fragment into its media frames. */\n\tdecode(frame: Uint8Array): Frame[] {\n\t\treturn decodeDataSegment(frame, this.#init).map((s) => ({\n\t\t\tdata: s.data,\n\t\t\ttimestamp: s.timestamp as Time.Micro,\n\t\t\tkeyframe: s.keyframe,\n\t\t}));\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/container/cmaf/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/* @ts-self-types="./index.d.ts" */
|
|
2
|
+
/**
|
|
3
|
+
* CMAF (fMP4) container utilities for encoding and decoding init and media segments.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
export * from "./decode";
|
|
8
|
+
export * from "./encode";
|
|
9
|
+
export { Format } from "./format";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/container/cmaf/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC","sourcesContent":["/**\n * CMAF (fMP4) container utilities for encoding and decoding init and media segments.\n *\n * @module\n */\n\nexport * from \"./decode\";\nexport * from \"./encode\";\nexport { Format } from \"./format\";\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Time } from "@norskvideo/moq-net";
|
|
2
|
+
import * as Moq from "@norskvideo/moq-net";
|
|
3
|
+
import { type Getter, Signal } from "@norskvideo/moq-signals";
|
|
4
|
+
import type { Format } from "./format";
|
|
5
|
+
import type { BufferedRanges, Frame } from "./types";
|
|
6
|
+
/** Options for constructing a {@link Consumer}. */
|
|
7
|
+
export interface ConsumerProps {
|
|
8
|
+
/** The container format used to decode each MoQ frame. */
|
|
9
|
+
format: Format;
|
|
10
|
+
/** Target latency in milliseconds, controlling how aggressively slow groups are skipped (default: 0). */
|
|
11
|
+
latency?: Signal<Time.Milli> | Time.Milli;
|
|
12
|
+
}
|
|
13
|
+
/** Reads frames from a MoQ track in order, buffering groups and skipping slow ones to meet the latency target. */
|
|
14
|
+
export declare class Consumer {
|
|
15
|
+
#private;
|
|
16
|
+
/** The time ranges currently buffered and ready to play. */
|
|
17
|
+
readonly buffered: Getter<BufferedRanges>;
|
|
18
|
+
/** Start consuming the given track, decoding frames with `props.format`. */
|
|
19
|
+
constructor(track: Moq.Track, props: ConsumerProps);
|
|
20
|
+
/**
|
|
21
|
+
* Returns the next frame in order along with its group number and the current
|
|
22
|
+
* {@link discontinuity} count, awaiting one if needed. A `frame` of undefined signals the
|
|
23
|
+
* end of that group; the overall result is undefined once closed. When `discontinuity`
|
|
24
|
+
* jumps relative to the previous call, the publisher rewound the timeline: flush any
|
|
25
|
+
* downstream decoder or render buffers before playing this frame.
|
|
26
|
+
*/
|
|
27
|
+
next(): Promise<{
|
|
28
|
+
frame: Frame | undefined;
|
|
29
|
+
group: number;
|
|
30
|
+
discontinuity: number;
|
|
31
|
+
} | undefined>;
|
|
32
|
+
/**
|
|
33
|
+
* A counter that increments each time the consumer detects a timeline rewind and drops the
|
|
34
|
+
* reneged buffer. Also surfaced per-read via {@link next}; downstream consumers flush their
|
|
35
|
+
* decoder and render buffers when it changes.
|
|
36
|
+
*/
|
|
37
|
+
get discontinuity(): number;
|
|
38
|
+
/** Stop consuming and release the track and all buffered groups. */
|
|
39
|
+
close(): void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/container/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErD,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC7B,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;CAC1C;AA6DD,kHAAkH;AAClH,qBAAa,QAAQ;;IAYpB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;IAI3D,4EAA4E;IAC5E,YAAY,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAajD;IAwQD;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAmEpG;IAgCD;;;;OAIG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,oEAAoE;IACpE,KAAK,IAAI,IAAI,CAEZ;CACD"}
|