0

zu bekommen Ich habe versucht, eine URL mit ExoPlayer zu streamen. Die URLs:Nicht in der Lage, getDuration() für AAC-Datei mit 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"

Beiden URLs spielen, aber ich bin nicht in der Lage, die getDuration() für STREAM_URL_2 zu erhalten, die eine .aac Datei. Die .mp3 funktioniert.

Folgendes ist, wie ich es mache. Wie bekomme ich die getDuration() für die 2. URL. Selbst seekTo() funktioniert nicht, wenn getDuration() nicht funktioniert.

Welche Änderung sollte ich vornehmen? Muss ich irgendeine Extractor ändern?

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); 

Antwort

1

In Ihrem Code ist nichts falsch. MP3-Dateien sind so formatiert, dass es möglich ist, die Dauer der Datei zu berechnen und in eine beliebige Position zu suchen.

Allerdings haben AAC-Dateien diesen Luxus nicht. Sie können die Dauer nicht berechnen und können nicht darin suchen.

Es gibt eine AAC-Datei in Exoplayer Demo APK. Ich denke, wenn du das spielst, wird es das gleiche Verhalten zeigen.

+0

Ja, Sie haben Recht. Das gleiche Problem gibt es auch bei dieser AAC-Datei. Aber als ich 'MediaPlayer' benutzte, war es möglich sowohl die Dauer als auch die Suche nach einem Ort zu erreichen. Wie kann das repliziert werden? –