https://exoplayer.dev/guide.html
从官方文档上面可以看到。播放的相关监听是设置到 SimpleExoPlayer 中的,也可以不用 SimpleExoPlayer ,自己基于BasePlayer 自己写也可以。
'''
player.addListener(eventListener);
'''
上面是设置监听,
从官方提供的demo 的PlayerView 中 可以 看到
他实现的方法其实不多,但也能够播放视频了,像网速啊,什么的他里面就没有。但是肯定是有一个更加全面和详细的监听的,那就是 player.addAnalyticsListener(analyticsListener);//添加分析记录器
这个方法。
AnalyticsListener analyticsListener=new AnalyticsListener() {
@Override
public void onPlayerStateChanged(EventTime eventTime, boolean playWhenReady, int playbackState) {
Log.e(TAG, "onPlayerStateChanged: 已更改的播放机状态" );
}
@Override
public void onTimelineChanged(EventTime eventTime, int reason) {
Log.e(TAG, "onTimelineChanged: 已更改的时间" );
}
@Override
public void onPositionDiscontinuity(EventTime eventTime, int reason) {
Log.e(TAG, "onPositionDiscontinuity:非定位连续性 " );
}
@Override
public void onSeekStarted(EventTime eventTime) {
Log.e(TAG, "onSeekStarted:开始seek " );
}
@Override
public void onSeekProcessed(EventTime eventTime) {
Log.e(TAG, "onSeekProcessed: seek 处理" );
}
@Override
public void onPlaybackParametersChanged(EventTime eventTime, PlaybackParameters playbackParameters) {
Log.e(TAG, "onPlaybackParametersChanged: 播放参数更改时" );
}
@Override
public void onRepeatModeChanged(EventTime eventTime, int repeatMode) {
Log.e(TAG, "onRepeatModeChanged: 重复模式更改时" );
}
@Override
public void onShuffleModeChanged(EventTime eventTime, boolean shuffleModeEnabled) {
Log.e(TAG, "onShuffleModeChanged:论分流模式的改变 " );
}
@Override
public void onLoadingChanged(EventTime eventTime, boolean isLoading) {
Log.e(TAG, "onLoadingChanged: 加载时更改" );
}
@Override
public void onPlayerError(EventTime eventTime, ExoPlaybackException error) {
Log.e(TAG, "onPlayerError: " );
}
@Override
public void onTracksChanged(EventTime eventTime, TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
Log.e(TAG, "onTracksChanged: 在更改的轨道上" );
}
@Override
public void onLoadStarted(EventTime eventTime, MediaSourceEventListener.LoadEventInfo loadEventInfo, MediaSourceEventListener.MediaLoadData mediaLoadData) {
Log.e(TAG, "onLoadStarted: 加载启动" );
showLoading();
}
@Override
public void onLoadCompleted(EventTime eventTime, MediaSourceEventListener.LoadEventInfo loadEventInfo, MediaSourceEventListener.MediaLoadData mediaLoadData) {
Log.e(TAG, "onLoadCompleted: 加载完成" );
dissmissLoading();
}
@Override
public void onLoadCanceled(EventTime eventTime, MediaSourceEventListener.LoadEventInfo loadEventInfo, MediaSourceEventListener.MediaLoadData mediaLoadData) {
Log.e(TAG, "onLoadCanceled:已取消加载 " );
dissmissLoading();
}
@Override
public void onLoadError(EventTime eventTime, MediaSourceEventListener.LoadEventInfo loadEventInfo, MediaSourceEventListener.MediaLoadData mediaLoadData, IOException error, boolean wasCanceled) {
Log.e(TAG, "onLoadError: " );
dissmissLoading();
}
@Override
public void onDownstreamFormatChanged(EventTime eventTime, MediaSourceEventListener.MediaLoadData mediaLoadData) {
Log.e(TAG, "onDownstreamFormatChanged: 下游格式更改时" );
}
@Override
public void onUpstreamDiscarded(EventTime eventTime, MediaSourceEventListener.MediaLoadData mediaLoadData) {
Log.e(TAG, "onUpstreamDiscarded: \n" +
"上游废弃" );
}
@Override
public void onMediaPeriodCreated(EventTime eventTime) {
Log.e(TAG, "onMediaPeriodCreated: 创建的媒体时段" );
}
@Override
public void onMediaPeriodReleased(EventTime eventTime) {
Log.e(TAG, "onMediaPeriodReleased: 关于媒体发布期" );
}
@Override
public void onReadingStarted(EventTime eventTime) {
Log.e(TAG, "onReadingStarted: 开始阅读" );
onStart();
}
@Override
public void onBandwidthEstimate(EventTime eventTime, int totalLoadTimeMs, long totalBytesLoaded, long bitrateEstimate) {
Log.e(TAG, "onBandwidthEstimate: 带宽估计 总加载时间"+totalLoadTimeMs+" 已加载的字节总数"+totalBytesLoaded +"应该是网速"+bitrateEstimate/(1024*1024));
}
@Override
public void onSurfaceSizeChanged(EventTime eventTime, int width, int height) {
Log.e(TAG, "onSurfaceSizeChanged: "+width+"------"+height );
}
@Override
public void onMetadata(EventTime eventTime, Metadata metadata) {
Log.e(TAG, "onMetadata: 元数据" );
}
@Override
public void onDecoderEnabled(EventTime eventTime, int trackType, DecoderCounters decoderCounters) {
Log.e(TAG, "onDecoderEnabled:启用解码器时 " );
}
@Override
public void onDecoderInitialized(EventTime eventTime, int trackType, String decoderName, long initializationDurationMs) {
Log.e(TAG, "onDecoderInitialized: 解码器初始化时" );
}
@Override
public void onDecoderInputFormatChanged(EventTime eventTime, int trackType, Format format) {
Log.e(TAG, "onDecoderInputFormatChanged:解码器输入格式更改时 " );
}
@Override
public void onDecoderDisabled(EventTime eventTime, int trackType, DecoderCounters decoderCounters) {
Log.e(TAG, "onDecoderDisabled:已禁用解码器 " );
}
@Override
public void onAudioSessionId(EventTime eventTime, int audioSessionId) {
Log.e(TAG, "onAudioSessionId: 在音频会话ID上" );
}
@Override
public void onAudioAttributesChanged(EventTime eventTime, AudioAttributes audioAttributes) {
Log.e(TAG, "onAudioAttributesChanged: 音频属性改变" );
}
@Override
public void onVolumeChanged(EventTime eventTime, float volume) {
Log.e(TAG, "onVolumeChanged: 音量改变时" );
}
@Override
public void onAudioUnderrun(EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
Log.e(TAG, "onAudioUnderrun: 在音频欠载运行时" );
}
@Override
public void onDroppedVideoFrames(EventTime eventTime, int droppedFrames, long elapsedMs) {
Log.e(TAG, "onDroppedVideoFrames:在丢弃的视频帧上 " );
}
@Override
public void onVideoSizeChanged(EventTime eventTime, int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
Log.e(TAG, "onVideoSizeChanged: " );
}
@Override
public void onRenderedFirstFrame(EventTime eventTime, @Nullable Surface surface) {
Log.e(TAG, "onRenderedFirstFrame: 在渲染的第一帧上" );
}
@Override
public void onDrmSessionAcquired(EventTime eventTime) {
Log.e(TAG, "onDrmSessionAcquired:在获得DRM会话时 " );
}
@Override
public void onDrmKeysLoaded(EventTime eventTime) {
Log.e(TAG, "onDrmKeysLoaded: 在已加载的DRM密钥上" );
}
@Override
public void onDrmSessionManagerError(EventTime eventTime, Exception error) {
Log.e(TAG, "onDrmSessionManagerError: 在DRM会话管理器错误时" );
}
@Override
public void onDrmKeysRestored(EventTime eventTime) {
Log.e(TAG, "onDrmKeysRestored:" +
"在DRM密钥恢复时" );
}
@Override
public void onDrmKeysRemoved(EventTime eventTime) {
Log.e(TAG, "onDrmKeysRemoved:在已删除的DRM密钥上 " );
}
@Override
public void onDrmSessionReleased(EventTime eventTime) {
Log.e(TAG, "onDrmSessionReleased: 会话已释放" );
}
};
上面很多都是 百度翻译的,应该有点出入。嗯嗯,百度 翻译巨屌,可以越过 下划线和驼峰命名,挺好的。