web-dev-qa-db-fra.com

ExoPlayer - lire le fichier mp4 local sur la carte SD

J'utilise l'application Exoplayer Demo et je souhaite précharger une vidéo MP4 depuis une carte SD. J'ai essayé l'implémentation de cet article , mais cela ne fonctionne pas. Il n'y a pas une telle classe appelée DemoUtil.Java dans ma démo d'exoplayer. Au lieu de cela utilisé:

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

Je ne pouvais pas non plus utiliser l'extrait de code mentionné pour SampleChooserActivity.Java. (J'ai continué à me donner des erreurs)

J'ai plutôt utilisé:

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

Qu'est-ce que je fais mal? Le chemin du fichier change-t-il pour chaque appareil?

14
Meera Anand

Je n'ai pas essayé l'application de démonstration, mais j'ai réussi à créer mon propre exemple de lecture de fichiers audio locaux et je l'ai posté ici: https://github.com/nzkozar/ExoplayerExample

Voici la partie principale qui fait tout le travail de préparation du lecteur à partir d'un fichier 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);
    }

Vous pouvez obtenir l'URI comme ceci: Uri.fromFile(file)

Après avoir préparé votre fichier pour la lecture comme indiqué ci-dessus, il vous suffit d'appeler exoPlayer.setPlayWhenReady(true); pour démarrer la lecture.

Pour un fichier vidéo, vous n'auriez probablement besoin que d'attacher une vue de surface à votre objet exoPlayer, mais je ne l'ai pas encore vraiment fait avec ExoPlayer2.

22
ak93

Pour ceux qui veulent lire une vidéo à partir de ressources en utilisant ExoPlayer 2 voici le chemin:

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);
5
Sasha Shpota

Cela a fonctionné pour moi. Essayez ces étapes:

Obtenez le chemin du fichier et démarrez le lecteur

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

Initialisation du lecteur

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);
}   

Création d'une source multimédia

  private MediaSource buildMediaSource(Uri uri) {
    return new ExtractorMediaSource.Factory(
            new DefaultDataSourceFactory(getActivity(),"Exoplayer-local")).
            createMediaSource(uri);
}
2
Aashis Shrestha

Pour ceux qui cherchent à charger depuis le dossier des ressources:

assets/xyz.mp4

cela fonctionne en chargeant le fichier avec:

"fichier: /Android_asset/xyz.mp4"

et en utilisant DefaultDataSourceFactory. Vérifié sur exoplayer 2.4.4.

1
petrumo

La lecture vidéo à partir de la carte SD a fonctionné avec le code suivant. Mon fichier de test se trouve dans le répertoire Videos de sdcard.

public static final Sample[] LOCAL_VIDEOS = new Sample[] {
        new Sample("test",
            Environment.getExternalStorageDirectory()+"/Videos/test.mp4", Util.TYPE_OTHER),
};
0
Christo

Dans certains appareils, vous pouvez directement utiliser ce chemin "/sdcard/nameoffile.mp4".

0
Srikanth Peddibhotla