Home Reference Source

src/types/demuxer.ts

export interface Demuxer {
  demux (data: Uint8Array, timeOffset: number, isSampleAes?: boolean) : DemuxerResult
  demuxSampleAes (data: Uint8Array, decryptData: Uint8Array, timeOffset: number) : Promise<DemuxerResult>
  flush(timeOffset?: number): DemuxerResult
  destroy() : void
  resetInitSegment(audioCodec: string | undefined, videoCodec: string | undefined, duration: number);
  resetTimeStamp(defaultInitPTS?: number | null): void;
  resetContiguity(): void;
}

export interface DemuxerResult {
  audioTrack: DemuxedAudioTrack
  avcTrack: DemuxedAvcTrack
  id3Track: DemuxedTrack
  textTrack: DemuxedTrack
}

export interface DemuxedTrack {
  type: string
  id: number
  pid: number
  inputTimeScale: number
  sequenceNumber: number
  samples: any
  timescale?: number
  container?: string
  dropped: number
  duration?: number
  pesData?: ElementaryStreamData | null
  codec?: string
}

export interface DemuxedAudioTrack extends DemuxedTrack {
  config?: Array<number>
  samplerate?: number
  isAAC?: boolean
  channelCount?: number
  manifestCodec?: string
}

export interface DemuxedVideoTrack extends DemuxedTrack {
  width?: number
  height?: number
  pixelRatio?: number
  audFound?: boolean
  pps?: Array<number>
  sps?: Array<number>
  naluState?: number
}

export interface DemuxedAvcTrack extends DemuxedVideoTrack {
  samples: Array<AvcSample>
}

export interface PassthroughVideoTrack extends DemuxedVideoTrack {
  samples: Uint8Array
}

export interface DemuxedMetadataTrack extends DemuxedTrack {
  samples: MetadataSample[]
}

export interface DemuxedUserdataTrack extends DemuxedTrack {
  samples: UserdataSample[]
}

export interface MetadataSample {
  pts: number,
  dts: number,
  len: number,
  data: Uint8Array;
}

export interface UserdataSample {
  pts: number,
  bytes: Uint8Array;
}

export interface AvcSample {
  dts: number
  pts: number
  key: boolean
  frame: boolean
  units: Array<AvcSampleUnit>,
  debug: string
  length: number
}

export interface AvcSampleUnit {
  data: Uint8Array;
}

type AudioSample = {
  unit: Uint8Array,
  pts: number,
  dts: number
}

export type AppendedAudioFrame = {
  sample: AudioSample,
  length: number
};

export interface ElementaryStreamData {
  data: Array<Uint8Array>
  size: number
}