2017-07-06 6 views
0

Ich verwende FFMPEG auf Android, um die Bitrate usw. von Videos zu ändern, die nicht in meiner App aufgezeichnet wurden.FFMPEG Android Storage Access Framework

Das Problem, das mir gegenübersteht, ist, dass ich den absoluten Pfad für ein Video, das der Benutzer von der SD-Karte auswählt, nicht bekommen kann.

ich den Android Speicherzugriffsrahmen bin mit und zur Zeit die folgenden Uri erhalten: content://com.android.externalstorage.documents/document/9C33-6BBD%3AVideos%2Freaps-driving.mp4

Der FFMPEG Befehl, den ich verwenden:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
        String[] cmd = {"-y", "-i", mVideoUri.toString(), "-c:v", "libx264", "-preset", "ultrafast", "-strict", "-2", "-s", optimalVideoSize, "-aspect", "16:9", "-b", bitrate, String.format("/storage/emulated/0/Movies/InstaVid/VID_INSTAVID%s.mp4", timeStamp)}; 
        executeFFmpegBinary(cmd, timeStamp); 

Es spielt keine Rolle, ob ich mVideoUri.toString() oder mVideoUri.getPath() verwenden .

Gibt es eine Möglichkeit, den absoluten Pfad zu bekommen?

+0

prüfen diese Frage https://stackoverflow.com/questions/34576911/how-to-get-absolute-paths-in-the-removable-sd-card-using-storage-access-framewor –

Antwort

0

Das Problem, das ich mit Blick auf bin ist, dass ich nicht den absoluten Pfad für ein Video wählt der Benutzer von der SD-Karte

Zuerst wird die Speicherzugriffs Framework nicht beschränkt auf Wechselspeicher bekommen . Wenn der Nutzer beispielsweise aus Google Drive etwas auswählt, ist das Video momentan nicht auf dem Gerät. In einem anderen Beispiel hat Google gerade einen Samba-Speicheranbieter veröffentlicht, und wenn der Benutzer diesen verwendet, existiert der Inhalt auf einem Dateiserver irgendwo im LAN, nicht auf dem Gerät.

Zweitens haben Sie keinen Zugriff auf Wechseldatenträger über die Dateisystem-APIs, außer für einige ausgewählte Bereiche (z. B. getExternalFilesDirs()). Der Benutzer kann ein Video außerhalb von dort wählen.

Gibt es eine Möglichkeit, den absoluten Pfad zu bekommen?

Nr Zur Auswahl stehen:

  • Stop, um den Speicherzugriff Framework und stattdessen eine Dateiauswahl-Bibliothek verwenden, die Sie auf Dateien beschränken, die Sie zusammen zu ffmpeg passieren in der Lage, .

  • Verwenden Sie ein ContentResolver und openInputStream() einen InputStream auf den Inhalt der Uri identifiziert zu bekommen, dann ist das eine lokale Kopie des Inhalts in eine Datei erstellen, die Sie steuern. Übergeben Sie dann den Pfad zu dieser lokalen Kopie an ffmpeg. Löschen Sie die lokale Kopie, wenn Sie fertig sind.

Verwandte Themen