使用Exoplayer播放音频URL新媒体3

发布于 2025-02-02 13:11:18 字数 1220 浏览 4 评论 0 原文

我正在学习新的Media3和 exoplayer 通过

文档真的很好。但是,音频立即开始播放活动。

单击 recyclerview 时,我只想播放这首歌。我有每首歌uri。

     musicAdapter = MusicAdapter(onClickListener = MusicAdapter.OnMusicClickListener{uri->

         //I want to play the song here using the uri with exoplayer media3 

        })

从文档中,播放器立即开始初始化活动开始:

    val trackSelector = DefaultTrackSelector(requireContext()).apply {
            setParameters(buildUponParameters().setMaxVideoSizeSd())
        }

     player = ExoPlayer.Builder(requireContext())
            .setTrackSelector(trackSelector)
            .build()
            .also { exoPlayer ->
                val mediaItem = MediaItem.fromUri(getString(R.string.media_url_mp3))
                exoPlayer.setMediaItem(mediaItem)
                exoPlayer.playWhenReady = true
                exoPlayer.seekTo(currentItem, playbackPosition)
                exoPlayer.prepare()
     }

I'm learning about the new media3 and ExoPlayer through https://developer.android.com/codelabs/exoplayer-intro#0

The docs are really good. However, the audio starts playing immediately the activity is launched.

I want to only play the song when it is clicked on the RecyclerView. I have each song uri.

     musicAdapter = MusicAdapter(onClickListener = MusicAdapter.OnMusicClickListener{uri->

         //I want to play the song here using the uri with exoplayer media3 

        })

From the docs, the player is initialised immediately the activity starts like this:

    val trackSelector = DefaultTrackSelector(requireContext()).apply {
            setParameters(buildUponParameters().setMaxVideoSizeSd())
        }

     player = ExoPlayer.Builder(requireContext())
            .setTrackSelector(trackSelector)
            .build()
            .also { exoPlayer ->
                val mediaItem = MediaItem.fromUri(getString(R.string.media_url_mp3))
                exoPlayer.setMediaItem(mediaItem)
                exoPlayer.playWhenReady = true
                exoPlayer.seekTo(currentItem, playbackPosition)
                exoPlayer.prepare()
     }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无悔心 2025-02-09 13:11:18

您可以将PlayWhen Ready属性设置为False IT基本上告诉Exoplayer在加载视频/音频后不要播放视频/音频。
然后,您可以在OnClickHandler中手动调用player.play()函数。

一个简单的例子是: -

    val trackSelector = DefaultTrackSelector(this).apply {
            setParameters(buildUponParameters().setMaxVideoSizeSd())
        }

     player = ExoPlayer.Builder(this)
            .setTrackSelector(trackSelector)
            .build()
            .apply {
                playWhenReady = false
     }

     musicAdapter = MusicAdapter(onClickListener = MusicAdapter.OnMusicClickListener{uri->
                val mediaItem = MediaItem.fromUri(uri)

               player.setMediaItem(mediaItem)
               player.prepare()
               player.play()

        })


注意:我还考虑了URI类型的URI变量而不是字符串。

You can set the playWhenReady attribute to false it basically tells exoplayer to not play the video/audio as soon as it is loaded.
Then you can manually call the player.play() function inside the onClickHandler.

A simple example is this :-

    val trackSelector = DefaultTrackSelector(this).apply {
            setParameters(buildUponParameters().setMaxVideoSizeSd())
        }

     player = ExoPlayer.Builder(this)
            .setTrackSelector(trackSelector)
            .build()
            .apply {
                playWhenReady = false
     }

     musicAdapter = MusicAdapter(onClickListener = MusicAdapter.OnMusicClickListener{uri->
                val mediaItem = MediaItem.fromUri(uri)

               player.setMediaItem(mediaItem)
               player.prepare()
               player.play()

        })


Note: I have also considered uri variable of type Uri not of String.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文