ExoPlayer - как играть в локальный mp3 файл

Я пытаюсь использовать ExoPlayer вместо MediaPlayer, потому что это общая ошибка, которую MediaPlayer возвращает неверный getCurrentPosition(), и мне нужна замена.

Но я не могу найти информацию в любом месте, как открыть локальный файл через путь к файлу, такой же, как MediaPlayer .setDataSource(String filepath)

В Google нет никакого примера, и сайт официальной документации странно разбивает мой браузер FireFox на обоих компьютерах

Ответы

Ответ 1

Демо-приложение ExoPlayer в github может быть изменено для воспроизведения локальных файлов. Для этого отредактируйте файл 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);

Ответ 2

Незначительная модификация с помощью кода Шрикант Педдиботла работает

Строка Uri для файла должна быть "file:///mnt/sdcard/YourFilename.mp4" вместо "/mnt/sdcard/YourFilename.mp4" в Samples.java

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);

Ответ 3

Используя ExoPlayer 2.1 и начиная с проекта demo, вы можете воспроизводить mp3 файлы из папки assets без изменения кода Java, просто добавив файлы MP3 в папку assets и создав или изменив json. Начиная с проекта ExoPlayer demo:

  • Поместите файлы MP3 в папку demo/assets (с помощью media.exolist.json).

  • Либо измените media.exolist.json, либо создайте новый файл, например my.exolist.json, содержащий одну или несколько записей, отформатированных следующим образом:

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

(Конечная запятая предполагает, что будет следующая категория, например Blues Songs, Jazz Songs и т.д. с большим количеством mp3-записей. Последняя категория не имеет запятой после нее.)

На следующем рисунке показан экран активности выбора после нажатия Children Songs:

Операция выбора ExoPlayer

Нажмите Mary Had a Little Lamb или Itsy Bitsy Spider и воспроизведите mp3.

Ответ 4

В наши дни 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() {}

 }