我正在尝试使用 ExoPlayer 而不是 MediaPlayer,因为 MediaPlayer 返回错误的 getCurrentPosition() 是一个常见错误,我需要一个替代品。
但是我在任何地方都找不到如何通过与 MediaPlayer 相同的文件路径打开本地文件的信息.setDataSource(String filepath)
谷歌没有任何示例,官方文档站点奇怪地在两台计算机上崩溃了我的 FireFox 浏览器
可以修改github中的ExoPlayer demo app来播放本地文件。为此,请编辑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);
对 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);
使用 ExoPlayer 2.1 并从demo
项目开始,您可以播放文件assets
夹中的 mp3 文件,而无需修改任何 Java 代码,只需在assets
文件夹中添加 mp3 文件并创建或修改json
文件即可。从 ExoPlayerdemo
项目开始:
将 mp3 文件放入文件demo/assets
夹中(带有media.exolist.json
)。
修改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
:
单击Mary Had a Little Lamb
或Itsy Bitsy Spider
播放 mp3。
谷歌这些天改变了一些变量名和类定义!以下不同的作品对我有用。
--- 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() {}
}