Add audio forward buffer info via top-level API

Resolves #7858
This commit is contained in:
Rob Walch
2026-05-20 18:10:29 -07:00
committed by Rob Walch
parent fd96bb597d
commit e435886151
3 changed files with 17 additions and 6 deletions
+4
View File
@@ -193,6 +193,8 @@ export class AudioStreamController extends BaseStreamController implements Netwo
// (undocumented)
protected getBufferOutput(): Bufferable | null;
// (undocumented)
getFwdBufferInfo(): BufferInfo | null;
// (undocumented)
protected getLoadPosition(): number;
// (undocumented)
protected _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
@@ -2168,6 +2170,8 @@ class Hls implements HlsEventEmitter {
get allAudioTracks(): MediaPlaylist[];
get allSubtitleTracks(): MediaPlaylist[];
attachMedia(data: HTMLMediaElement | MediaAttachingData): void;
// (undocumented)
get audioForwardBufferInfo(): BufferInfo | null;
get audioTrack(): number;
// Warning: (ae-setter-with-docs) The doc comment for the property "audioTrack" must appear on the getter, not the setter.
set audioTrack(audioTrackId: number);
+9 -6
View File
@@ -44,6 +44,7 @@ import type {
import type { MediaPlaylist } from '../types/media-playlist';
import type { TrackSet } from '../types/track';
import type { TransmuxerResult } from '../types/transmuxer';
import type { BufferInfo } from '../utils/buffer-helper';
const TICK_INTERVAL = 100; // how often to tick in ms
@@ -344,16 +345,13 @@ class AudioStreamController
return;
}
const bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;
const bufferable = this.getBufferOutput();
if (this.bufferFlushed && bufferable) {
this.bufferFlushed = false;
this.afterBufferFlushed(bufferable, ElementaryStreamTypes.AUDIO);
}
const bufferInfo = this.getFwdBufferInfo(
bufferable,
PlaylistLevelType.AUDIO,
);
const bufferInfo = this.getFwdBufferInfo();
if (bufferInfo === null) {
return;
}
@@ -773,6 +771,11 @@ class AudioStreamController
}
}
public getFwdBufferInfo(): BufferInfo | null {
const bufferable = this.getBufferOutput();
return super.getFwdBufferInfo(bufferable, PlaylistLevelType.AUDIO);
}
protected getBufferOutput(): Bufferable | null {
return this.mediaBuffer ? this.mediaBuffer : this.media;
}
@@ -869,7 +872,7 @@ class AudioStreamController
if (this.state === State.ENDED) {
this.state = State.IDLE;
}
const mediaBuffer = this.mediaBuffer || this.media;
const mediaBuffer = this.getBufferOutput();
if (mediaBuffer) {
this.afterBufferFlushed(mediaBuffer, type);
this.tick();
+4
View File
@@ -1035,6 +1035,10 @@ export default class Hls implements HlsEventEmitter {
return this.streamController.getMainFwdBufferInfo();
}
public get audioForwardBufferInfo(): BufferInfo | null {
return this.audioStreamController?.getFwdBufferInfo() || null;
}
public get maxBufferLength(): number {
return this.streamController.maxBufferLength;
}