创建一个ExoPlayer的简单实例

时间:2015-06-25 11:00:21

标签: android streaming mp3 exoplayer

我目前正在寻找一种通过Android中的ExoPlayer开发利用Dash的应用程序。

首先,我正在阅读演示项目,但是即使创建一个可以流式传输mp3或类似内容的ExoPlayer的简单工作实例也遇到了麻烦。

非常感谢任何人可以提供的任何帮助,以获得一个非常简单的exoplayer实例工作,我可以适应和建立或如果有人有任何线索,我可以遵循更多的参考或指南,因为似乎很少文件可用。

非常感谢所有人和任何帮助!

2 个答案:

答案 0 :(得分:18)

首先用这一行实例化你的ExoPlayer:

exoPlayer = ExoPlayer.Factory.newInstance(RENDERER_COUNT, minBufferMs, minRebufferMs);

如果您只想播放音频,可以使用以下值:

RENDERER_COUNT = 1 //since you want to render simple audio
minBufferMs = 1000 
minRebufferMs = 5000

两个缓冲区值都可以根据您的要求进行调整

现在您必须创建一个DataSource。当您想要流式mp3时,您可以使用DefaultUriDataSource。您必须传递Context和UserAgent。为了简单起见,请播放本地文件并将null作为userAgent传递:

DataSource dataSource = new DefaultUriDataSource(context, null);

然后创建sampleSource:

ExtractorSampleSource sampleSource = new ExtractorSampleSource(
                    uri, dataSource, new Mp3Extractor(), RENDERER_COUNT, requestedBufferSize);

uri指向您的文件,作为Extractor,如果您想播放mp3,可以使用简单的默认Mp3Extractor。 requestedBufferSize可以根据您的要求再次调整。以5000为例。

现在,您可以使用示例源创建音轨渲染器,如下所示:

MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);

最后在exoPlayer实例上调用prepare:

exoPlayer.prepare(audioRenderer);

开始播放电话:

exoPlayer.setPlayWhenReady(true);

答案 1 :(得分:7)

以下是使用新的ExoPlayer 2 API和SimpleExoPlayer进行操作的方法。

首先创建播放器:

DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, bandwidthMeter);

TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
DefaultTrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
LoadControl loadControl = new DefaultLoadControl();

SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);

player.addListener(...); // To receive events from the player

然后创建您的MediaSource。对于MP3,您可以使用ExtractorMediaSource

ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
Uri uri = Uri.parse(mp3UriString);
Handler mainHandler = new Handler(Looper.getMainLooper());
MediaSource mediaSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, mainHandler, mediaSourceListener); // Listener defined elsewhere

然后在准备好时准备并播放:

player.prepare(mediaSource);
player.setPlayWhenReady(true);

对于DASH,您可以使用DashMediaSource代替ExtractorMediaSource