onStart method

  1. @override
void onStart(
  1. AliPlayerWidgetController controller
)
override

策略启动,订阅感兴趣的状态变化

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);
    }
  });
}