我正在寻找能够从Android网址获取详细视频信息(如持续时间,视频缩略图...)的解决方案吗?
答案 0 :(得分:3)
您在StackOverflow上已经回答了2个不同的问题。
要检索视频时长和其他元数据,请参阅this answer。
也许您正在寻找FFmpegMediaMetadataRetriever
FFmpegMediaMetadataRetriever 类为输入媒体文件中的检索框架和元数据提供统一的界面。
使用 METADATA_KEY_DURATION 常量 FFmpegMediaMetadataRetriever 您可以获取视频的持续时间。它会将字符串返回给您,然后您可以将其转换为 很快得到时间。
以下是您应该使用的代码:
FFmpegMediaMetadataRetriever mFFmpegMediaMetadataRetriever = new MediaMetadataRetriever(); mFFmpegMediaMetadataRetriever.setDataSource("Your video url"); String mVideoDuration = mFFmpegMediaMetadataRetriever .extractMetadata(FFmpegMediaMetadataRetriever .METADATA_KEY_DURATION); long mTimeInMilliseconds= Long.parseLong(mVideoDuration);
如果仍然无效,请使用
MediaMetadataRetriever retriever = new MediaMetadataRetriever(); if (Build.VERSION.SDK_INT >= 14) retriever.setDataSource("Your video url", new HashMap<String, String>()); else retriever.setDataSource("Your video url");
要下载缩略图,请参阅this answer。
无需下载视频,您可以从以下代码生成缩略图:
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(); } catch (Exception e) { e.printStackTrace(); throw new Throwable("Exception in retriveVideoFrameFromVideo(String videoPath)" + e.getMessage()); } finally { if (mediaMetadataRetriever != null) { mediaMetadataRetriever.release(); } } return bitmap; }
这两个答案都适用于Android,不需要下载整个视频。
答案 1 :(得分:0)
尝试此操作以从网址获取视频缩略图
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();
}
catch (Exception e)
{
e.printStackTrace();
throw new Throwable(
"Exception in retriveVideoFrameFromVideo(String videoPath)"
+ e.getMessage());
}
finally
{
if (mediaMetadataRetriever != null)
{
mediaMetadataRetriever.release();
}
}
return bitmap;
}
信用额转到@nilesh Rathod