2013-09-27 120 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; 
} 
相关问题