MediaMetadataRetriever setDataSource抛出IllegalArgumentException [英] MediaMetadataRetriever setDataSource throws IllegalArgumentException

查看:720
本文介绍了MediaMetadataRetriever setDataSource抛出IllegalArgumentException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用此类来获取远程视频的大小,如果视频是远程的,我会收到IllegalArgumentException.

I'm trying to get the size of a remote video using this class and i'm getting IllegalArgumentException if the video is remote.

视频是存储在一个服务器中的mp4 ...

the video is an mp4 stored in one server...

如果我使用mediaplayer播放视频,则视频可以正确播放,但是如果我尝试这样做,则会出现错误:

the video plays correctly if i play it with mediaplayer, but it gives the error if i try to do this:

try {
    MediaMetadataRetriever retriever = new  MediaMetadataRetriever();
    Bitmap bmp = null;      
    retriever.setDataSource(context, uri);
    bmp = retriever.getFrameAtTime();           
    videoHeight = (int) (bmp.getHeight()*((float)getIntWidth()/bmp.getWidth()));
} catch (Exception e) {
    e.printStackTrace();
}   

此行引发错误:

retriever.setDataSource(context, uri);

并且uri包含Uri.parse("http://www.myweb.com/myvideo.mp4");

代码有什么问题?

12-19 13:38:08.610: W/System.err(13333): java.lang.IllegalArgumentException
12-19 13:38:08.611: W/System.err(13333):    at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:175)

推荐答案

也许您遇到了这个错误.如果是这样,请尝试:

Maybe you are running into this bug. If so try:

try {
    MediaMetadataRetriever retriever = new  MediaMetadataRetriever();
    Bitmap bmp = null;      
    retriever.setDataSource("http://www.myweb.com/myvideo.mp4", new HashMap<String, String>());
    bmp = retriever.getFrameAtTime();           
    videoHeight = (int) (bmp.getHeight()*((float)getIntWidth()/bmp.getWidth()));
} catch (Exception e) {
    e.printStackTrace();
}

如果这不起作用,您可以随时尝试 FFmpegMediaMetadataRetriever :

If that doesn't work you can always try FFmpegMediaMetadataRetriever:

FFmpegMediaMetadataRetriever retriever = new  FFmpegMediaMetadataRetriever();

try {
    Bitmap bmp = null;      
    retriever.setDataSource("http://www.myweb.com/myvideo.mp4"));
    bmp = retriever.getFrameAtTime();           
    videoHeight = (int) (bmp.getHeight()*((float)getIntWidth()/bmp.getWidth()));
} catch (Exception e) {
    e.printStackTrace();
}

retriever.release();

这篇关于MediaMetadataRetriever setDataSource抛出IllegalArgumentException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆