2011-10-27 116 views
3

我有一个允许用户导入媒体(视频,照片,音频)的应用程序,然后由应用程序管理(作为证据)。 我发现一些录音应用会以.3gp格式(特别是Whats App messenger)保存音频。如果我用下面的代码获得MIME类型:如何判断.3gp文件是否为Android中的音频或视频

MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension); 

它会回来的视频/ 3GP这我的应用程序需要意味着它的类型是“视频”,并试图使缩略图并没有什么(我使用MIME类型的第一部分来确定我的应用将其分类为的类型)。 但是它是音频,所以我希望工作的某些东西不起作用(例如为视频创建缩略图)。有没有任何库或任何可用的android,这将允许我告诉如果文件只是一个视频音频?我想我可以尝试制作一个缩略图,如果失败则假定该文件是音频文件,但由于其他一些问题可能会在制作缩略图时出现问题,因此这是有点延伸。有任何想法吗?

回答

2

我想出了一个办法做到这一点:

public static boolean is3gpFileVideo(File mediaFile) { 
     int height = 0; 
     try { 
      MediaPlayer mp = new MediaPlayer(); 
      FileInputStream fs; 
      FileDescriptor fd; 
      fs = new FileInputStream(mediaFile); 
      fd = fs.getFD(); 
      mp.setDataSource(fd); 
      mp.prepare(); 
      height = mp.getVideoHeight(); 
      mp.release(); 
     } catch (Exception e) { 
      Log.e(TAG, "Exception trying to determine if 3gp file is video.", e); 
     } 
     return height > 0; 
    } 

所以要弄清楚,如果一个媒体文件具有视频,你可以使用这个..也许不是最有效的方式做到这一点,但东西很少在你的应用程序中完成它似乎是一个合理的解

+0

mp.prepare作品();实际上是必需的(尽管文档有不同的说法)。在我的测试中,如果我没有在mediaplayer对象上调用prepare,那么无论是音频还是视频,高度始终为0。 –

3

METADATA_KEY_HAS_VIDEO

如果该键存在的媒体包括视频内容。

+0

我需要的东西,与Android 2.2+(API 8)工作 –

+0

这种解决方案只能用API 10+ –

1

我还没有测试过这个解决方案,但是您可以尝试获取视频的缩略图。

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath, 
      MediaStore.Images.Thumbnails.MINI_KIND); 

如果thumbnailnull那么它的声音,否则它的视频。

0

我测试了Alessandro Roaro的解决方案,它适用于我。我目前在我的应用程序中使用它。

我引述:

我没有测试此解决方案,但你可以尝试得到一个缩略图 的视频。如果缩略图为空,那么它是音频,否则它是视频。

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath, 
MediaStore.Images.Thumbnails.MINI_KIND); 
相关问题