繁体   English   中英

Android 检查有效的视频文件

[英]Android check for valid video file

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

在 android 4.0 及更高版本中是否有任何 api 来验证视频文件?

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

这是对我有用的代码:

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

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

@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);
}

我认为这会很有用,该方法是一种较旧的方法,我用于其他目的只是稍微修改了一下供您使用,试试看,可能有用

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM