使用 Exoplayer 从 Icecast 流中提取元数据

Jaz*_*Jaz 2 android metadata icecast exoplayer

自从从 Mediaplayer 切换到简单的 Exoplayer 实现后,我注意到加载时间有了很大改善,但我想知道是否有任何内置功能,例如流式传输音频时的元数据更改侦听器?

我已经使用一个简单的例子实现了 Exoplayer,如下所示:

    Uri uri = Uri.parse(url);
    DefaultSampleSource sampleSource =
            new DefaultSampleSource(new FrameworkSampleExtractor(context, uri, null), 2);
    TrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
    mExoPlayerInstance.prepare(audioRenderer);
    mExoPlayerInstance.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)

Dan*_*ugh 6

冰冷的元数据支持现在在 exoplayer 2.10 版中:

ExoPlayerFactory.newSimpleInstance(this).apply {
    setAudioAttributes(
      AudioAttributes.Builder()
        .setContentType(C.CONTENT_TYPE_MUSIC)
        .setUsage(C.USAGE_MEDIA)
        .build(), true
    )
    addMetadataOutput(object : MetadataOutput {
      override fun onMetadata(metadata: Metadata) {
        for (n in 0 until metadata.length()) {
          when (val md = metadata[n]) {
            is com.google.android.exoplayer2.metadata.icy.IcyInfo -> {
              Log.d(TAG, "Title: ${md.title} URL: ${md.url}")
            }
            else -> {
              Log.d(TAG, "Some other sort of metadata: $md")
            }
          }
        }
      }
    })
  }
Run Code Online (Sandbox Code Playgroud)