创建ExoPlayer的简单实例

问题描述 投票:10回答:3

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

首先,我要进行演示项目,但是即使创建一个简单的ExoPlayer工作实例,也可以流mp3或类似内容,却遇到了麻烦。

非常感谢任何人可以提供的与获得非常简单的exoplayer实例有关的任何帮助,我可以根据这些实例进行改编和构建,或者如果有人有任何线索可以获取更多参考或指南,我可以遵循,因为似乎文件很少可用。

非常感谢大家的帮助!

android streaming mp3 exoplayer
3个回答
19
投票

首先用此行实例化您的ExoPlayer:

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

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

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

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

现在您必须创建一个数据源。当您要流mp3时,可以使用DefaultUriDataSource。您必须传递上下文和UserAgent。为了简单起见,请播放本地文件并以userAgent的形式传递null:

DataSource dataSource = new DefaultUriDataSource(context, null);

然后创建sampleSource:

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

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

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

MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);

最后在exoPlayer实例上调用prepare:

exoPlayer.prepare(audioRenderer);

开始播放通话:

exoPlayer.setPlayWhenReady(true);

9
投票

这里是使用新的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


0
投票

[今天在进行项目工作时,我发现this.myExoPlayer = ExoPlayerFactory.newSimpleInstance(getActivity());和其他一些对象已被弃用,Android Studio建议使用新方法。所以我为此做了一个快速的Google,但是到处都找到了旧方法。所以我查看了SimpleExoPlayer.java文件,阅读了一些方法。这就是您初始化simpleExoPlayer的方式:

  Activity activity = getActivity(); // if you are in a fragment
  // Or,   activity = YourActivity.this;      if you are in an Activity
  SimpleExoPlayer simpleExoPlayer = new SimpleExoPlayer.Builder(activity).build();

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.