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

Mee*_*and 13 java android android-sdcard exoplayer

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

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

我也无法使用他们为SampleChooserActivity.java提到的代码片段.(保持给我错误)

我改为使用:

group = new SampleGroup("Local Videos");
group.addAll(Samples.LOCAL_VIDEOS);
sampleGroups.add(group);
Run Code Online (Sandbox Code Playgroud)

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

ak9*_*k93 22

没有尝试过演示应用程序,但我设法创建了自己的播放本地音频文件的示例,并在此处发布: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);
    }
Run Code Online (Sandbox Code Playgroud)

你可以像这样得到Uri: Uri.fromFile(file)

如上所示准备好文件进行播放后,只需要拨打电话exoPlayer.setPlayWhenReady(true);即可开始播放.

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

  • 所有这些代码只是为了将文件路径传递给 ExoPlayer,这对于 VideoView 来说可以用一行代码来完成吗?我的天,ExoPlayer的设计者一定是疯了或者是虐待狂。AS 还表示“ExtractorMediaSource”已被弃用(SDK 29)。 (4认同)

Sas*_*ota 10

对于那些想要使用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);
Run Code Online (Sandbox Code Playgroud)


Aas*_*tha 5

这对我有用。尝试以下步骤:

获取文件路径并启动播放器

File myFile = new File(extStore.getAbsolutePath() + "/folder/videos/" + video_name);  
videoUrl= String.valueOf(Uri.fromFile(myFile));  
initializePlayer(videoUrl);
Run Code Online (Sandbox Code Playgroud)

初始化播放器

private void initializePlayer(String videoUrl) {
    player = ExoPlayerFactory.newSimpleInstance(
            new DefaultRenderersFactory(getActivity()),
            new DefaultTrackSelector(), new DefaultLoadControl());

    playerView.setPlayer(player);

    player.setPlayWhenReady(playWhenReady);
    player.seekTo(currentWindow, playbackPosition);

    Uri uri = Uri.parse(videoUrl);
    MediaSource mediaSource = buildMediaSource(uri);
    player.prepare(mediaSource, resetPositionBoolean, false);
}   
Run Code Online (Sandbox Code Playgroud)

构建媒体源

  private MediaSource buildMediaSource(Uri uri) {
    return new ExtractorMediaSource.Factory(
            new DefaultDataSourceFactory(getActivity(),"Exoplayer-local")).
            createMediaSource(uri);
}
Run Code Online (Sandbox Code Playgroud)


小智 0

在某些设备中,您可以直接使用此路径“/sdcard/nameofile.mp4”。