gpt4 book ai didi

java - 检查 JavaFX MediaPlayer 是否可以播放文件的正确方法

转载 作者:行者123 更新时间:2023-11-30 10:23:15 25 4
gpt4 key购买 nike

目前,这是我检查文件是否可通过 JavaFX MediaPlayer 播放的方式,因为这是在内部完成的方式。

import static com.sun.media.jfxmedia.MediaManager.canPlayContentType;
import static com.sun.media.jfxmediaimpl.MediaUtils.filenameToContentType;

public boolean isPlayable(String filename) {
return canPlayContentType(filenameToContentType(filename));
}

问题是包含这些方法的包“不是 API”并且在 Java 9 上不再可访问。我知道有变通办法,但我想知道是否有真正正确、面向 future 的方法来做到这一点?

我希望此方法用目录中的所有可播放内容填充库:

Files.find(folderPath, Integer.MAX_VALUE, (path, attr) -> 
attr.isRegularFile() && isPlayable(path.toFile().getName()))
.forEach(path -> addSong(path));

最佳答案

我浏览了 javafx.media 的文档为了找到任何这样的内置 API 而无法找到一个模块。


看一下 filenameToContentType(String filename) 的现有实现,它有点:-

if (extension.equals(FILE_TYPE_AIF) || extension.equals(FILE_TYPE_AIFF)) {
contentType = CONTENT_TYPE_AIFF;
} else if ... other content types

最终检查当前文件扩展名是否是 the supported container type 之一并返回基于相同的内容类型。

董事会上的另一 block 至关重要的是 canPlayContentType(String contentType),它似乎最终依赖于 NativeMediaManager 中定义的每个平台的 supportedContentTypes 类。


虽然我没有测试下面提出的解决方案,主要是因为不知道您最终打算执行的任务的概述。然而,最接近您当前的实现和什么 Basic PlayBack guidelines 也建议,是尝试


此外,异常类型 MediaException.Type MEDIA_UNSUPPORTED 指出

Indicates that this media type is not supported by this platform.

根据与此和您当前解决方案的类比,您可能会使用此:

private static boolean isPlayable(String filename) {
try {
Media media = new Media(filename);
} catch (MediaException e) {
if (e.getType() == MediaException.Type.MEDIA_UNSUPPORTED) {
return false;
}
}
return true;
}

PS:虽然我相信如果您真正开始使用构造的Media(如上面的 stub 中),这可以进一步优化) 立即添加到您的代码中,而不是将其丢弃。

关于java - 检查 JavaFX MediaPlayer 是否可以播放文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com