检查 3gp 文件是 audio/video in Android?

Check 3gp file is audio/video in Android?

我正在尝试使用以下代码获取视频文件的 mimetype。

问题:我有一个文件保存为音频,但它的 mimetype 是 video/3gpp 并且它也在播放 作为音频。。如何检测这种是音频但mimetype是video/3gpp的文件 详细信息,以便我可以将其从列表中排除。

fun getFileMimeType(url: String): String {

        var type: String = ""

        try {
            if (url.lastIndexOf(".") != -1) {
                val ext: String = url.substring(url.lastIndexOf(".") + 1)
                val mime = MimeTypeMap.getSingleton()
                type = mime.getMimeTypeFromExtension(ext)!!
            }

        } catch (e: Exception) {
        }

        return type

    }

假设这是一个本地文件,您可以使用 MediaMetadataRetriever 获取有关媒体文件的元数据信息。

具体可以查看METADATA_KEY_HAS_VIDEO是否设置为true。

Kotlin 中的一个例子:

        val metadataRetriever = MediaMetadataRetriever()
        metadataRetriever.setDataSource(context, Uri.fromFile(your3GPPFile))

        val hasVideoKey = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO)
        if (hasVideoKey == "yes") {
          //Include in your list or do whatever work 
          //you need here
        }
        

您也可以使用 ExoPlayer 并加载文件,然后使用

获取曲目列表

player.getCurrentTrackGroups()

这将 return 一组曲目,您可以遍历这些曲目并解析格式以检查它们是否包含视频曲目。