{"version":3,"file":"mp4-remux.umd.cjs","sources":["../src/boxes.class/Mp4Box.class.ts","../src/boxes.class/trex.ts","../src/boxes.class/trun.ts","../src/boxes.class/tfdt.ts","../src/boxes.class/tfhd.ts","../src/boxes.class/traf.ts","../src/boxes.class/mfhd.ts","../src/boxes.class/udta.ts","../src/boxes.class/mdia.ts","../src/boxes.class/ftyp.ts","../src/boxes.class/free.ts","../src/boxes.class/moov.ts","../src/boxes.class/moof.ts","../src/boxes.class/sidx.ts","../src/boxes.class/mdat.ts","../src/boxes.class/mvhd.ts","../src/boxes.class/mvex.ts","../src/boxes.class/tkhd.ts","../src/boxes.class/trak.ts","../src/boxes.class/edts.ts","../src/Mp4Stream.class.ts","../src/index.ts"],"sourcesContent":["import { Box } from \"./types\";\r\nimport * as Boxes from \".\";\r\n\r\nexport class Mp4Box {\r\n  stream: Uint8Array = new Uint8Array();\r\n  dv: DataView = new DataView(new Uint8Array().buffer);\r\n  boxs: Box[] = [];\r\n  boxPos = 0; // 记录元数据和盒子数据的偏差\r\n\r\n  constructor(buf: Uint8Array) {\r\n    this.stream = buf;\r\n    this.dv = new DataView(buf.buffer);\r\n  }\r\n\r\n  set size(value: number) {\r\n    this.writeUint(4, value);\r\n  }\r\n  get size() {\r\n    return this.readUint(4);\r\n  }\r\n  get type() {\r\n    return this.readString(4, 4);\r\n  }\r\n\r\n  /**\r\n   * 获取当前 box 的 binary\r\n   */\r\n  get raw() {\r\n    if (this.boxPos) {\r\n      let size = this.boxPos;\r\n      const bufs = this.boxs.map((item) => {\r\n        const boxRaw = item.raw;\r\n        size += boxRaw.length;\r\n        return boxRaw;\r\n      });\r\n      this.size = size;\r\n      const base = this.stream.slice(0, this.boxPos);\r\n\r\n      // 将 Uint8Array[] 合并成一个\r\n      const nbuf = new Uint8Array(size);\r\n      let pos = 0;\r\n      for (const item of [base, ...bufs]) {\r\n        nbuf.set(item, pos);\r\n        pos += item.length;\r\n      }\r\n      return nbuf;\r\n    }\r\n\r\n    return this.stream;\r\n  }\r\n  writeUint(size: 1 | 2 | 4, val: number, pos = 0) {\r\n    const view = this.dv;\r\n    switch (size) {\r\n      case 1:\r\n        view.setUint8(pos, val);\r\n        break;\r\n      case 2:\r\n        view.setUint16(pos, val);\r\n        break;\r\n      case 4:\r\n        view.setUint32(pos, val);\r\n        break;\r\n    }\r\n  }\r\n  writeInt(size: 1 | 2 | 4, val: number, pos = 0) {\r\n    const view = this.dv;\r\n    switch (size) {\r\n      case 1:\r\n        view.setInt8(pos, val);\r\n        break;\r\n      case 2:\r\n        view.setInt16(pos, val);\r\n        break;\r\n      case 4:\r\n        view.setInt32(pos, val);\r\n        break;\r\n    }\r\n  }\r\n\r\n  readInt(size: 1 | 2 | 4 = 4, pos = 0) {\r\n    const view = this.dv;\r\n    switch (size) {\r\n      case 1:\r\n        return view.getInt8(pos);\r\n      case 2:\r\n        return view.getInt16(pos);\r\n      case 4:\r\n        return view.getInt32(pos);\r\n    }\r\n  }\r\n\r\n  // use dataView to Get Unsigned Int\r\n  readUint(size: 1 | 2 | 4, pos = 0) {\r\n    const view = this.dv;\r\n    switch (size) {\r\n      case 1:\r\n        return view.getUint8(pos);\r\n      case 2:\r\n        return view.getUint16(pos);\r\n      case 4:\r\n        return view.getUint32(pos);\r\n    }\r\n  }\r\n  /**\r\n   * Read string by char code from Uint8Array\r\n   * @param size\r\n   */\r\n  readString(size: 4, pos = 0) {\r\n    let s = \"\";\r\n    for (let i = 0; i < size; i++) {\r\n      s += String.fromCharCode(this.readUint(1, pos + i));\r\n    }\r\n    return s;\r\n  }\r\n\r\n  parse(boxPos: number) {\r\n    this.boxPos = boxPos;\r\n    let pos = boxPos;\r\n    while (pos <= this.stream.length - 8) {\r\n      const size = this.readUint(4, pos);\r\n      const type = this.readString(4, 4 + pos);\r\n      if (size <= this.stream.length) {\r\n        const tBuf = this.stream.slice(pos, pos + size);\r\n\r\n        const BoxClass = Boxes[type as keyof typeof Boxes] || Boxes.free;\r\n        this.boxs.push(new BoxClass(tBuf));\r\n      }\r\n      pos += size;\r\n    }\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class trex extends Mp4Box {\r\n\r\n  get version() {\r\n    return this.readUint(1, 8);\r\n  }\r\n  get track_id():number{\r\n    return this.readUint(4,12);\r\n  }\r\n  set track_id(value){\r\n    this.writeUint(4,value,12);\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class trun extends Mp4Box {\r\n  get sample_count() {\r\n    return this.readUint(4, 12);\r\n  }\r\n  get data_offset() {\r\n    return this.readInt(4, 16);\r\n  }\r\n  set data_offset(val) {\r\n    this.writeInt(4, val, 16);\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class tfdt extends Mp4Box {}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class tfhd extends Mp4Box {\r\n  get version() {\r\n    return this.readUint(1, 8);\r\n  }\r\n  get track_id():number{\r\n    return this.readUint(4,12);\r\n  }\r\n  set track_id(value){\r\n    this.writeUint(4,value,12);\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\nimport { trun, tfhd } from \".\";\r\n\r\nexport class traf extends Mp4Box {\r\n  constructor(buf: Uint8Array) {\r\n    super(buf);\r\n    this.parse(8);\r\n  }\r\n  get tfhd() {\r\n    return this.boxs.find((box) => box instanceof tfhd) as tfhd;\r\n  }\r\n  get trun() {\r\n    return this.boxs.find((box) => box instanceof trun) as trun;\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class mfhd extends Mp4Box {\r\n  get sequence_number() {\r\n    return this.readUint(4, 12);\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class udta extends Mp4Box {}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class mdia extends Mp4Box {}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class ftyp extends Mp4Box {}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class free extends Mp4Box {}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\nimport { mvhd, mvex, trak } from \".\";\r\n\r\nexport class moov extends Mp4Box {\r\n  constructor(buf: Uint8Array) {\r\n    super(buf);\r\n    this.parse(8);\r\n  }\r\n\r\n  get mvhd() {\r\n    return this.boxs.find((box) => box instanceof mvhd) as mvhd;\r\n  }\r\n  get mvex(){\r\n    return this.boxs.find((box) => box instanceof mvex) as mvex;\r\n  }\r\n  get trak(){\r\n    return this.boxs.find((box) => box instanceof trak) as trak;\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\nimport { mfhd, traf } from \"./\";\r\n\r\nexport class moof extends Mp4Box {\r\n  constructor(buf: Uint8Array) {\r\n    super(buf);\r\n    this.parse(8);\r\n  }\r\n  get mfhd(){\r\n    return this.boxs.find((box) => box instanceof mfhd) as mfhd\r\n  }\r\n  get traf(){\r\n    return this.boxs.find((box) => box instanceof traf) as traf\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class sidx extends Mp4Box {\r\n  get version() {\r\n    return this.readUint(1, 8);\r\n  }\r\n  get reference_ID() {\r\n    return this.readUint(4, 12);\r\n  }\r\n  get timescale() {\r\n    return this.readUint(4, 16);\r\n  }\r\n  get reserved() {\r\n    let offset = 8 + 20;\r\n    if (this.version !== 0) {\r\n      offset = 16 + 20;\r\n    }\r\n    return this.readUint(2, offset);\r\n  }\r\n  get reference_count() {\r\n    let offset = 8 + 20;\r\n    if (this.version !== 0) {\r\n      offset = 16 + 20;\r\n    }\r\n    offset += 2;\r\n    return this.readUint(2, offset);\r\n  }\r\n  get refList() {\r\n    let offset = 8 + 24;\r\n    if (this.version !== 0) {\r\n      offset = 16 + 24;\r\n    }\r\n    const refrenceCount = this.reference_count;\r\n    const resList = [];\r\n    for (let i = 0; i < refrenceCount; i++) {\r\n      const pos = offset + i * 12; // Position\r\n      let tmp_32 = this.readUint(4, pos);\r\n      const reference_type = (tmp_32 >> 31) & 0x1;\r\n      const referenced_size = tmp_32 & 0x7fffffff;\r\n      const subsegment_duration = this.readUint(4, pos + 4);\r\n      tmp_32 = this.readUint(4, pos + 8);\r\n      const starts_with_SAP = (tmp_32 >> 31) & 0x1;\r\n      const SAP_type = (tmp_32 >> 28) & 0x7;\r\n      const SAP_delta_time = tmp_32 & 0xfffffff;\r\n      resList.push({\r\n        reference_type,\r\n        referenced_size,\r\n        subsegment_duration,\r\n        starts_with_SAP,\r\n        SAP_type,\r\n        SAP_delta_time,\r\n      });\r\n    }\r\n    return resList;\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class mdat extends Mp4Box {\r\n  push(value: Uint8Array) {\r\n    // 向 stream 追加数据\r\n\r\n    const newBuf = new Uint8Array(this.stream.length + value.length);\r\n    newBuf.set(this.stream);\r\n    newBuf.set(value, this.stream.length);\r\n    this.stream = newBuf;\r\n    this.dv = new DataView(this.stream.buffer);\r\n    this.size = newBuf.length;\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class mvhd extends Mp4Box {\r\n\r\n  get version() {\r\n    return this.readUint(1, 8);\r\n  }\r\n\r\n  get next_track_ID(){\r\n    if(this.version === 0){\r\n      return this.readUint(4,104);\r\n    }else{\r\n      return this.readUint(4,116);\r\n    }\r\n  }\r\n  set next_track_ID(value){\r\n    if(this.version === 0){\r\n      this.writeUint(4,value,104);\r\n    }else{\r\n      this.writeUint(4,value,116);\r\n    }\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\nimport { trex } from \"./\";\r\n\r\nexport class mvex extends Mp4Box {\r\n  constructor(buf: Uint8Array) {\r\n    super(buf);\r\n    this.parse(8);\r\n\r\n\r\n  }\r\n  get trex(){\r\n    return this.boxs.find((box) => box instanceof trex) as trex;\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class tkhd extends Mp4Box {\r\n  get version() {\r\n    return this.readUint(1, 8);\r\n  }\r\n\r\n  get track_id():number{\r\n    if(this.version === 1){\r\n      return this.readUint(4, 28);\r\n    }else{\r\n      return this.readUint(4,20);\r\n    }\r\n  }\r\n  set track_id(value){\r\n    if(this.version === 1){\r\n      this.writeUint(4,value,28);\r\n    }else{\r\n      this.writeUint(4,value,20);\r\n    }\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\nimport { tkhd } from \"./tkhd\";\r\n\r\nexport class trak extends Mp4Box {\r\n  constructor(buf: Uint8Array) {\r\n    super(buf);\r\n    this.parse(8);\r\n  }\r\n  get tkhd(): tkhd {\r\n    return this.boxs.find((box) => box instanceof tkhd) as tkhd;\r\n  }\r\n}\r\n","import { Mp4Box } from \"./Mp4Box.class\";\r\n\r\nexport class edts extends Mp4Box {}\r\n","import * as Boxes from \"./boxes.class\";\r\nimport { Box } from \"./boxes.class/types\";\r\n\r\nexport class Mp4Stream {\r\n  stream: Uint8Array = new Uint8Array();\r\n  dv: DataView = new DataView(new Uint8Array().buffer);\r\n  boxs: Box[] = [];\r\n  isEnd = false;\r\n\r\n  get sidx() {\r\n    return this.boxs.find((box) => box instanceof Boxes.sidx) as Boxes.sidx;\r\n  }\r\n  get moov() {\r\n    return this.boxs.find((box) => box instanceof Boxes.moov) as Boxes.moov;\r\n  }\r\n\r\n  push(value: Uint8Array) {\r\n    const newBuf = new Uint8Array(this.stream.length + value.length);\r\n    newBuf.set(this.stream);\r\n    newBuf.set(value, this.stream.length);\r\n    this.stream = newBuf;\r\n    this.dv = new DataView(this.stream.buffer);\r\n  }\r\n\r\n  /**\r\n   * 将stream 截断，把pos前的数据返回，然后更新dataView\r\n   * @param pos\r\n   */\r\n  slice(pos: number) {\r\n    const sliceBuf = this.stream.slice(0, pos);\r\n    const newBuf = new Uint8Array(this.stream.length - pos);\r\n    newBuf.set(this.stream.slice(pos));\r\n    this.stream = newBuf;\r\n    this.dv = new DataView(this.stream.buffer);\r\n    return sliceBuf;\r\n  }\r\n  // use dataView to Get Unsigned Int\r\n  readUint(size: 1 | 2 | 4, pos = 0) {\r\n    const view = this.dv;\r\n    switch (size) {\r\n      case 1:\r\n        return view.getUint8(pos);\r\n      case 2:\r\n        return view.getUint16(pos);\r\n      case 4:\r\n        return view.getUint32(pos);\r\n    }\r\n  }\r\n  /**\r\n   * Read string by char code from Uint8Array\r\n   * @param size\r\n   */\r\n  readString(size: 4, pos = 0) {\r\n    let s = \"\";\r\n    for (let i = 0; i < size; i++) {\r\n      s += String.fromCharCode(this.readUint(1, pos + i));\r\n    }\r\n    return s;\r\n  }\r\n  parse() {\r\n    // 检查this.stream 的长度是否足够 2*4*8\r\n    if (this.stream.length < 8) {\r\n      return; // Not Enough\r\n    }\r\n\r\n    const size = this.readUint(4);\r\n    const type = this.readString(4, 4);\r\n\r\n    if (size <= this.stream.length) {\r\n      const tBuf = this.slice(size);\r\n\r\n      const BoxClass = Boxes[type as keyof typeof Boxes] || Boxes.free;\r\n      this.boxs.push(new BoxClass(tBuf));\r\n\r\n      this.parse(); // 继续向后解析\r\n    }\r\n  }\r\n\r\n  end() {\r\n    this.isEnd = true;\r\n  }\r\n}\r\n","import { Mp4Stream } from \"./Mp4Stream.class\";\r\nimport * as Boxes from \"./boxes.class\";\r\n\r\nexport default function remux(vs: ReadableStream, as: ReadableStream) {\r\n  //  读取两个stream的数据\r\n  const videoReader = vs.getReader();\r\n  const audioReader = as.getReader();\r\n\r\n  const videoStream = new Mp4Stream();\r\n  const audioStream = new Mp4Stream();\r\n\r\n  const { readable, writable } = new TransformStream();\r\n  const writer = writable.getWriter();\r\n\r\n  let status = -1;\r\n\r\n  function callWrite(buf: Uint8Array) {\r\n    writer.write(buf);\r\n  }\r\n\r\n  async function checkStream() {\r\n    if (status === -1) {\r\n      // 合并 moov 中的 track 信息\r\n      const videoMoov = videoStream.moov;\r\n      const audioMoov = audioStream.moov;\r\n      if (videoMoov && audioMoov) {\r\n\r\n        const videoMvex = videoMoov.mvex;\r\n        const audioMvex = audioMoov.mvex;\r\n        if (videoMvex && audioMvex) {\r\n          const videoTrex = videoMvex.trex;\r\n          const audioTrex = audioMvex.trex;\r\n\r\n          videoTrex.track_id = 1;\r\n          audioTrex.track_id = 2;\r\n\r\n          // console.log(videoMvex, audioMvex);\r\n          videoMvex.boxs = videoMvex.boxs.filter(item=>!(item instanceof Boxes.trex));\r\n          videoTrex && videoMvex.boxs.push(videoTrex);\r\n          audioTrex && videoMvex.boxs.push(audioTrex);\r\n        }\r\n\r\n        const videoTrak = videoMoov.trak;\r\n        const audioTrak = audioMoov.trak;\r\n        if (videoTrak && audioTrak) {\r\n          videoTrak.tkhd.track_id = 1;\r\n          audioTrak.tkhd.track_id = 2;\r\n\r\n          videoMoov.boxs.push(audioTrak);\r\n          for (const item of videoStream.boxs) {\r\n            callWrite(item.raw);\r\n            if (item === videoMoov) {\r\n              break;\r\n            }\r\n          }\r\n          status = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // 需要先有 sidx\r\n    if (!videoStream.sidx || !audioStream.sidx) {\r\n      return;\r\n    }\r\n\r\n    if (status !== -1) {\r\n      const videoMaxIndex = videoStream.sidx.reference_count;\r\n      const audioMaxIndex = audioStream.sidx.reference_count;\r\n      if (status <= videoMaxIndex && status <= audioMaxIndex) {\r\n        // 合并\r\n\r\n        // Step1 获取需要的分片数据\r\n        const videoMoof = videoStream.boxs.find((item) => {\r\n          return (\r\n            item instanceof Boxes.moof && item?.mfhd.sequence_number === status\r\n          );\r\n        }) as Boxes.moof;\r\n        const audioMoof = audioStream.boxs.find((item) => {\r\n          return (\r\n            item instanceof Boxes.moof && item?.mfhd.sequence_number === status\r\n          );\r\n        }) as Boxes.moof;\r\n        const videoData = videoMoof && (videoStream.boxs[videoStream.boxs.indexOf(videoMoof) + 1] as Boxes.mdat);\r\n        const audioData = audioMoof && (audioStream.boxs[audioStream.boxs.indexOf(audioMoof) + 1] as Boxes.mdat);\r\n\r\n        if (videoMoof && videoData && audioMoof && audioData) {\r\n          // 处理合并流程\r\n          const videoTraf = videoMoof.traf;\r\n          const audioTraf = audioMoof.traf;\r\n\r\n          videoTraf.tfhd.track_id = 1;\r\n          audioTraf.tfhd.track_id = 2;\r\n          if (videoTraf?.trun && audioTraf?.trun) {\r\n            const audioTrafSize = audioTraf.size;\r\n            const videoMoofSize = videoMoof.size;\r\n            const videoDataSize = videoData.size;\r\n            videoTraf.trun.data_offset = videoMoofSize + audioTrafSize + 8;\r\n            audioTraf.trun.data_offset = videoMoofSize + audioTrafSize + videoDataSize;\r\n\r\n            videoMoof.boxs.push(audioTraf);\r\n\r\n            callWrite(videoMoof.raw);\r\n\r\n            // 处理 mdat 合并\r\n            videoData.push(audioData.raw.slice(8));\r\n            callWrite(videoData.raw);\r\n\r\n            // 释放存储空间\r\n            videoStream.boxs = videoStream.boxs.filter((item) => item !== videoMoof);\r\n            videoStream.boxs = videoStream.boxs.filter((item) => item !== videoData);\r\n            audioStream.boxs = audioStream.boxs.filter((item) => item !== audioMoof);\r\n            audioStream.boxs = audioStream.boxs.filter((item) => item !== audioData);\r\n\r\n            status += 1;\r\n            checkStream();\r\n          }\r\n        }\r\n      } else if (status > videoMaxIndex && status <= audioMaxIndex) {\r\n        // 追加 audio\r\n        const audioMoof = audioStream.boxs.find((item) => {\r\n          return (\r\n            item instanceof Boxes.moof && item?.mfhd.sequence_number === status\r\n          );\r\n        }) as Boxes.moof;\r\n        audioMoof.traf.tfhd.track_id = 2;\r\n        const audioData = audioMoof && (audioStream.boxs[audioStream.boxs.indexOf(audioMoof) + 1] as Boxes.mdat);\r\n        if (audioMoof && audioData) {\r\n          callWrite(audioMoof.raw);\r\n          callWrite(audioData.raw);\r\n          status += 1;\r\n          checkStream();\r\n        }\r\n      } else if (status > audioMaxIndex && status <= videoMaxIndex) {\r\n        // 追加 Video\r\n        const videoMoof = videoStream.boxs.find((item) => {\r\n          return (\r\n            item instanceof Boxes.moof && item?.mfhd.sequence_number === status\r\n          );\r\n        }) as Boxes.moof;\r\n        videoMoof.traf.tfhd.track_id = 1;\r\n        const videoData = videoMoof && (videoStream.boxs[videoStream.boxs.indexOf(videoMoof) + 1] as Boxes.mdat);\r\n        if (videoMoof && videoData) {\r\n          callWrite(videoMoof.raw);\r\n          callWrite(videoData.raw);\r\n          status += 1;\r\n          checkStream();\r\n        }\r\n      } else if (status > videoMaxIndex && status > audioMaxIndex) {\r\n        // end\r\n        status = -2;\r\n        // console.log(\"call close\", status, videoMaxIndex, audioMaxIndex);\r\n        // writer.releaseLock();\r\n        writer.close();\r\n      }\r\n    }\r\n  }\r\n\r\n  // 并行读取两个reader的数据\r\n  async function readerHandler(streamReader: ReadableStreamDefaultReader<any>, mp4Stream: Mp4Stream) {\r\n    while (true) {\r\n      const { done, value } = await streamReader.read();\r\n      if (value) {\r\n        mp4Stream.push(value);\r\n        mp4Stream.parse();\r\n\r\n        checkStream();\r\n      }\r\n      // 将value拼接到 chunk后\r\n\r\n      if (done) {\r\n        mp4Stream.end();\r\n        checkStream();\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  readerHandler(videoReader, videoStream);\r\n  readerHandler(audioReader, audioStream);\r\n  return readable;\r\n}\r\n"],"names":["Mp4Box","buf","__publicField","value","size","bufs","item","boxRaw","base","nbuf","pos","val","view","s","i","boxPos","type","tBuf","BoxClass","Boxes","Boxes.free","trex","trun","tfdt","tfhd","traf","box","mfhd","udta","mdia","ftyp","free","moov","mvhd","mvex","trak","moof","sidx","offset","refrenceCount","resList","tmp_32","reference_type","referenced_size","subsegment_duration","starts_with_SAP","SAP_type","SAP_delta_time","mdat","newBuf","tkhd","edts","Mp4Stream","Boxes.sidx","Boxes.moov","sliceBuf","remux","vs","as","videoReader","audioReader","videoStream","audioStream","readable","writable","writer","status","callWrite","checkStream","videoMoov","audioMoov","videoMvex","audioMvex","videoTrex","audioTrex","Boxes.trex","videoTrak","audioTrak","videoMaxIndex","audioMaxIndex","videoMoof","Boxes.moof","audioMoof","videoData","audioData","videoTraf","audioTraf","audioTrafSize","videoMoofSize","videoDataSize","readerHandler","streamReader","mp4Stream","done"],"mappings":"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"}