我必须在Android的某个屏幕上播放视频,而我正在使用Video View意图。视频播放但屏幕启动时没有缩略图。
我的代码就像这样
@OnClick(R.id.icon_play)
protected void playVideo(){
String videoUrl="https://someUrl/Video/v07.mp4";
if(!videoUrl.isEmpty()) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(videoUrl));
intent.setDataAndType(Uri.parse(videoUrl), "video/mp4");
startActivity(intent);
}
}
通过缩略图,我的意思是当屏幕启动时,每个视频都应该有自己的图像。 (像YouTube一样)
我尝试seekTo()
附加缩略图,但它没有用。
请帮忙。感谢。
答案 0 :(得分:2)
我使用MediaMetaDataRetriever
解决了这个问题。
代码就是这样 -
public static Bitmap retriveVideoFrameFromVideo(String videoPath)
throws Throwable
{
Bitmap bitmap = null;
MediaMetadataRetriever mediaMetadataRetriever = null;
try
{
mediaMetadataRetriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
else
mediaMetadataRetriever.setDataSource(videoPath);
// mediaMetadataRetriever.setDataSource(videoPath);
bitmap = mediaMetadataRetriever.getFrameAtTime(-1,MediaMetadataRetriever.OPTION_CLOSEST);
}
catch (Exception e)
{
e.printStackTrace();
throw new Throwable(
"Exception in retriveVideoFrameFromVideo(String videoPath)"
+ e.getMessage());
}
finally
{
if (mediaMetadataRetriever != null)
{
mediaMetadataRetriever.release();
}
}
return bitmap;
}
请注意:由于我的视频链接采用服务器网址的形式,因此当视频网址通过时,createThumnailUtils会返回null。
当视频来自本地存储时,以下代码可以正常工作。
Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail("URL", MediaStore.Images.Thumbnails.MINI_KIND);
BitmapDrawable bitmapD = new BitmapDrawable(thumbnail);
VideoView.setBackground(Drawable bitmapD);
希望这有助于某人!!
答案 1 :(得分:0)
刚看了另一个例子。不是100%确定它是否会起作用但值得一试。
Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail("URL", MediaStore.Images.Thumbnails.MINI_KIND);
BitmapDrawable bitmapD = new BitmapDrawable(thumbnail);
VideoView.setBackground(Drawable bitmapD);
请注意,我已经通过电话写了这个,因此可能存在拼写错误。 让我知道这是否有效或者您是否找到了另一种选择
答案 2 :(得分:-1)
这可以用于我在视频播放器列表视图中使用此方法制作视频缩略图...
Cursor cursor = mContext.getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj,
MediaStore.Video.Media.DISPLAY_NAME + "=?",
new String[]{localItem._display_name}, null);
cursor.moveToFirst();
long ids = cursor.getLong(cursor
.getColumnIndex(MediaStore.Video.Media._ID));
ContentResolver crThumb = mContext.getContentResolver();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(
crThumb, ids, MediaStore.Video.Thumbnails.MICRO_KIND,
options);
itemHolder.thumbImage.setImageBitmap(curThumb);
curThumb = null;
cursor.close();
尝试这种方式可能会有所帮助
上面的ans现已弃用。 快速解决方案的新更新答案 我们只需要提供视频数据路径
Bitmap bmThumbnail;
bmThumbnail = ThumbnailUtils.createVideoThumbnail(arraylist.get(i)._data, MediaStore.Video.Thumbnails.MICRO_KIND);
itemHolder.thumbImage.setImageBitmap(bmThumbnail);
其中arraylist.get(i)._ data =&gt;视频路径。
最好的方法是使用Glide或任何其他图片提供异步库来平滑滚动列表视图。