Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测媒体容器中的流和类型_Java_Audio_Mp4_Apache Tika_Mp4parser - Fatal编程技术网

Java 如何检测媒体容器中的流和类型

Java 如何检测媒体容器中的流和类型,java,audio,mp4,apache-tika,mp4parser,Java,Audio,Mp4,Apache Tika,Mp4parser,我有一个JavaServlet方法,它评估上传的文件以确定其类型,然后将该文件传递给ffmpeg进行处理。Tika用于检测文件的类型。现在,Tika或我的实现似乎只能确定容器,而不是容器中的流,这导致了一个检测问题,其中容器可能是MP4,但其中的流是AAC音频。在我的Java代码中,我有以下内容: String fileType = tika.detect(uploadedFile); String[] mediaAndType = fileType.split("/"); media = me

我有一个JavaServlet方法,它评估上传的文件以确定其类型,然后将该文件传递给ffmpeg进行处理。Tika用于检测文件的类型。现在,Tika或我的实现似乎只能确定容器,而不是容器中的流,这导致了一个检测问题,其中容器可能是MP4,但其中的流是AAC音频。在我的Java代码中,我有以下内容:

String fileType = tika.detect(uploadedFile);
String[] mediaAndType = fileType.split("/");
media = mediaAndType[0];
mediatype =  mediaAndType[1];
我有一个扩展名为.m4a的文件,Tika将其检测为“video/3gpp” MediaInfo检测到:

Format           : MPEG-4
Format profile   : 3GPP Media Release 4
Codec ID         : 3gp4 (isom/3gp4)
文件中只有一个流:

Format         : AAC
Format/Info    : Advanced Audio Codec
Format profile : LC
Codec ID       : mp4a-40-2
如果我可以检测到该文件在容器中只有一个音频格式流,那么我可以将其交给ffmpeg进行音频处理而不是视频处理(在处理上述文件时会抛出错误)

我最初选择Tika是因为它简单、快速且易于实现,因此如果有一种方法可以使用Tika获得我想要的,那将是最好的,但我愿意使用其他工具来确定容器中流的数量和类型。我试着在Tika使用MP4Parser,但没有得到任何有用的结果


那么,有没有更好的方法/工具来检测容器中相当轻量级的流的格式?

IIRC有一个开放的Tika JIRA问题。Tika有一个用于Ogg文件的专用容器感知检测器,该检测器根据存在的流来识别子类型,但还没有一个用于MOV/MP4容器类型的检测器谢谢……您知道有没有其他检测库可以实现我想要的功能?尽量保持简单。如果没有,下一个计划是给我的转码例程添加一些逻辑,看看是否只有一个流存在,如果是,就尝试转码音频……如果只有一个流,我们很有可能从文件开头的前几个MP4/QuickTime原子中发现类型。您是否有可能引发Apache Tika错误并附加一个显示问题的小文件,以便我们可以查看?否则,请参阅识别示例。如果可以,我愿意提供帮助。我们收到的文件是40分钟的讲座(包括视频和音频)。我不确定是否可以在不影响内容的情况下截断文件,但我会看看我能做些什么。谢谢你的链接。我们使用Tika作为“路由”工具,告诉我们是否有音频文件或视频发送到不同的进程,因此使用ffmpeg是一种选择,但它相当“沉重”。我可能只是将文件传递到视频处理例程,然后如果我发现一个流,就将其“切换”到音频。IIRC这有一个开放的Tika JIRA问题。Tika有一个用于Ogg文件的专用容器感知检测器,该检测器根据存在的流来识别子类型,但还没有一个用于MOV/MP4容器类型的检测器谢谢……您知道有没有其他检测库可以实现我想要的功能?尽量保持简单。如果没有,下一个计划是给我的转码例程添加一些逻辑,看看是否只有一个流存在,如果是,就尝试转码音频……如果只有一个流,我们很有可能从文件开头的前几个MP4/QuickTime原子中发现类型。您是否有可能引发Apache Tika错误并附加一个显示问题的小文件,以便我们可以查看?否则,请参阅识别示例。如果可以,我愿意提供帮助。我们收到的文件是40分钟的讲座(包括视频和音频)。我不确定是否可以在不影响内容的情况下截断文件,但我会看看我能做些什么。谢谢你的链接。我们使用Tika作为“路由”工具,告诉我们是否有音频文件或视频发送到不同的进程,因此使用ffmpeg是一种选择,但它相当“沉重”。我可能只是将文件传递给视频处理例程,然后在找到单个流时将其“切换”为音频。