#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
, можно было получить как длительность, так и поиск местоположения. Как это можно реплицировать?