Android检查有效的视频文件

时间:2014-01-27 07:17:35

标签: android

如果检查视频文件是否有效而不检查其扩展名(.mp3或.3gp等)。是否支持设备支持如何检查SD卡上的视频文件?

在Android 4.0及以上版本中是否有验证视频文件的API?

我的场景:我在下载后在VideoView上播放视频,并在下载成功后从本地SD卡播放。下次当请求相同的视频,然后检查SD卡,如果找到,然后开始播放(在这种情况下没有下载)。但有时网络错误或app kill中断下载(在这种情况下视频文件未完全下载),因此下载的文件已损坏,VideoView无法播放此文件。那么如何检测这个损坏的文件。

3 个答案:

答案 0 :(得分:8)

以下代码对我有用:

 MediaMetadataRetriever retriever = new MediaMetadataRetriever();
 retriever.setDataSource(context, Uri.fromFile(fileToTest));

 String hasVideo = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO);
 boolean isVideo = "yes".equals(hasVideo);

答案 1 :(得分:0)

我认为这将是有用的,该方法是一个旧的,我用于其他目的只是修改了一点供你使用,试试看,可以工作

private void checkAndLoadFile(
        File currentFile) {
            String path = currentFile.getAbsolutePath();
    String extension = Utility.getExtension(path);
    MimeTypeMap mimeMap = MimeTypeMap.getSingleton();

    if(mimeMap.hasExtension(extension))
    {
        String mimeType = mimeMap.getMimeTypeFromExtension(extension);

        Intent viewFile = new Intent(Intent.ACTION_VIEW);
        viewFile.setDataAndType(Uri.fromFile(currentFile), mimeType);

        PackageManager pm = getPackageManager();
        List<ResolveInfo> apps = 
                pm.queryIntentActivities(viewFile, PackageManager.MATCH_DEFAULT_ONLY);

        if (apps.size() > 0)
            startActivity(viewFile); //This video is supported and there are apps installed in this device to open the video
        else
            showAsNotSupported();
    } else
        showAsNotSupported();
}

答案 2 :(得分:0)

@Alex给出了正确答案,但仍然存在一些问题,例如@Kirill在评论中提到setDataSource经常抛出java.lang.RuntimeException: setDataSource failed异常。这是有效视频文件的功能检查

private boolean videoFileIsCorrupted(String path){

    MediaMetadataRetriever retriever = new MediaMetadataRetriever();

    try {
        retriever.setDataSource(myContext, Uri.parse(path));
    }catch (Exception e){
        e.printStackTrace();
        return false;
     }

String hasVideo = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO);
return "yes".equals(hasVideo);
}
相关问题