diff --git a/src/demux/mp4demuxer.ts b/src/demux/mp4demuxer.ts index 5886b942713..bdfe5d8c5b9 100644 --- a/src/demux/mp4demuxer.ts +++ b/src/demux/mp4demuxer.ts @@ -20,6 +20,7 @@ import { parseInitSegment, RemuxerTrackIdConfig, hasMoofData, + IEmsgParsingData, } from '../utils/mp4-tools'; import { dummyTrack } from './dummy-demuxed-track'; import type { HlsEventEmitter } from '../events'; @@ -155,10 +156,7 @@ class MP4Demuxer implements Demuxer { emsgs.forEach((data: Uint8Array) => { const emsgInfo = parseEmsg(data); if (emsgSchemePattern.test(emsgInfo.schemeIdUri)) { - const pts = Number.isFinite(emsgInfo.presentationTime) - ? emsgInfo.presentationTime! / emsgInfo.timeScale - : timeOffset + - emsgInfo.presentationTimeDelta! / emsgInfo.timeScale; + const pts = getEmsgStartTime(emsgInfo, timeOffset); let duration = emsgInfo.eventDuration === 0xffffffff ? Number.POSITIVE_INFINITY @@ -180,11 +178,7 @@ class MP4Demuxer implements Demuxer { this.config.enableEmsgKLVMetadata && emsgInfo.schemeIdUri.startsWith('urn:misb:KLV:bin:1910.1') ) { - const pts = Number.isFinite(emsgInfo.presentationTime) - ? emsgInfo.presentationTime! / emsgInfo.timeScale - : timeOffset + - emsgInfo.presentationTimeDelta! / emsgInfo.timeScale; - + const pts = getEmsgStartTime(emsgInfo, timeOffset); id3Track.samples.push({ data: emsgInfo.payload, len: emsgInfo.payload.byteLength, @@ -222,4 +216,14 @@ class MP4Demuxer implements Demuxer { } } +function getEmsgStartTime( + emsgInfo: IEmsgParsingData, + timeOffset: number, +): number { + return Number.isFinite(emsgInfo.presentationTime) + ? (emsgInfo.presentationTime as number) / emsgInfo.timeScale + : timeOffset + + (emsgInfo.presentationTimeDelta as number) / emsgInfo.timeScale; +} + export default MP4Demuxer;