This commit is contained in:
master 2025-03-18 06:44:58 +08:00
parent 16c807b98e
commit 6da8556f13
2 changed files with 26 additions and 5 deletions

View File

@ -60,9 +60,14 @@ export class EbmlSegment {
.filter((c): c is EbmlSeekEntry => !!c);
}
findSeekPositionBySeekId(seekId: Uint8Array): number | undefined {
return this.seekEntries.find((c) => isEqual(c.seekId, seekId))
?.seekPosition;
}
findLocalNodeBySeekId(seekId: Uint8Array): EbmlTagType | undefined {
return this.findLocalNodeBySeekPosition(
this.seekEntries.find((c) => isEqual(c.seekId, seekId))?.seekPosition
this.findSeekPositionBySeekId(seekId)
);
}

View File

@ -17,6 +17,7 @@ import {
Observable,
of,
reduce,
scan,
share,
Subject,
type Subscription,
@ -156,8 +157,7 @@ export class VideoPipelineDemo extends LitElement {
s.cuesNode
? Number.NaN
: s.dataOffset +
(s.seekEntries.find((e) => e.seekId === SEEK_ID_KAX_CUES)
?.seekPosition ?? Number.NaN)
(s.findSeekPositionBySeekId(SEEK_ID_KAX_CUES) ?? Number.NaN)
),
filter((cuesStartOffset) => cuesStartOffset >= 0),
switchMap((cuesStartOffset) =>
@ -172,7 +172,8 @@ export class VideoPipelineDemo extends LitElement {
map(([cues, withMeta]) => {
withMeta.cuesNode = cues;
return withMeta;
})
}),
share()
);
const withLocalCues$ = withMeta$.pipe(filter((s) => !!s.cuesNode));
@ -191,7 +192,22 @@ export class VideoPipelineDemo extends LitElement {
if (seekTime === 0) {
return cluster$;
}
return cluster$.pipe(filter((c) => c.timestamp >= seekTime));
return cluster$.pipe(
scan(
(prev, curr) =>
[prev?.[1], curr] as [
EbmlCluster | undefined,
EbmlCluster | undefined,
],
[undefined, undefined] as [
EbmlCluster | undefined,
EbmlCluster | undefined,
]
),
filter((c) => c[1]?.timestamp! >= seekTime),
map((c) => c[1]!)
);
};
const seekWithCues = (