Wie man Videos in Android von Assets-Ordner oder Roh-Ordner zu spielen?

Ich versuche, ein Video in Android Emulator zu spielen Ich habe das Video in meinem Assets Ordner sowie die rohe Ordner Aber nach etwas Forschung noch ich kann nicht spielen Video in meinem Emulator Ich arbeite an Android 2.1 Mein Video-Format ist mp4 so i Glaube nicht, dass das ein Problem sein sollte Könnte jemand mir nur 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 nehmen wird, um auf das Video zu zeigen.

  • RecyclerView versteckt Actionbar, wenn SoftKeyboard geöffnet ist
  • Erstellen von Video aus Sequenz von Bildern javacv
  • Android Custom ProgressBar nicht drehen
  • AsyncTaskLoader läuft nicht
  • Android: Samsung Galaxy S3 Bildschirmgröße für Layout
  • Max Dateinamen Länge in Android
  • Wenn ich das Video im Roh- oder Assistenten-Ordner speichere, kann ich nur einen Input-Stream oder einen Dateideskriptor bekommen und es scheint nichts davon, um die VideoView zu initialisieren.

    Aktualisieren

    Ich habe das MediaPlayer-Beispiel genauer betrachtet und versucht, einen MediaPlayer mit einem FileDescriptor zu den 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 die folgende Ausnahme:

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

    Es scheint, es gibt keine andere Möglichkeit, dann kopieren die Datei auf die SD-Karte beim Start und das scheint wie eine Verschwendung von Zeit und Erinnerung.

  • Wie kann ich einen meiner Android Apps auf ein anderes Android Developer Account übertragen (nicht mein)
  • Bluetooth-Freisprecheinrichtung
  • StaggeredGridLayoutManager ändern spanCount dynamisch RecylerView
  • Was soll ich mit ImageButton oder Button verwenden?
  • Android Studio: unmappable Zeichen für die Kodierung UTF-8
  • Unterschied zwischen android-support-v7-appcompat und android-support-v4
  • 13 Solutions collect form web for “Wie man Videos in Android von Assets-Ordner oder Roh-Ordner zu spielen?”

    ## Perfekt arbeiten 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(); 

    ## Komplettes Tutorial überprüfen ##

    Versuchen:

     AssetFileDescriptor afd = getAssets().openFd(fileName); player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength()); 
     String UrlPath="android.resource://"+getPackageName()+"/"+R.raw.ur file name; videocontainer.setVideoURI(Uri.parse(UrlPath)); videocontainer.start(); 

    Wo Videocontainer vom Typ videoview.

    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> 

    Wenn ich mich gut erinnere, hatte ich die gleiche Art von Problem beim Laden von Sachen aus dem Asset-Ordner, aber mit einer Datenbank. Es scheint, dass das Zeug in deinem Asset-Ordner 2 Stats haben kann: komprimiert oder nicht.
    Wenn es komprimiert ist, dann sind Sie erlaubt 1 Mo Speicher, um es zu dekomprimieren, sonst erhalten Sie diese Art von Ausnahme. Es gibt mehrere Fehlerberichte darüber, weil die Dokumentation nicht klar ist. Also, wenn du noch dein Format verwenden willst, musst du entweder eine unkomprimierte Version verwenden oder eine Erweiterung wie .mp3 oder .png zu deiner Datei geben. Ich weiß, es ist ein bisschen verrückt, aber ich lade eine Datenbank mit einer .mp3-Erweiterung und es funktioniert einwandfrei. Diese andere Lösung besteht darin, Ihre Anwendung mit einer speziellen Option zu verpacken, um zu sagen, dass sie keine gewisse Erweiterung komprimiert. Aber dann musst du deine App manuell erstellen und "zip -0" hinzufügen.
    Der Vorteil eines unkomprimierten Assest ist, dass die Phase der Zip-align vor der Veröffentlichung einer Applikation die Daten korrekt ausrichtet, so dass sie, wenn sie in den Speicher geladen werden, direkt abgebildet werden kann.

    Also, Lösungen:

    • Ändern Sie die Erweiterung der Datei auf .mp3 oder .png und sehen, ob es funktioniert
    • Erstellen Sie Ihre App manuell und verwenden Sie die Option zip-0

    Haben Sie versucht, manuell Video auf SDCard zu setzen und versuchen, Videospeicher auf SDCard zu spielen?

    Wenn es funktioniert, können Sie den Weg finden, von Raw auf SDcard hier zu kopieren:

    Android-copy-rawfile-to-sdcard-video-mp4

    Ich habe es gefunden :

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

    Personnaly Android gefunden die Ressource, kann aber nicht spielen für jetzt. Meine Datei ist ein .m4v

    Ich denke, das musst du das anschauen – es sollte alles haben, was du willst.

    EDIT: Wenn du nicht auf den Link schauen willst, das summiert das, was du möchtest.

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

    Aber ich empfehle noch das Lesen der Informationen am Link.

     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

    Es klingt vielleicht, wie Sie das gleiche Problem haben wie ich. Anstatt MP4 zu verwenden, ist 3GPP möglich? Ich glaube, ich habe wie HandBrake oder so etwas wie der Video-Konverter … Sie müssen nur sicherstellen, dass Sie den richtigen Encoder haben, wie H.264x oder so etwas. Sorry für ein wenig vage, es ist schon eine Weile her. Auch wenn es möglich ist, nicht stören Sorgen um Android 2.1 mehr, und auch, etwas Dinge, die nur nicht in EMULATOR ARBEITEN. Also wenn es auf vielen Geräten funktioniert, dann nehme es einfach an (vor allem bei verschiedenen Herstellern)

    Hier kannst du mein Problem lesen und wie ich das Problem gelöst habe (nach langer Zeit und niemand hatte eine Antwort). Ich habe hier viel ausführlicher erklärt: Android Media Player funktioniert nicht

    In der fileName müssen Sie den relativen Pfad zur Datei (ohne /asset ) zum Beispiel setzen:

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

    A- Verwenden Sie die MediaPlayer API und den Beispielcode.

    B- lege die Mediendatei in den Rohordner

    C- bekomme den file descriptor an die Datei

    D- mediaplayer.setDataSource(fd,offset,length); – es ist ein drei Argument Konstruktor

    E- dann wenn onPreared , onPreared mediaplayer.start();

    MainCode

     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> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.