【问题标题】:Creating a simple instance of ExoPlayer创建一个简单的 ExoPlayer 实例
【发布时间】:2015-06-25 11:00:20
【问题描述】:

我目前正在寻求开发一个通过 Android 中的 ExoPlayer 使用 Dash 的应用程序。

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

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

非常感谢大家的帮助!

【问题讨论】:

    标签: android streaming mp3 exoplayer


    【解决方案1】:

    首先用这行实例化你的 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);
    

    【讨论】:

    • 非常感谢您的评论,我认为 Exoplayer 是 android 的一项重要资产,但目前它在初学者友好文档中的代表性不足,尽管也许初学者应该远离,直到他们知道更好诶!我刚刚问了另一个与播放器有关的问题,如果您觉得您也可以提供帮助,我希望您能提供一些意见!谢谢!
    • 好极了,但是如何显示视频呢?使用视频视图? .. 没关系,刚刚找到github.com/brianwernick/ExoMedia
    • @MaxMarshall 和 mismor 如何播放 aac 文件?那么提取器应该是什么?
    【解决方案2】:

    以下是使用新的 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

    【讨论】:

    • 更新:DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "exoplayer2example"), bandwidthMeter)
    • 这已被弃用。
    【解决方案3】:

    今天在做一个项目时,我发现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();
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2020-01-20
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多