2017-02-16 8 views
0

Ich habe das Beispiel mp4 Video in Android internen Speicher in einer Datei gespeichert, aber wenn versuchen, von Datei und Wiedergabe in Android VideoView durch Parsing Dateipfad als eine URI zu lesen, kann bekommen ' t spiele diesen Videofehler. Ich habe viele Links überprüft aber keine Verwendung, wie implementiere ich das?Android - Speichern Video internen Speicher und Wiedergabe

final String mFileName = "sample.mp4"; 
try{ 
     FileOutputStream mFileOutputStream = openFileOutput(mFileName, Context.MODE_PRIVATE); 
     mFileOutputStream.write(getResources().getAssets().open("sample_video.mp4").read()); 
     mFileOutputStream.close(); 
     Log.v(TAG, "Success"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    MediaController mediaController = new MediaController(this); 
    mediaController.setAnchorView(mVideoView); 
    mVideoView.setMediaController(mediaController); 
    mVideoView.setVideoPath(getFilesDir().getAbsolutePath()+"/sample.mp4"); 
    mVideoView.start(); 

Antwort

0

Einfach kann nicht. VideoView intern verwendet MediaPlayer, die explizit (App-Verzeichnisse sind nicht). Die einzige Möglichkeit, diese Einschränkung zu umgehen, besteht laut docs darin, einen Dateideskriptor anstelle des Dateipfads zu übergeben.

Leider VideoView hat bisher keine Methode, wie setDataSource(FileDescriptor), so haben Sie zwei Möglichkeiten:

  1. Zugang der VideoView ‚s MediaPlayerthrough reflection und setDataSource(FileDescriptor) auf es nennen. Nicht sicher, ob dies eine machbare Lösung ist, weil der interne Media Player instanziiert wird, wenn Sie VideoView.setVideoPath anrufen, aber Sie sollten es nicht anrufen ... kurz, bewerten Sie es, aber es kann eine Sackgasse sein.
  2. Verwenden Sie eine MediaPlayer, set a surface holder, auf denen das Video abspielen und eine FileDescriptor direkt an die MediaPlayer übergeben (imo diese zweite Lösung ist sauberer).
+0

Ist es möglich, mit Inhaltsanbieter ..? –

+0

Es sollte möglich sein, indem Sie den Inhalt URI ('VideoView.setVideoURI()') übergeben. Übergeben Sie einfach kein URI wie 'file: //', wenn dies der Fall ist, ruft der interne 'MediaPlayer' einfach 'setDataSource (String filepath)' auf. – Massimo

+0

können Sie mehr, Wie lege ich Dateipfad in ContentProvider und wie überlasse ich uri für videoview –

Verwandte Themen