无法使用 ExoPlayer 获取 AAC 文件的 getDuration()

Ank*_*wal 2 android audio-player android-music-player android-mediaplayer exoplayer

我一直在尝试流式传输URL使用ExoPlayer. 网址:

STREAM_URL_1 = " http://storage.googleapis.com/exoplayer-test-media-0/play.mp3 "

STREAM_URL_2 = " https://s3-ap-southeast-1.amazonaws.com/ok.talk.channels/zakirkhan/Zakir+khan+-+when+my+father+took+my+gf%27s+call.aac "

两个 URL 都可以播放,但我无法获得getDuration()STREAM_URL_2 的 .aac 文件。.mp3 有效。

以下是我的做法。如何获取getDuration()第二个 URL。即使seekTo()如果不工作getDuration()不工作。

我应该做出什么改变?我需要改变任何Extractor吗?

player = ExoPlayer.Factory.newInstance(RENDERER_COUNT, MIN_BUFFER_MS, MIN_RE_BUFFER_MS);
playerControl = new PlayerControl(player);
Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);

private static final String STREAM_URL = "http://storage.googleapis.com/exoplayer-test-media-0/play.mp3";
uri = Uri.parse(STREAM_URL);

// Build the video and audio renderers.
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(player.getMainHandler(),
    null);
String userAgent = Util.getUserAgent(this, "MyMediaPlayer");
DataSource dataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent, true);
ExtractorSampleSource sampleSource = new ExtractorSampleSource(uri, dataSource, allocator,
    BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);

MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource,
    null, true);

// Invoke the callback.
TrackRenderer[] renderers = new TrackRenderer[1];
renderers[RadioPlayer.TYPE_AUDIO] = audioRenderer;
player.prepare(renderers);
player.seekTo(0);
player.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)

小智 5

您的代码没有任何问题。MP3 文件的格式可以计算文件的持续时间,并在其中查找任何位置。

但是,AAC 文件没有那么奢侈。你无法计算持续时间,也无法在其中寻找。

Exoplayer Demo APK 中有一个 AAC 文件。我认为如果你玩那个,它会表现出同样的行为。