2013-10-09 23 views
1

我嘗試使用MediaMetadataRetriever類來獲得從視頻縮略圖得到幀:不從視頻的Android 3.2.1使用MediaMetadataRetriever

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
     try { 
      retriever.setDataSource("/mnt/sdcard/test.ts"); 

      Bitmap thumbnail = retriever.getFrameAtTime(); 
      ivThumbnail.setImageBitmap(thumbnail); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

但我得到在我的日誌:

E/MediaMetadataRetrieverJNI﹕ getFrameAtTime: videoFrame is a NULL pointer 

但文檔(http://developer.android.com/guide/appendix/media-formats.html)表示,此格式支持Android 3.0+

現在,此代碼適用於.mp4文件。有什麼建議麼?

回答

2

這可能有助於
獲得視頻URI,並調用此方法..

public void setVideoThumbnail(Uri uri) { 
    String[] projection = { BaseColumns._ID, MediaColumns.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    cursor.moveToFirst(); 
    int columnIndex = cursor.getColumnIndexOrThrow(BaseColumns._ID); 
    int id = cursor.getInt(columnIndex); 

    ContentResolver crThumb = getContentResolver(); 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 1; 
    Bitmap thumbnail= MediaStore.Video.Thumbnails.getThumbnail(crThumb, id, 
      MediaStore.Video.Thumbnails.MICRO_KIND, options); 
    ivThumbnail.setScaleType(ScaleType.CENTER_CROP); 
    ivThumbnail.setImageBitmap(thumbnail); 
} 
+0

它與空指針墜毀。 – Sinigami

+0

你從哪裏得到空指針? – Rahul

+0

當獲取遊標時,cusror == null – Sinigami

1

嘗試this external library提取視頻的幀。它適用於API 7,並且不會比MediaMetadataRetriever類失敗多次。它應該是很容易的添加到您的項目......有用

+0

謝謝你的回答!今天我會嘗試一下,然後我會通知你。 – Sinigami

+0

我試過這個庫,但沒有結果。可能是這個庫不支持.ts格式 – Sinigami

+0

我的代碼:FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever(); mmr.setDataSource( 「/ MNT/SD卡/ testts.ts」); ((ImageView的)findViewById(R.id.iv))setImageBitmap(mmr.getFrameAtTime()); MMR。發佈(); – Sinigami

0

希望it's我有同樣的錯誤。

檢查您是否可以通過ExtractMetadata從視頻中提取元數據信息。如果不是,則可能是setDataSource()呼叫有問題,或者視頻格式錯誤/編解碼器錯誤。

此代碼適用於我。

AssetFileDescriptor afd=getAssets().openFd("t.mp4"); 
mediaMetadataRetriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 

我不得不提供afd.getStartOffset()afd.getLength()

也許它可以幫助你在正確的軌道上。

相關問題