QML 媒体播放器不显示 mp3 流的元数据

Posted

技术标签:

【中文标题】QML 媒体播放器不显示 mp3 流的元数据【英文标题】:QML mediaplayer does not show metaData for mp3 streams 【发布时间】:2021-07-18 11:40:43 【问题描述】:

给定以下代码:

Item 
   id: mainPage
   anchors.fill: parent

   function getMetaData(metaData) 
         var text = ""

         text += "title: " + metaData.title + "\n"
         text += "subTitle: " + metaData.subTitle + "\n"
         text += "author: " + metaData.author + "\n"
         text += "comment: " + metaData.comment + "\n"
         text += "description: " + metaData.description + "\n"
         text += "category: " + metaData.category + "\n"
         text += "genre: " + metaData.genre + "\n"
         text += "language: " + metaData.language + "\n"
         text += "albumTitle: " + metaData.albumTitle + "\n"
         text += "albumArtist: " + metaData.albumArtist + "\n"
         text += "coverArtUrlSmall: " + metaData.coverArtUrlSmall + "\n"
         text += "coverArtUrlLarge: " + metaData.coverArtUrlLarge + "\n"
         text += "posterUrl: " + metaData.posterUrl + "\n"

      return text
   

   MediaPlayer 
      id: audioPlayer
      audioRole: MusicRole
      source:      "https://s3-webradio.antenne.de/antenne/stream/mp3?aw_0_1st.playerid=radio.de"
      //source: "https://swr-swr3-live.cast.addradio.de/swr/swr3/live/mp3/128/stream.mp3"
      //source: "http://bob.hoerradar.de/radiobob-hartesaite-mp3-hq?sABC=5r65511s%230%23os634o21s23sr4751opp80560p2o2sr6%23fgernzf.enqvbobo.qr&amsparams=playerid:streams.radiobob.de;skey:1583698207"

      onPlaybackStateChanged: 
         console.log("State: " + audioPlayer.status + " Meta data: \n" + getMetaData(audioPlayer.metaData));
      
   

我尝试过的音频流可以正常播放。但是我无法检索流的元数据。例如。标题、艺术家等。所有元字段都只是“未定义”。

我尝试了几个流,没有一个会显示任何元数据。但我确信流提供了这些信息,因为其他播放器应用程序会显示标题、艺术家等。

我尝试了其他方法(例如here),但我仍然没有得到任何元数据。

如果这很重要,我正在使用 ubuntu touch,并且应用程序防护策略是 ["audio", "networking"](也尝试过 music_files_read,没有帮助)。

谁能帮帮我?

【问题讨论】:

【参考方案1】:

你忘记了一些小事:

1.audioRole: MediaPlayer.MusicRole

2. mainPage.getMetaData(audioPlayer.metaData));你应该调用mainPage id,然后调用它的函数。

这是正确的代码:

Item 
    id: mainPage
    anchors.fill: parent

    function getMetaData(metaData) 
        var text = ""

        text += "title: " + metaData.title + "\n"
        text += "subTitle: " + metaData.subTitle + "\n"
        text += "author: " + metaData.author + "\n"
        text += "comment: " + metaData.comment + "\n"
        text += "description: " + metaData.description + "\n"
        text += "category: " + metaData.category + "\n"
        text += "genre: " + metaData.genre + "\n"
        text += "language: " + metaData.language + "\n"
        text += "albumTitle: " + metaData.albumTitle + "\n"
        text += "albumArtist: " + metaData.albumArtist + "\n"
        text += "coverArtUrlSmall: " + metaData.coverArtUrlSmall + "\n"
        text += "coverArtUrlLarge: " + metaData.coverArtUrlLarge + "\n"
        text += "posterUrl: " + metaData.posterUrl + "\n"

        return text
    


    MediaPlayer 
        id: audioPlayer
        audioRole: MediaPlayer.MusicRole
        source:      "https://s3-webradio.antenne.de/antenne/stream/mp3?aw_0_1st.playerid=radio.de"
        //source: "https://swr-swr3-live.cast.addradio.de/swr/swr3/live/mp3/128/stream.mp3"
        //source: "http://bob.hoerradar.de/radiobob-hartesaite-mp3-hq?sABC=5r65511s%230%23os634o21s23sr4751opp80560p2o2sr6%23fgernzf.enqvbobo.qr&amsparams=playerid:streams.radiobob.de;skey:1583698207"

        metaData.onMetaDataChanged: 
            console.log("State: " + audioPlayer.status + " Meta data: \n" + mainPage.getMetaData(audioPlayer.metaData));
        
    




这里是放出来的:

正如你在这张图片中看到的那样,它显示了genre: Pop

我从this site 测试另一个音乐并打印另一个元数据,未定义意味着源没有这个元数据。

【讨论】:

好的,所以对我来说它显示所有字段的“未定义”,包括第一个流的“流派”。至少第三个流 ("bob.hoerradar.de...") 必须 还提供标题/艺术家,因为它在另一个播放器中运行时显示。所以我想这可能是 Ubuntu Touch 问题。 可能是QT版本,我也用ubuntu。我使用的是Qt 5.14.0,我也有windows,我会在这里测试并告诉你 我使用的是 Ubuntu Touch(在手机上),而不是 ubuntu 桌面。 哦,所以我不知道:)

以上是关于QML 媒体播放器不显示 mp3 流的元数据的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 QMediaPlaylist 中所有媒体的元数据?

宽度改变从而改变某项元素的样式或者显示与否---媒体流的运用

Windows Phone 开发 - 媒体元素中的多个 .mp3 文件和音效不起作用

使用 Chromecast 投射时如何将媒体内容的元数据发送到通知?

Android开发本地及网络Mp3音乐播放器(十九)通知媒体库更新刚下载的MP3

单击 MP3 文件时打开媒体播放器