2013-09-27 118 views
1

在我的應用程序中,我必須顯示視頻列表,我已經從視頻創建圖像(拇指)並在列表中顯示該圖像。來自視頻url的Thumb在Android 4.0及更高版本上返回null

我補充說,我被用於創建拇指

Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.FULL_SCREEN_KIND); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 

我的問題是代碼,當我運行在低於​​4.0的Android拇指API級別的應用程序被生成,但是當我運行在Android 4.0及以上相同的應用程序ThumbnailUtils.createVideoThumbnail()方法返回null。 請幫我解決這個問題。

從昨天的工作,但仍然沒有得到solution.I嘗試 -

Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MINI_KIND); 
and 
Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MICRO_KIND); 

,但仍返回null。

在此先感謝。

+2

使用MediaStore.Video.Thumbnails.MINI_KIND參數,而FULL_SCREEN_KIND。 MINI_KIND與我一起工作4.0+以上 –

+0

有時候,如果視頻質量不好,它返回空位圖。所以檢查它也 –

+0

先生,我曾嘗試使用高清視頻也同樣的問題。 – Ravi

回答

1

createVideoThumbnail(String filePath, int kind)僅支持MINI_KIND or MICRO_KIND

參見http://developer.android.com/reference/android/media/ThumbnailUtils.html

嘗試其中的一個...... 問候

注:May return null if the video is corrupt or the format is not supported.

+0

謝謝先生的答覆。我已經嘗試了MINI_KIND和MICRO_KIND,但在兩種情況下,它返回null.Is我錯過了什麼? – Ravi

+1

先生,當我點擊列表項目,然後視頻播放正常。所以我不認爲視頻損壞或不支持設備。 – Ravi

+0

並且相同的視頻在其他設備上正常播放並創建拇指。我已經嘗試多次卸載應用程序和清理項目。 – Ravi

0

一些設備無法播放,並不能爲視頻的縮略圖,即放置在內存中。 檢查它,並在創建縮略圖之前將您的視頻移動到SD卡。

+0

你有什麼來源證實了這一點?用戶權限不依賴於SD卡或內存。 –

+0

視頻不在設備上,我只是傳遞存儲在遠程服務器上的視頻文件和文件的路徑。 – Ravi

0

這裏是我的解決方案來解決這個problem-

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, 
       MediaStore.Images.Thumbnails.MINI_KIND); 

希望這將解決您的問題。

+0

再次得到相同的問題 – Prathyusha

+0

這裏是我的代碼http://stackoverflow.com/questions/27164353/thumbnail-returns-null-on-android-above-version-4-0/27164672?noredirect=1#comment42823062_27164672 – Prathyusha

0

如果您的視頻位於外部存儲要求清單 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

0

您可以使用下面的函數從視頻網址獲得一個位圖的權限。

public Bitmap retriveVideoFrameFromVideo(String videoPath){ 
    Bitmap bitmap = null; 

    MediaMetadataRetriever mediaMetadataRetriever = null; 
    try { 
     mediaMetadataRetriever = new MediaMetadataRetriever(); 
     if (Build.VERSION.SDK_INT >= 14) 
      // no headers included 
      mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>()); 
     else 
      mediaMetadataRetriever.setDataSource(videoPath); 
     bitmap = mediaMetadataRetriever.getFrameAtTime(); 
    } catch (Exception e) { 
     e.printStackTrace(); 

    } finally { 
     if (mediaMetadataRetriever != null) 
      mediaMetadataRetriever.release(); 
    } 
    return bitmap; 
} 
相關問題