wake-up-neo.com

Wie kann ich Videos in Android aus dem Assets-Ordner oder Raw-Ordner abspielen?

Ich versuche, ein Video in Android Emulator) abzuspielen. Ich habe das Video in meinem Assets-Ordner sowie im Raw-Ordner. Aber nach einigen Recherchen kann ich das Video in meinem Emulator nicht abspielen. Ich arbeite daran Android 2.1 Mein Videoformat ist mp4, also denke ich nicht, dass das ein Problem sein sollte. Kann mir jemand einen Beispielcode geben, damit ich ein bisschen mehr verstehe?

Das Problem ist, dass die VideoView, die ich zum Anzeigen des Videos benötige, nur einen URI oder einen Dateipfad benötigt, um auf das Video zu verweisen.

Wenn ich das Video im Raw- oder Assets-Ordner speichere, kann ich nur einen Eingabestream oder einen Dateideskriptor abrufen und es scheint, dass nichts davon zum Initialisieren von VideoView verwendet werden kann.

pdate

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

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 bekomme ich folgende Ausnahme:

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

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

67
Abhishek Talwar

## Perfekt funktioniert seit Android 1.6 ##

getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = Uri.parse("Android.resource://" + getPackageName() + "/" 
+ R.raw.your_raw_file); //do not add any extension
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
videoHolder.setVideoURI(video);
setContentView(videoHolder);
videoHolder.start();

## Vollständiges Tutorial prüfen ##

114
Sherif elKhatib
String UrlPath="Android.resource://"+getPackageName()+"/"+R.raw.ur file name;
videocontainer.setVideoURI(Uri.parse(UrlPath));
videocontainer.start();

wo videocontainer vom typ videoview.

11
Bishoy Fakhry

Versuchen:

AssetFileDescriptor afd = getAssets().openFd(fileName);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
10
Jay

PlayVideoActivity.Java:

public class PlayVideoActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play_video);

        VideoView videoView = (VideoView) findViewById(R.id.video_view);
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(Uri.parse("Android.resource://" + getPackageName() + "/" + R.raw.documentariesandyou));
        videoView.start();
    }
}

activity_play_video.xml:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center" >

    <VideoView
        Android:id="@+id/video_view"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" >
    </VideoView>

</LinearLayout>
8
haotang

Wenn ich mich recht erinnere, hatte ich das gleiche Problem beim Laden von Inhalten aus dem Asset-Ordner, aber mit einer Datenbank. Es scheint, dass das Zeug in Ihrem Asset-Ordner 2 Statistiken haben kann: komprimiert oder nicht.
Wenn es komprimiert ist, können Sie es mit 1 MB Speicher dekomprimieren, andernfalls erhalten Sie diese Art von Ausnahme. Es gibt mehrere Fehlerberichte darüber, weil die Dokumentation nicht klar ist. Wenn Sie Ihr Format dennoch verwenden möchten, müssen Sie entweder eine unkomprimierte Version verwenden oder Ihrer Datei eine Erweiterung wie .mp3 oder .png zuweisen. Ich weiß, es ist ein bisschen verrückt, aber ich lade eine Datenbank mit der Erweiterung .mp3 und es funktioniert einwandfrei. Diese andere Lösung besteht darin, Ihre Anwendung mit einer speziellen Option zu verpacken, die sie anweist, bestimmte Erweiterungen nicht zu komprimieren. Aber dann müssen Sie Ihre App manuell erstellen und die Option "Zip -0" hinzufügen.
Der Vorteil eines nicht komprimierten Assests besteht darin, dass die Phase der Zip-Ausrichtung vor der Veröffentlichung einer Anwendung die Daten korrekt ausrichtet, sodass sie beim Laden in den Speicher direkt zugeordnet werden können.

Also, Lösungen:

  • ändern Sie die Erweiterung der Datei in .mp3 oder .png und prüfen Sie, ob sie funktioniert
  • erstellen Sie Ihre App manuell und verwenden Sie die Option Zip-0
4
Sephy

Haben Sie versucht, Video manuell auf SDCard zu kopieren und Video auf SDCard abzuspielen?

Wenn es funktioniert, finden Sie hier den Weg, um von Raw auf SD-Karte zu kopieren:

Android-Kopie-rawfile-to-SD-Karte-Video-mp4 .

3
NicoMinsk
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

2
Jordan Réjaud

Ich habe es gefunden :

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

Personnaly Android hat die Ressource gefunden, kann sie jedoch vorerst nicht wiedergeben. Meine Datei ist eine .m4v-Datei

2
Nabil Gardon

Ich denke, dass Sie sich dies ansehen müssen - es sollte alles haben, was Sie wollen.

BEARBEITEN: Wenn Sie nicht auf den Link schauen möchten - das fasst ziemlich genau zusammen, was Sie möchten.

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

Trotzdem empfehle ich, die Informationen unter dem Link zu lesen.

1
hwrdprkns

Im fileName müssen Sie den relativen Pfad zur Datei angeben (ohne /asset) beispielsweise:

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

Es hört sich vielleicht so an, als hättest du dasselbe Problem wie ich. Ist 3GPP anstelle von MP4 möglich? Ich glaube, ich habe wie HandBrake oder so etwas als Videokonverter verwendet ... Sie müssen nur sicherstellen, dass Sie den richtigen Encoder haben, wie H.264x oder so. Es tut mir leid, dass ich ein bisschen vage bin. Es ist eine Weile her. Außerdem, wenn es möglich ist, mach dir keine Sorgen mehr um Android 2.1, und außerdem, etwas, das in Emulator nicht funktioniert. Wenn es auf vielen Geräten funktioniert, dann gehe einfach davon aus es funktioniert (vor allem mit verschiedenen Herstellern)

hier können Sie mein Problem lesen und nachlesen, wie ich das Problem gelöst habe (nach einer langen Zeit hatte niemand eine Antwort). Ich habe es hier ausführlicher erklärt: Android Media Player funktioniert nicht

0
David T.
  1. Verwenden Sie die API MediaPlayer und den Beispielcode.

  2. Legen Sie die Mediendatei in den Ordner raw.

  3. Holen Sie sich den file descriptor In die Datei.

  4. mediaplayer.setDataSource(fd,offset,length); - Ein Konstruktor mit drei Argumenten.

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

0
Khajan