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

标签 android android-mediaplayer audio-player exoplayer android-music-player

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

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

两个网址都可以播放,但我无法获取 STREAM_URL_2(一个 .aac 文件)的 getDuration()。 .mp3 可以工作。

以下是我的做法。如何获取第二个 URL 的 getDuration()。如果 getDuration() 不起作用,那么即使 seekTo() 也不起作用。

我应该做出什么改变?我需要更改任何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);

最佳答案

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

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

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

关于android - 无法使用 ExoPlayer 获取 AAC 文件的 getDuration(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777975/

相关文章:

java - Android - 如何正确挂起 OpenGL

android - Photoshop 中 Android 和 iPhone 设计的屏幕分辨率

java - 无法根据从数据库中检索到的值设置微调器位置

ios - MPMusicPlayer 错误域=MPErrorDomain 代码=4?

javascript - 将 onKeyDown 事件与 CharCode 结合使用

android - 如何在android中将大图像尺寸缩小为缩略图尺寸

android - 将 uri 保存到 sharedPreferences 并使用 mediaplayer 播放

java - 媒体播放器在 API 级别 29 上不再工作

ListView 中的 Android 媒体播放器

youtube - 音乐服务页面如何检索YouTube视频URL?