72 Stimmen

Wie spielt man Videos in Android aus dem Ordner "Assets" oder "Raw" ab?

Ich versuche, ein Video im Android-Emulator abzuspielen Ich habe das Video sowohl in meinem Assets-Ordner als auch im Raw-Ordner. Aber nachdem ich einige Nachforschungen angestellt habe, kann ich das Video immer noch nicht in meinem Emulator abspielen Ich arbeite mit Android 2.1 Mein Videoformat ist mp4, also denke ich nicht, dass das ein Problem sein sollte Könnte mir jemand einen Beispielcode geben, damit ich ein bisschen mehr verstehen kann?

Das Problem ist, dass die VideoView, die ich brauche, um das Video anzuzeigen, nur einen URI oder einen Dateipfad zum Verweis auf das Video akzeptiert.

Wenn ich das Video im Raw- oder Assets-Ordner speichere, kann ich nur einen Input-Stream oder einen Dateideskriptor erhalten und es scheint, dass nichts davon zur Initialisierung der VideoView verwendet werden kann.

Update

Ich habe mir das MediaPlayer-Beispiel genauer angesehen und versucht, einen MediaPlayer mit einem FileDescriptor zu den Assets-Dateien zu starten, wie im folgenden Code:

SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);

player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {

   @Override
   public void onPrepared(MediaPlayer mp) {
      mp.start();
   }
});

Jetzt erhalte ich die folgende Ausnahme:

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed

Es scheint keine andere Möglichkeit zu geben, als die Datei beim Start auf die SD-Karte zu kopieren, und das scheint eine Verschwendung von Zeit und Speicher zu sein.

0 Stimmen

Ich denke, das Problem ist, dass mp4 ein komprimiertes Format ist. Prüfen Sie meine Antwort für Details

0 Stimmen

Hier die Erklärung zum 'rohen' Floder stackoverflow.com/questions/11356601/

1 Stimmen

Wir schrieben das Jahr 2020 und obwohl ich Android Studio 3.6 und das Betriebssystem Android 10 benutzte, gab es in der folgenden Videoansicht zwar Ton, aber das Bild war schwarz. Schließlich funktionierten die Codes dieses Freundes und ich kann nicht erklären, wie glücklich ich war. Keiner von denen, die als Lösung unten geschrieben wurden, funktionierte bei mir zum ersten Mal. Zum Glück bin ich froh, dass ich mein Problem endlich gelöst habe. Ich danke Ihnen: D

3voto

NicoMinsk Punkte 1598

Haben Sie versucht, das Video manuell auf die SDCard zu legen und den Videospeicher auf der SDCard abzuspielen?

Wenn es funktioniert, finden Sie hier eine Anleitung zum Kopieren von Raw auf SDcard:

Android-Kopier-Rawfile-zu-Sdcard-Video-mp4 .

2voto

Nabil Gardon Punkte 175

Ich habe es gefunden:

Uri raw_uri = Uri.parse(<package_name>/+R.raw.<video_file_name>);

Android persönlich hat die Ressource gefunden, kann sie aber im Moment nicht spielen. Meine Datei ist eine .m4v

2voto

Jordan Réjaud Punkte 435
VideoView myVideo = (VideoView) rootView.findViewById(R.id.definition_video_view);

//Set video name (no extension)
String myVideoName = "my_video";

//Set app package
String myAppPackage = "com.myapp";

//Get video URI from raw directory
Uri myVideoUri = Uri.parse("android.resource://"+myAppPackage+"/raw/"+myVideoName);

//Set the video URI
myVideo.setVideoURI(myVideoUri);

//Play the video
myVideo.start();

https://gist.github.com/jrejaud/b5eb1b013c27a1f3ae5f

0 Stimmen

Ich habe es versucht, aber bei Jelly Beans funktioniert es nicht. Ich weiß nicht, ob es nur an meinem Telefon liegt. Aber es funktioniert auf neueren Geräten.

1voto

hwrdprkns Punkte 7475

Ich denke, dass Sie sich Folgendes ansehen sollten diese -- es sollte alles haben, was Sie wollen.

EDIT: Wenn Sie sich den Link nicht ansehen wollen - das hier fasst ziemlich genau zusammen, was Sie wollen.

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); mp.start();

Ich empfehle aber trotzdem, die Informationen unter dem Link zu lesen.

0 Stimmen

Hey, danke Kumpel, aber ich habe auf dieser Seite für wie Millionen Mal angesehen und haben diese Zeile des Codes verwendet. Es tut spielen Audio-Dateien, aber nicht das Video und ich denke, es ist etwas mit videoview und Vermögenswerte oder Roh-Ordner verwandt. Wenn Sie eine Idee in Ihrem Kopf haben, bitte zögern Sie nicht, zu teilen oder ein Stück Code.

0 Stimmen

Wenn ich MediaPlayer.create(contect, R.raw.video) aufrufe, erhalte ich innerhalb der MediaPlayer-Klasse die gleiche Ausnahme, als wenn ich den Mediaplayer selbst mit einem Dateideskriptor vorbereite.

0voto

Khajan Punkte 11
  1. Verwenden Sie die MediaPlayer API und den Beispielcode.

  2. Legen Sie die Mediendatei in raw Ordner.

  3. Holen Sie sich die file descriptor zur Datei.

  4. mediaplayer.setDataSource(fd,offset,length); - Es ist eine Drei Argument-Konstruktor.

  5. Wenn dann onPreared , mediaplayer.start();

0 Stimmen

Ok thnx ich werde dies versuchen, aber können Sie mir bitte mit einigen Beispielcode, die sehr hilfreich sein würde. wieder danke

0 Stimmen

Funktioniert nicht, sehen Sie sich die Frage an, um eine Erklärung zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X