hlsjs源码执行事件流程
hlsjs 以 Event 作为核心来进行各个模块的调度
onEventGeneric (event: string, data: any) {
let eventToFunction = function (event: string, data: any) {
let funcName = 'on' + event.replace('hls', '');
if (typeof this[funcName] !== 'function') {
throw new Error(`Event ${event} has no generic handler in this ${this.constructor.name} class (tried ${funcName})`);
}
return this[funcName].bind(this, data);
};
try {
eventToFunction.call(this, event, data).call();
} catch (err) {
logger.error(`An internal error happened while handling event ${event}. Error message: "${err.message}". Here is a stacktrace:`, err);
this.hls.trigger(Event.ERROR, { type: ErrorTypes.OTHER_ERROR, details: ErrorDetails.INTERNAL_EXCEPTION, fatal: false, event: event, err: err });
}
}
this 是每一个使用当前 event 的类,将 hls 事件转化成类原型上的 onXXX 函数执行
以下是 hls 事件触发栈
PlaylistLoader hlsManifestLoading
StreamController hlsManifestLoading
BufferController hlsBufferReset
AudioStreamController hlsBufferReset
AudioTrackController hlsManifestLoading
TimelineController hlsManifestLoading
BufferController hlsMediaAttaching
CapLevelController hlsMediaAttaching
FPSController hlsMediaAttaching
TimelineController hlsMediaAttaching
ID3TrackController hlsMediaAttached
StreamController hlsMediaAttached
AudioStreamController hlsMediaAttached
SubtitleTrackController hlsMediaAttached
EMEController hlsMediaAttached
SubtitleStreamController hlsMediaAttached
LevelController hlsManifestLoaded
BufferController hlsManifestParsed
CapLevelController hlsManifestParsed
StreamController hlsManifestParsed
AudioTrackController hlsManifestParsed
AudioStreamController hlsAudioTracksUpdated
EMEController hlsManifestParsed
SubtitleTrackController hlsManifestLoaded
SubtitleStreamController hlsSubtitleTracksUpdated
TimelineController hlsManifestLoaded
LevelController hlsLevelLoaded
StreamController hlsLevelLoaded
BufferController hlsLevelUpdated
SubtitleStreamController hlsLevelUpdated
KeyLoader hlsKeyLoading
AudioTrackController hlsLevelLoaded
StreamController hlsKeyLoaded
AbrController hlsFragLoading
FragmentLoader hlsFragLoading
AudioStreamController hlsKeyLoaded
SubtitleStreamController hlsKeyLoaded
AbrController hlsFragLoaded
LevelController hlsFragLoaded
FragmentTracker hlsFragLoaded
StreamController hlsFragLoaded
AudioStreamController hlsFragLoaded
SubtitleStreamController hlsFragLoaded
TimelineController hlsFragLoaded
TimelineController hlsFragDecrypted
AudioStreamController hlsInitPtsFound
TimelineController hlsInitPtsFound
StreamController hlsFragParsingInitSegment
BufferController hlsBufferCodecs
StreamController hlsBufferCreated
AudioStreamController hlsBufferCreated
CapLevelController hlsBufferCodecs
2 BufferController hlsBufferAppending
AudioStreamController hlsFragParsingInitSegment
StreamController hlsFragParsingData
BufferController hlsLevelPtsUpdated
2 BufferController hlsBufferAppending
AudioStreamController hlsFragParsingData
StreamController hlsFragParsingData
BufferController hlsLevelPtsUpdated
2 BufferController hlsBufferAppending
AudioStreamController hlsFragParsingData
TimelineController hlsFragParsingUserdata
StreamController hlsFragParsed
AudioStreamController hlsFragParsed
FragmentTracker hlsBufferAppended
StreamController hlsBufferAppended
AudioStreamController hlsBufferAppended
FragmentTracker hlsBufferAppended
StreamController hlsBufferAppended
AudioStreamController hlsBufferAppended
FragmentTracker hlsBufferAppended
StreamController hlsBufferAppended
AudioStreamController hlsBufferAppended
FragmentTracker hlsBufferAppended
StreamController hlsBufferAppended
AudioStreamController hlsBufferAppended
FragmentTracker hlsBufferAppended
StreamController hlsBufferAppended
AudioStreamController hlsBufferAppended
FragmentTracker hlsBufferAppended
StreamController hlsBufferAppended
AbrController hlsFragBuffered
FragmentTracker hlsFragBuffered
BufferController hlsBufferEos
AudioStreamController hlsBufferAppended
前面带 2 的为多次触发
hls对象解析
第一层API Playlist
第二层API Level
第三层API Fragment 包括 视频 音频 字幕
第四层API Sample
第五层API PTS DTS 具体帧的DATA
把这些data buffer push到New MediaSource
接着将媒体源指向source Media.src = New MediaSource