Не удается получить getDuration() для файла AAC с помощью ExoPlayer

#android #android-mediaplayer #audio-player #exoplayer #android-music-player

#Android #android-mediaplayer #аудиоплеер #exoplayer #android-музыкальный проигрыватель

Вопрос:

Я пытался передать поток с URL использованием 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’s call.aac«

Воспроизводятся оба URL-адреса, но я не могу получить getDuration() для STREAM_URL_2, который является файлом .aac. .mp3 работает.

Ниже показано, как я это делаю. Как мне получить getDuration() для 2-го 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);
  

Ответ №1:

В вашем коде нет ничего плохого. Файлы MP3 отформатированы таким образом, что можно рассчитать продолжительность файла и искать в любой позиции внутри него.

Однако файлы AAC не имеют такой роскоши. Вы не можете вычислить продолжительность и не можете искать в ней.

В Exoplayer есть файл AAC Demo APK. Я думаю, что если вы сыграете в это, он будет вести себя так же.

Комментарии:

1. Да, вы правы. То же самое касается и этого файла AAC. Но, когда я использовал MediaPlayer , можно было получить как длительность, так и поиск местоположения. Как это можно реплицировать?