【问题标题】:ExoPlayer - how to play local mp3 fileExoPlayer - 如何播放本地 mp3 文件
【发布时间】:2015-04-23 07:31:33
【问题描述】:

我正在尝试使用 ExoPlayer 而不是 MediaPlayer,因为 MediaPlayer 返回错误的 getCurrentPosition() 是一个常见错误,我需要一个替代品。

但是我在任何地方都找不到如何通过与 MediaPlayer 的.setDataSource(String filepath) 相同的文件路径打开本地文件的信息

Google 没有任何示例,官方文档站点奇怪地在两台计算机上崩溃了我的 FireFox 浏览器

【问题讨论】:

标签: android exoplayer


【解决方案1】:

使用 ExoPlayer 2.1,并从 demo 项目开始,您可以播放 assets 文件夹中的 mp3 文件,而无需修改任何 Java 代码,只需在 assets 文件夹中添加 mp3 文件并创建或修改json 文件。从 ExoPlayer demo 项目开始:

  1. 将 mp3 文件放在demo/assets 文件夹中(带有media.exolist.json)。

  2. 要么修改media.exolist.json,要么创建一个新文件,例如my.exolist.json,其中包含一个或多个格式如下的条目:

{ "name": "Children's Songs", "samples": [ { "name": "Mary Had a Little Lamb", "uri": "asset:///mary1.mp3" }, { "name": "Itsy Bitsy Spider", "uri": "asset:///spider1.mp3" } ] },

(最后一个逗号假设后面会有另一个类别,例如Blues SongsJazz Songs等,有更多的mp3条目。最后一个类别后面没有逗号。)

下图是点击Children's Songs后的选择器活动界面:

单击Mary Had a Little LambItsy Bitsy Spider 即可播放该mp3。

【讨论】:

    【解决方案2】:

    这些天,Google 更改了一些变量名称和类定义!以下不同的作品适合我。

    --- a/demo/src/main/java/com/google/android/exoplayer/demo/SampleChooserActivity.java
    +++ b/demo/src/main/java/com/google/android/exoplayer/demo/SampleChooserActivity.java
    @@ -30,6 +28,8 @@ import android.widget.ExpandableListView;
     import android.widget.ExpandableListView.OnChildClickListener;
     import android.widget.TextView;
    
     import java.util.ArrayList;
     import java.util.Collections;
     import java.util.List;
    @@ -44,7 +44,12 @@ public class SampleChooserActivity extends Activity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.sample_chooser_activity);
         final List<SampleGroup> sampleGroups = new ArrayList<>();
    -    SampleGroup group = new SampleGroup("YouTube DASH");
    +
    +    SampleGroup group = new SampleGroup("test videos");
    +    group.addAll(Samples.LOCAL_VIDEOS);
    +    sampleGroups.add(group);
    +
    +    group = new SampleGroup("YouTube DASH");
         group.addAll(Samples.YOUTUBE_DASH_MP4);
         group.addAll(Samples.YOUTUBE_DASH_WEBM);
         sampleGroups.add(group);
    diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java b/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java
    index 9f58528..9e86f99 100644
    --- a/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java
    +++ b/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java
    @@ -248,6 +248,13 @@ import java.util.Locale;
             "http://vod.leasewebcdn.com/bbb.flv?ri=1024&rs=150&start=0", Util.TYPE_OTHER),
       };
    
    +  public static final Sample[] LOCAL_VIDEOS = new Sample[] {
    +          new Sample("Some User friendly name of video 1",
    +                  "file:///mnt/sdcard/test1.mp4", Util.TYPE_OTHER),
    +          new Sample("Some User friendly name of video 2",
    +                  "file:///mnt/sdcard/test2.mp4", Util.TYPE_OTHER),
    +  };
    +
       private Samples() {}
    
     }
    

    【讨论】:

      【解决方案3】:

      对 Srikanth Peddibhotla 的代码稍作修改即可工作

      文件的 Uri 字符串应该是“file:///mnt/sdcard/YourFilename.mp4”而不是Samples.java中的“/mnt/sdcard/YourFilename.mp4”

      public static final Sample[] LOCAL_VIDEOS = new Sample[] {
      new Sample("Some User friendly name of video 1",
       "file:///mnt/sdcard/video1.mp4", DemoUtil.TYPE_MP4),
      new Sample("Some User friendly name of video 2",
      "file:///mnt/sdcard/video2.mp4", DemoUtil.TYPE_MP4),
      }; 
      

      另外,将以下行添加到SampleChooserActivity.java

       sampleAdapter.add(new Header("Local Videos"));
       sampleAdapter.addAll((Object[]) Samples.LOCAL_VIDEOS);
      

      【讨论】:

        【解决方案4】:

        可以修改 github 中的 ExoPlayer 演示应用来播放本地文件。 为此,请编辑 https://github.com/google/ExoPlayer/blob/master/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java 文件以添加新视频集。

        public static final Sample[] LOCAL_VIDEOS = new Sample[] {
           new Sample("Some User friendly name of video 1",
             "/mnt/sdcard/video1.mp4", DemoUtil.TYPE_OTHER),
          new Sample("Some User friendly name of video 2",
            "/mnt/sdcard/video2.mp4", DemoUtil.TYPE_OTHER),
        };
        

        为此,请编辑 https://github.com/google/ExoPlayer/blob/master/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java 文件以添加新样本集。

        sampleAdapter.add(new Header("Local Videos"));
        sampleAdapter.addAll((Object[]) Samples.LOCAL_VIDEOS);
        

        【讨论】:

        • 好的回复,谢谢!无论如何,我认为使用Environment.getExternalStorageDirectory() 是一种更像anroid 的方式。
        • @Srikanth 能否再次分享链接
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        相关资源
        最近更新 更多