Android 如何使用ExoPlayer
我想在我的应用程序中使用ExoPlayer。你能告诉我哪一个是最简单的例子吗?我试着去做,但对我来说并不容易。我试图将Android 如何使用ExoPlayer,android,exoplayer,Android,Exoplayer,我想在我的应用程序中使用ExoPlayer。你能告诉我哪一个是最简单的例子吗?我试着去做,但对我来说并不容易。我试图将库导入为模块,然后收到托盘释放错误。如正文所述,您可以像导入任何其他依赖项一样导入ExoPlayer: 在应用程序build.gradle依赖项中添加: compile 'com.google.android.exoplayer:exoplayer:rX.X.X' 截至2015年10月27日,当前版本为r1.5.1。请参阅。旧问题,但由于简单的ExoPlayer教程太少,我写了
库
导入为模块,然后收到托盘释放
错误。如正文所述,您可以像导入任何其他依赖项一样导入ExoPlayer:
在应用程序build.gradle
依赖项中添加:
compile 'com.google.android.exoplayer:exoplayer:rX.X.X'
截至2015年10月27日,当前版本为r1.5.1
。请参阅。旧问题,但由于简单的ExoPlayer教程太少,我写了这篇文章。我最近将一个应用程序从使用Android的默认媒体播放器转换为ExoPlayer。性能的提高是惊人的,它适用于更广泛的设备。然而,这有点复杂
这个例子是专门为播放http音频流而定制的,但通过实验,您可能可以很容易地将其应用于其他任何内容。本例使用最新的ExoPlayer v1.xx,目前为v1.5.11:
首先,将其放入build.gradle(Module:app)文件中的“依赖项”下:
您的类还应该实现ExoPlayer.Listener
:
...implements ExoPlayer.Listener
下面是播放http音频流的相关代码:
private static final int RENDERER_COUNT = 1; //since we want to render simple audio
private static final int BUFFER_SEGMENT_SIZE = 64 * 1024; // for http mp3 audio stream use these values
private static final int BUFFER_SEGMENT_COUNT = 256; // for http mp3 audio steam use these values
private ExoPlayer exoPlayer;
// for http mp3 audio stream, use these values
int minBufferMs = 1000;
int minRebufferMs = 5000;
// Prepare ExoPlayer
exoPlayer = ExoPlayer.Factory.newInstance(RENDERER_COUNT, minBufferMs, minRebufferMs);
// String with the url of the stream to play
String stream_location = "http://audio_stream_url";
// Convert String URL to Uri
Uri streamUri = Uri.parse(stream_location);
// Settings for ExoPlayer
Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);
String userAgent = Util.getUserAgent(ChicagoPoliceRadioService.this, "ExoPlayer_Test");
DataSource dataSource = new DefaultUriDataSource(ChicagoPoliceRadioService.this, null, userAgent);
ExtractorSampleSource sampleSource = new ExtractorSampleSource(
streamUri, dataSource, allocator, BUFFER_SEGMENT_SIZE * BUFFER_SEGMENT_COUNT);
MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.DEFAULT);
// Attach listener we implemented in this class to this ExoPlayer instance
exoPlayer.addListener(this);
// Prepare ExoPlayer
exoPlayer.prepare(audioRenderer);
// Set full volume
exoPlayer.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 1f);
// Play!
exoPlayer.setPlayWhenReady(true);
有三种回调方法:
@Override
public void onPlayWhenReadyCommitted() {
// No idea what would go here, I left it empty
}
// Called when ExoPlayer state changes
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
// If playbackState equals STATE_READY (4), that means ExoPlayer is set to
// play and there are no errors
if (playbackState == ExoPlayer.STATE_READY) {
// ExoPlayer prepared and ready, no error
// Put code here, same as "onPrepared()"
}
}
// Called on ExoPlayer error
@Override
public void onPlayerError(ExoPlaybackException error) {
// ExoPlayer error occurred
// Put your error code here
}
当你玩完之后,照常做:
if (exoPlayer != null) {
exoPlayer.stop();
exoPlayer.release();
}
注意:我仍然不能100%确定所有ExoPlayer设置的细节。我从来没有试过玩视频。请注意,这是针对ExoPlayer的1.5.x版,2.0版改变了很多,我仍然没有弄清楚。我强烈推荐这段代码给任何拥有从网络流式传输音频的应用程序的人,因为它的性能提升令人难以置信。对于我的应用程序,它修复了三星手机的一个问题,在停止之前只能播放30秒左右的音频。嘿,请参考此解决方案,希望它能帮助您最简单的方法就是将jcenter添加到您的构建中gradlerepo,然后添加com.google.android.exoplayer:exoplayer作为依赖项。嗯。。。我的意思是,示例中有许多文件,我不知道应该使用什么。谢谢,我正在使用compile'com.google.android.exoplayer:exoplayer:r1.5.1',但我不知道如何将exoplayer添加到我的应用程序中并在其上播放视频。你必须深入了解是的,我的应用程序正在使用exoplayer播放视频。无论如何,非常感谢!如果您认为我的答案是正确的,请随时接受我的答案@NaProYes,我想投票表决您的答案,但我没有足够的声誉这么做,对不起。我面临着使用ExoPlayer获取AAC文件的getDuration()的问题。你能看一下吗。谢谢
if (exoPlayer != null) {
exoPlayer.stop();
exoPlayer.release();
}