ExoPlayer - как воспроизвести локальный mp3 файл

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

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

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


person Lyubov Alekseeva    schedule 21.02.2015    source источник
comment
Что это за ошибка? У вас есть ссылка?   -  person Marcus    schedule 21.02.2015
comment
google.com/   -  person Lyubov Alekseeva    schedule 22.02.2015


Ответы (4)


Демонстрационное приложение 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);
person Srikanth Peddibhotla    schedule 21.04.2015
comment
Хороший ответ, спасибо! В любом случае, я думаю, что использование Environment.getExternalStorageDirectory() более похоже на андроид. - person thomasb; 02.12.2016
comment
@Srikanth, можешь еще раз поделиться ссылкой - person Erum; 08.06.2017

Небольшая модификация с кодом Шриканта Педдибхотлы работает.

Строка 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);
person SarC    schedule 13.05.2015

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

  1. Поместите файлы mp3 в папку demo/assetsmedia.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 Songs, Jazz Songs и т. д. с большим количеством записей в формате mp3. После последней категории запятая не ставится.)

На рисунке ниже показан экран активности выбора после нажатия на Children's Songs:

Действие выбора ExoPlayer

Нажмите Mary Had a Little Lamb или Itsy Bitsy Spider, и заиграет mp3.

person user1147171    schedule 24.12.2016

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

 }
person lucky1928    schedule 01.02.2016