Das Erstellen von Thumbnails aus der Videodatei gibt Null-Bitmap zurück

Ich schicke eine Absicht, die Videokamera zu starten

PackageManager pm = getPackageManager(); if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)){ Intent video = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); File tempDir= new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "BCA"); if(!tempDir.exists()) { if(!tempDir.mkdir()){ Toast.makeText(this, "Please check SD card! Image shot is impossible!", Toast.LENGTH_SHORT).show(); } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",Locale.US).format(new Date()); File mediaFile = new File(tempDir.getPath() + File.separator + "VIDEO_"+ timeStamp + ".mp4"); Uri videoUri = Uri.fromFile(mediaFile); video.putExtra(MediaStore.EXTRA_OUTPUT, videoUri); video.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(video, VIDEO_REQUEST); }else{ Toast.makeText(this, "This device does not have a rear facing camera",Toast.LENGTH_SHORT).show(); } 

Ich nehme ein Video und es wird richtig gespeichert, wenn das onActivityResult gefeuert wird, onActivityResult ich die Absicht, das uri zu bekommen, wo es gespeichert ist, um die Bitmap zu erstellen

  • Vermeiden Sie Speicherverluste auf Android
  • Wie benutzt man SQLiteOpenHelper mit Datenbank auf SD-Karte?
  • Wie kann ich SensorManager.getOrientation für Kippsteuerungen wie "My Paper Plane" verwenden?
  • Universal Image Loader Fade In Von Schwarz?
  • Wählen Sie mehrere Bilder in der Android Gallery aus
  • Cordova Plugin Sperrfaden
  • Dies ist ein Beispiel für die uri- file:///storage/emulated/0/Pictures/BCA/VIDEO_20131227_145043.mp4

      Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(intent.getDataString(), MediaStore.Video.Thumbnails.MICRO_KIND); 

    Aber die Bitmap ist immer null. Also, da die docs sagen, May return null if the video is corrupt or the format is not supported überprüfe ich das Video im Verzeichnis und es spielt gut und seine eine .mp4 Datei, die unterstützt wird, was mache ich hier falsch?

  • Ich habe meine .keystore-Datei verloren?
  • Android OPEN Spinner mit einfachem Klick klicken
  • Gcc ON arm / android
  • Android - Nur lesen Dateisystem IOException
  • Implementieren eines Rich-Text-Editors in Android?
  • ActionBar Logo zentriert und Action Items auf den Seiten
  • 4 Solutions collect form web for “Das Erstellen von Thumbnails aus der Videodatei gibt Null-Bitmap zurück”

    Sie können MediaMetadataRetriever oder FFmpegMediaMetadataRetriever ausprobieren . Hier ist ein Beispiel:

     FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever(); mmr.setDataSource(intent.getDataString()); Bitmap b = mmr.getFrameAtTime(); mmr.release(); 

    Wie ich mich erinnere, sollte Argument filePath von createVideoThumbnail ein klassischer Dateipfad sein, nicht URI .

     ... Uri videoUri = intent.getData(); final String realFilePath = getRealPathFromUri(); Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(realFilePath, MediaStore.Video.Thumbnails.MICRO_KIND); ... public String getRealPathFromURI(final Uri contentURI) { Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); if (cursor == null) { // Source is Dropbox or other similar local file path return contentURI.getPath(); } else { cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaStore.MediaColumns.DATA); if ( idx == -1 ) { return contentURI.getPath(); } String rvalue = cursor.getString(idx); cursor.close(); return rvalue; } } 

    BEARBEITEN:

    Basierend auf dem Quellcode von createVideoThumbnail ich eine weitere Implementierung erstellt:

     public static Bitmap createVideoThumbnail(Context context, Uri uri, int kind) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY); retriever.setDataSource(context, uri); bitmap = retriever.captureFrame(); } catch (IllegalArgumentException ex) { // Assume this is a corrupt video file } catch (RuntimeException ex) { // Assume this is a corrupt video file. } finally { try { retriever.release(); } catch (RuntimeException ex) { // Ignore failures while cleaning up. } } if (kind == Images.Thumbnails.MICRO_KIND && bitmap != null) { bitmap = ThumbnailUtils.extractThumbnail(bitmap, ThumbnailUtils.TARGET_SIZE_MICRO_THUMBNAIL, ThumbnailUtils.TARGET_SIZE_MICRO_THUMBNAIL, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); } return bitmap; } 

    Verwenden Sie diese Datei "mediaFile" und konvertieren sie in URI

      Uri uri=Uri.fromFile(mediaFile); 

    Dann übergeben Sie diesen URI in der unten beschriebenen Methode. Das geht gut an meiner Seite.

     Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(uri.getPath(), MediaStore.Video.Thumbnails.MICRO_KIND); 

    Hoffe das wird dir helfen

    Ich stand vor diesem Problem und löste es so:

    1. Erstellen Sie FileUtils- Klasse, die Pfad der Datei für Sie finden (ich kann nicht finden, Referenz der Klasse, so dass ich ein Gist erstellt)

       String correctedUri = FileUtils.getPath(mContext, Uri.parse(localUri)); 
    2. Verwenden Sie den folgenden Code

       Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(correctedUri, MediaStore.Video.Thumbnails.MICRO_KIND); 

    BEARBEITT: Sehen Sie diese Lösung, es hat eine bessere Leistung und einfacher.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.