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

0voto

digolloco Punkte 101

En el fileName müssen Sie den relativen Pfad zur Datei angeben (ohne /asset ) zum Beispiel:

player.setDataSource(
    getAssets().openFd(**"media/video.mp4"**).getFileDescriptor()
);

0voto

David T. Punkte 20251

Es klingt vielleicht wie Sie das gleiche Problem wie ich haben. statt mit MP4, ist 3GPP möglich? ich glaube, ich verwendet wie HandBrake oder etwas als Video-Konverter... Sie müssen nur sicherstellen, dass Sie den richtigen Encoder, wie H.264x oder etwas haben. sorry für ein wenig vage, es ist eine Weile her. Auch, wenn es möglich ist, machen Sie sich keine Sorgen über Android 2.1 mehr, und auch, einige Dinge einfach nicht in EMULATOR arbeiten. so, wenn es auf eine Menge von Geräten funktioniert, dann einfach davon ausgehen, es funktioniert (vor allem mit verschiedenen Herstellern)

Hier können Sie mein Problem lesen und wie ich es gelöst habe (nach langer Zeit und ohne eine Antwort zu haben): Android Media Player funktioniert nicht

-2voto

Sandeep Punkte 25

HauptCode

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

myVideoView=(VideoView)findViewbyID(R.idV.Video_view);

myVideoView.setVideoURI(raw_uri);
myVideoView.setMediaController(new MediaController(this));
myVideoView.start();
myVideoView.requestFocus();

XML

<?xml version="1.0" encoding="utf-8" ?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <VideoView
            android:id="+@/Video_View"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
        />
</LinearLayout>

0 Stimmen

Das funktioniert überhaupt nicht. Die Uri zeigt im Fall meiner Ressource nur auf /2130968576.

0 Stimmen

Ja... diese Lösung funktioniert nicht. Es ist jedoch in Ordnung, wenn der URI auf 2130968576 verweist, denn das ist die Ressourcen-ID, und das ist ein legaler Weg, um einen verwendbaren URI zu erstellen.

0 Stimmen

Versuchen Sie, Ihren Code zu überprüfen. Vielleicht scheint es bei Ihnen zu funktionieren, @Sandeep. Allerdings reicht das vielleicht nicht aus, um das Problem zu lösen.

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