10

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

首先,我正在浏览演示项目,但是甚至无法创建可以流式传输 mp3 或类似内容的 ExoPlayer 的简单工作实例。

非常感谢任何人在获得一个非常简单的 exoplayer 实例工作方面提供的任何帮助,我可以从中进行调整和构建,或者如果有人有任何线索可以获得更多参考或指南,我可以遵循这些信息,因为似乎可用的文档很少。

非常感谢所有的帮助!

4

3 回答 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。您必须传递 Context 和 UserAgent。为了简单起见,播放本地文件并将 null 作为 userAgent 传递:

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);
于 2015-07-20T11:32:31.407 回答
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.

于 2017-05-01T15:50:58.047 回答
2

今天在做一个项目时,我发现它this.myExoPlayer = ExoPlayerFactory.newSimpleInstance(getActivity());和其他一些现在已被弃用,Android Studio 建议使用新的方式。所以我为它做了一个快速的谷歌,但我到处都找到了旧方法。所以我查看了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();

我希望这是有帮助的。

于 2020-05-08T05:11:49.517 回答