Android面试题——掘金-三方框架之Exoplayer(5.6)
一 概述
1 | 以下是关于 ExoPlayer(音视频播放库) 的 Android 面试题整理, |
二 面试题解答(仅供参考)
2.1 什么是 ExoPlayer?它的优势是什么?
1 | 1.概念 |
2.2 ExoPlayer 的核心架构有哪些模块?
1 | +------------------------+ |
2.3 ExoPlayer 的基本使用方式?
1 | val player = ExoPlayer.Builder(context).build() |
2.4 ExoPlayer 与 MediaPlayer 有什么区别?
特性 | ExoPlayer | MediaPlayer |
---|---|---|
扩展性 | ✅ 可自定义 | ❌ 不可扩展 |
流媒体支持 | ✅ 支持 HLS、DASH 等 | 一般支持,局限较大 |
缓存控制 | ✅ 可自定义缓存策略 | ❌ 控制能力弱 |
解码能力 | ✅ 支持软解/硬解切换 | 主要依赖系统硬解 |
子标题/多音轨支持 | ✅ 完善 | 支持有限 |
性能优化 | ✅(Google 官方维护) | ❌ 维护较少 |
2.5 ExoPlayer 如何实现缓存?
1 | 通过 SimpleCache 实现磁盘缓存,结合 CacheDataSourceFactory 控制缓存行为 |
2.6 如何监听播放状态变化?
1 | player.addListener(object : Player.Listener { |
2.7 ExoPlayer 如何支持视频列表播放(如抖音上下滑)?
1 | -使用 RecyclerView + PlayerView 复用; |
2.8 如何播放本地文件/视频流/直播?
1 | // 本地文件 |
2.9 如何支持视频播放倍速?
1 | player.setPlaybackParameters(PlaybackParameters(speed = 1.5f)) |
2.10 如何实现 ExoPlayer 的预加载(Preload)?
1 | 方法:使用 preload prepare + seekTo 控制 |
2.11 如何控制缓存目录大小和清理策略?
1 | val evictor = LeastRecentlyUsedCacheEvictor(100 * 1024 * 1024) // 100MB |
2.12 如何实现静音播放 / 循环播放?
1 | // 静音 |
2.13 ExoPlayer 如何控制播放的画面比例?
1 | playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT |
2.14 如何播放视频的指定片段(如 1-10 秒)?
1 | val mediaItem = MediaItem.Builder() |
2.15 ExoPlayer 在后台播放或悬浮窗支持吗?
1 | 后台播放:支持,只需设置音频焦点策略; |
2.16 总结
能力项 | 是否支持 |
---|---|
流媒体播放 | ✅ |
DRM、广告、字幕等 | ✅ |
缓存机制 | ✅(可定制) |
视频帧控制 | ✅ |
多种媒体格式支持 | ✅ |
HLS/DASH 支持 | ✅ |
视频预加载 | ✅ |
播放列表支持 | ✅ |
三 参考
- 掘金—知识库的大纲