Java 如何在Android中从URL获取详细视频信息

Java 如何在Android中从URL获取详细视频信息,java,android,url,video,Java,Android,Url,Video,我正在寻找从Android中的URL获取详细视频信息(如持续时间、视频缩略图…)的解决方案?尝试从URL获取视频缩略图 public static Bitmap retriveVideoFrameFromVideo(String videoPath) throws Throwable { Bitmap bitmap = null; MediaMetadataRetriever mediaMetadataRetriever = null; try {

我正在寻找从Android中的URL获取详细视频信息(如持续时间、视频缩略图…)的解决方案?

尝试从URL获取视频缩略图

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;
}
公共静态位图从视频检索视频帧(字符串视频路径)
扔掉的
{
位图=空;
MediaMetadataRetriever MediaMetadataRetriever=null;
尝试
{
mediaMetadataRetriever=新的mediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(videoPath,newhashmap());
其他的
mediaMetadataRetriever.setDataSource(videoPath);
//mediaMetadataRetriever.setDataSource(videoPath);
位图=mediaMetadataRetriever.getFrameAtTime();
}
捕获(例外e)
{
e、 printStackTrace();
扔新的一次性垃圾(
“RetrieveVideoFrameFromVideo(字符串视频路径)中出现异常”
+e.getMessage());
}
最后
{
if(mediaMetadataRetriever!=null)
{
mediaMetadataRetriever.release();
}
}
返回位图;
}

这要归功于

您在StackOverflow上提出了两个不同的问题

要检索视频持续时间和其他元数据,请参阅

也许你在找

FFmpegMediaMetadataRetriever类为从输入媒体文件检索帧和元数据提供了统一接口

通过使用元数据键持续时间 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");
MediaMetadataRetriever retriever=新的MediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(“您的视频url”,new HashMap());
其他的
setDataSource(“您的视频url”);
要下载缩略图,请参阅

无需下载视频,即可从以下代码生成缩略图:

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;
}
公共静态位图检索VideoFrameFromVideo(字符串视频路径)抛出可丢弃
{
位图=空;
MediaMetadataRetriever MediaMetadataRetriever=null;
尝试
{
mediaMetadataRetriever=新的mediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(videoPath,newhashmap());
其他的
mediaMetadataRetriever.setDataSource(videoPath);
//mediaMetadataRetriever.setDataSource(videoPath);
位图=mediaMetadataRetriever.getFrameAtTime();
}捕获(例外e){
e、 printStackTrace();
抛出新的Throwable(“RetrieveVideoFrameFromVideo(String videoPath)中的异常)”+e.getMessage();
}最后{
if(mediaMetadataRetriever!=null){
mediaMetadataRetriever.release();
}
}
返回位图;
}

这两个答案都是针对Android的,不需要下载整个视频。

只有在视频视图中加载URL,或者您可以从获取URL的服务器接收此信息时,才能获取此信息。您的答案(如何从URL获取视频缩略图)出现此错误(状态=0x8000000)。为什么?我正在尝试显示youtube上的视频缩略图。@TarasStavnychyi从视频和youtube这样的视频服务中获取缩略图是非常不同的。但是,由于此代码支持MP4,因此可以使用此代码将Youtube URL转换为MP4 URL。