ExoPlayer - 在SD卡中播放本地mp4文件

2022-09-02 11:46:32

我正在使用Exoplayer Demo应用程序,并希望从SD卡预加载MP4视频。我已经从这篇文章中尝试了实现,但它不起作用。在我的exoplayer Demo中没有这样的类.java DemoUtil。改为:

public static final Sample[] LOCAL_VIDEOS = new Sample[] {
new Sample("Some User friendly name of video 1",
"/mnt/sdcard/video1.mp4", Util.TYPE_OTHER),
};

我也不能使用他们在SampleChooserActivity中提到的代码片段.java。(一直给我错误)

我改用了:

group = new SampleGroup("Local Videos");
group.addAll(Samples.LOCAL_VIDEOS);
sampleGroups.add(group);

我做错了什么?每个设备的文件路径是否都已更改?


答案 1

还没有尝试过演示应用程序,但我已经设法创建了自己的播放本地音频文件的示例,并将其发布在此处:https://github.com/nzkozar/ExoplayerExample

以下是从文件Uri准备播放器的所有工作的主要部分:

private void prepareExoPlayerFromFileUri(Uri uri){
        exoPlayer = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector(null), new DefaultLoadControl());
        exoPlayer.addListener(eventListener);

        DataSpec dataSpec = new DataSpec(uri);
        final FileDataSource fileDataSource = new FileDataSource();
        try {
            fileDataSource.open(dataSpec);
        } catch (FileDataSource.FileDataSourceException e) {
            e.printStackTrace();
        }

        DataSource.Factory factory = new DataSource.Factory() {
            @Override
            public DataSource createDataSource() {
                return fileDataSource;
            }
        };
        MediaSource audioSource = new ExtractorMediaSource(fileDataSource.getUri(),
                factory, new DefaultExtractorsFactory(), null, null);

        exoPlayer.prepare(audioSource);
    }

您可以像这样获取 Uri:Uri.fromFile(file)

如上所示准备好要播放的文件后,只需调用即可开始播放。exoPlayer.setPlayWhenReady(true);

对于视频文件,您可能只需要将表面视图附加到exoPlayer对象上,但我还没有真正使用ExoPlayer2执行此操作。


答案 2

对于那些想要使用ExoPlayer 2从资产中播放视频的人来说,这里有一种方法:

String playerInfo = Util.getUserAgent(context, "ExoPlayerInfo");
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(
        context, playerInfo
);
MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory)
    .setExtractorsFactory(new DefaultExtractorsFactory())
    .createMediaSource(Uri.parse("asset:///your_video.mov"));
player.prepare(mediaSource);

推荐