Chi*_*tel 9 android audio-player android-music-player exoplayer exoplayer2.x
我正在尝试实现exoplayer这是我的exoplayer版本
implementation 'com.google.android.exoplayer:exoplayer:2.11.1'
Run Code Online (Sandbox Code Playgroud)
我正在创建一个音乐播放器应用程序,但我对过去 2 天exoplayer尝试实施的内容一无所知,exoplayer但它不起作用。我无法理解官方文档中的任何内容。
我找到了很多示例和教程,但都是关于使用exoplayer. 许多示例都使用不推荐使用的方法。
我正在尝试使用本教程来实现,但许多方法已被弃用,因此它不适用于 EX。
simpleExoplayer = ExoPlayerFactory.newSimpleInstance(
DefaultRenderersFactory(this),
DefaultTrackSelector(adaptiveTrackSelectionFactory),
DefaultLoadControl()
)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我从哪里开始或如何使用最新版本的 exoplayer.
任何帮助将不胜感激。
Chr*_*ona 16
通过新的更新,您可以使用SimpleExoPlayer.Builder以下命令创建一个简单的播放器实例:
simpleExoplayer = SimpleExoPlayer.Builder(context).build()
Run Code Online (Sandbox Code Playgroud)
您还可以提供Builder具有不同参数的 。请参阅https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.Builder.html
您可以使用我创建的这个简单的自定义类来帮助您入门。
class ExoPlayerHelper(
private val playerView: PlayerView,
onError: (ExoPlaybackException) -> Unit,
onPlayerBuffer: (Boolean) -> Unit
) {
private var exoPlayer: ExoPlayer? = null
private var mediaSource: ProgressiveMediaSource? = null
private val playerListener = object : Player.EventListener {
override fun onPlayerError(error: ExoPlaybackException) {
super.onPlayerError(error)
onError(error)
}
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
super.onPlayerStateChanged(playWhenReady, playbackState)
onPlayerBuffer(playbackState == Player.STATE_BUFFERING)
}
}
fun initializePlayer(url: String) {
exoPlayer = SimpleExoPlayer.Builder(playerView.context).build()
exoPlayer!!.repeatMode = Player.REPEAT_MODE_ALL
exoPlayer!!.addListener(playerListener)
playerView.player = exoPlayer
val userAgent =
Util.getUserAgent(playerView.context, playerView.context.getString(R.string.app_name))
mediaSource = ProgressiveMediaSource
.Factory(
DefaultDataSourceFactory(playerView.context, userAgent),
DefaultExtractorsFactory()
)
.createMediaSource(Uri.parse(url))
exoPlayer!!.prepare(mediaSource!!, true, false)
exoPlayer!!.playWhenReady = true
}
private fun killPlayer() {
if (exoPlayer != null) {
exoPlayer!!.release()
exoPlayer = null
mediaSource = null
playerView.player = null
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我也遇到了这个问题,这是我的解决方案
private val exoPlayer: SimpleExoPlayer by lazy { SimpleExoPlayer.Builder(this).build()}
Run Code Online (Sandbox Code Playgroud)
播放歌曲
private fun prepareExoPlayerFromURL(url: String) {
val dataSourceFactory =
DefaultDataSourceFactory(this, Util.getUserAgent(this, resources.getString(R.string.app_name)), null)
val extractorsFactory = DefaultExtractorsFactory()
// val audioSource = ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null)
val concateMediaSource = ConcatenatingMediaSource()
// to play from song list
for (i in mSongList) { // song list song arraylist
val mediaSource = ProgressiveMediaSource
.Factory(
DefaultDataSourceFactory(this, dataSourceFactory),
DefaultExtractorsFactory()
)
.createMediaSource(Uri.parse(i.musicFile)/*Uri.parse(i.uri)*/)
concateMediaSource.addMediaSource(mediaSource)
}
// to play single song
/* val audioSource = ProgressiveMediaSource
.Factory(
DefaultDataSourceFactory(this, dataSourceFactory),
DefaultExtractorsFactory()
)
.createMediaSource(Uri.parse(url))*/
exoPlayer.prepare(concateMediaSource/*audioSource*/)
exoPlayer.seekToDefaultPosition(songPosition)
exoPlayer.playWhenReady = true
setNotification()
}
Run Code Online (Sandbox Code Playgroud)
设置播放器和通知的监听器
private fun setListoner() {
exoPlayer.addListener(object : Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
when (playbackState) {
Player.STATE_BUFFERING -> Log.e(TAG,"STATE_BUFFERING")
Player.STATE_ENDED -> Log.e(TAG,"STATE_ENDED")
Player.STATE_IDLE -> Log.e(TAG,"STATE_IDLE")
Player.STATE_READY ->{
if (playWhenReady) {
Log.e(TAG, "PlaybackStatus.PLAYING")
} else {
Log.e(TAG, "PlaybackStatus.PAUSED")
}
}
else -> Log.e(TAG,"PlaybackStatus.IDLE")
}
}
})
}
Run Code Online (Sandbox Code Playgroud)
杀死玩家
private fun onDestroy() {
if (exoPlayer != null) {
exoPlayer.release()
exoPlayer = null
mediaSource = null
}
}
Run Code Online (Sandbox Code Playgroud)
更详细的内容可以查看官方文档
通用音乐播放器使用ExoPlayer 进行本地音频播放。
使用 ExoPlayer 构建功能丰富的媒体应用程序 (Google I/O '18)
| 归档时间: |
|
| 查看次数: |
8653 次 |
| 最近记录: |