onStart method
策略启动,订阅感兴趣的状态变化
Called when the strategy is started. Subscribe to notifiers here.
controller The player widget controller providing state access.
Implementation
@override
void onStart(AliPlayerWidgetController controller) {
// 监听 prepare 事件,自行记录时间戳
listen<int>(controller.prepareNotifier, (_) {
_prepareStartTime = DateTime.now().millisecondsSinceEpoch;
_preparedCompleted = false;
_firstFrameCompleted = false;
});
// 监听 prepared 状态,统计数据源准备耗时
listen<bool>(controller.isPreparedNotifier, (isPrepared) {
if (isPrepared && !_preparedCompleted && _prepareStartTime > 0) {
_preparedCompleted = true;
final now = DateTime.now().millisecondsSinceEpoch;
final cost = Duration(milliseconds: now - _prepareStartTime);
logi('Player prepared, cost: ${cost.inMilliseconds}ms', tag: name);
onPrepared?.call(cost);
}
});
// 监听渲染状态,捕获首帧时刻
listen<bool>(controller.isRenderedNotifier, (isRendered) {
if (isRendered && !_firstFrameCompleted && _prepareStartTime > 0) {
_firstFrameCompleted = true;
final now = DateTime.now().millisecondsSinceEpoch;
final cost = Duration(milliseconds: now - _prepareStartTime);
logi('First frame rendered, cost: ${cost.inMilliseconds}ms', tag: name);
onFirstFrame?.call(cost);
}
});
}