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
:
Нажмите 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() {}
}