Media3 ExoPlayer getMediaMetadata() 未获取正确数据

问题描述 投票:0回答:1

我正在尝试创建一个非常简单的应用程序 - 一个在线广播播放器,我想获取当前正在播放的歌曲的名称。这是代码:

player = new ExoPlayer.Builder(this).build();
        viewPlayer.setPlayer(player);
        MediaItem mediaItem = MediaItem.fromUri(link);
        player.setMediaItem(mediaItem);
        player.prepare();
        player.play();


        player.addListener(
                new Player.Listener() {

                    @Override
                    public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
                        metadata = player.getMediaMetadata();

                        if (metadata.title!=null) {
                            MainActivity.this.title = metadata.albumTitle.toString();
                            viewSong.setText(MainActivity.this.title);
                        } else viewSong.setText("NULL");
                    }
                }
        );

我想,我拥有 build.gradle 中所需的所有依赖项。

播放器工作正常,但

getMediaMetadata()
给了我这个(在调试模式下):

metadata = {MediaMetadata@11693}
    albumArtist = null
    albumTitle = null
    artist = null
    ..............
    ..............
    genre = Rock Music
    ..............
    ..............
    station = RADIO 1 ROCK

有一些数据,但我需要的是“空”。

我知道元数据包含标题和艺术家信息。 VLC player gives me this:

我还没有找到这个问题的相关答案。

java android metadata android-mediaplayer exoplayer
1个回答
0
投票

看起来您没有在任何地方添加“标题”,这就是为什么您得到“NULL”值作为输出。您可以使用下面的代码添加标题或从 MediaMetadata 获取标题或任何其他信息。

//Add required info into mediaMetadata
val mediaMetadata = MediaMetadata.Builder()
        .setDisplayTitle("Your title here")
        .setArtist("Your artist name")
        .build()

//Build mediaItem with data added and url of media
val mediaItem = MediaItem.Builder()
        .setMediaMetadata(mediaMetadata)
        .setUri("Your track URL here")

mediaItem.build()

//Now add this mediaItem into your code like this
player.setMediaItem(mediaItem);
player.prepare();
player.play();

//Now in listener
player.addListener(new Player.Listener() {

                @Override
                public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
                    //Now get posted values like this
                    println("Title : "+mediaMetadata.displayTitle)    
                }
            }
    );

您可以在 MediaMetadata Builder 中找到更多有用的方法,例如 setAlbumTitle、setAlbumArtist、setSubtitle、setDescription、setUserRating 等。

还有一件事,我认为你的代码是 Java 的,但我一开始的代码是 Kotlin 的,所以在使用之前将其转换为 Java 。

© www.soinside.com 2019 - 2024. All rights reserved.