0

我一直在尝试使用ExoPlayer来传输URL。网址:无法使用ExoPlayer获取AAC文件的getDuration()

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

两个网址玩,但我没能拿到getDuration()为STREAM_URL_2这是一个。AAC文件。 .mp3的作品。

以下是我该怎么做。如何获得第二个URL的getDuration()。即使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 Demo APK中有一个AAC文件。我想如果你玩那个,它会表现出同样的行为。

+0

是的,你是对的。 AAC文件也是这个问题。但是,当我使用“MediaPlayer”时,可以同时获得持续时间和寻找位置。这怎么能被复制? –