2015-02-21 5 views
10

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

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

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

+0

Какая ошибка? У вас есть ссылка? – Marcus

+1

https://www.google.com/#newwindow=1&q=android+media+player+getcurrentposition+bug –

ответ

9

Демо-приложение 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); 
+0

Хороший ответ, спасибо! В любом случае, я думаю, что использование 'Environment.getExternalStorageDirectory()' более похоже на андроид. – thomasb

+0

@Srikanth может снова отправить ссылку на PLS – Erum

5

Незначительная модификация с кодом Srikanth Peddibhotla работает

Строка Uri для файла должен быть "файл: ///mnt/sdcard/YourFilename.mp4" вместо «/ шоссе/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); 
0

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() {} 

} 
1

Использование 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-записей. Последняя категория не имеет запятой после нее.)

На рисунке ниже показано экран Chooser активности после того, как вы нажмете на Children's Songs:

ExoPlayer Chooser Activity

Нажмите Mary Had a Little Lamb или Itsy Bitsy Spider и mp3 пьесы.

Смежные вопросы