2017-11-04 16 views
2

현재 JavaFX MediaPlayer를 통해 파일을 재생할 수 있는지 확인하는 방법은 내부적으로 수행되는 방식이므로 JavaFX MediaPlayer를 통해 재생할 수 있는지 확인하는 방법입니다.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에서 더 이상 액세스 할 수 없다"는 것이 문제입니다. 해결 방법이 있다는 것을 알고 있지만 실제로 올바른 올바른 미래 보장 방법이 있는지 궁금합니다.

나는이 방법은 디렉토리 내의 모든 재생 가능한 컨텐츠 라이브러리를 채우려 : 나는 발견을 위해 javafx.media 모듈의 문서를 통해 갔다

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

답변

2

이러한 API에 내장 없습니다 하나를 찾으십시오.


다소이다 filenameToContentType(String filename) 기존의 구현,에보기 : - 현재 파일 확장자가 the supported container type 중 하나이며 동일한 기준으로 콘텐츠 형식을 반환하는 경우 결국 확인

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

.

보드상의 다른 조각은 NativeMediaManager 클래스에 정의 된대로 각 플랫폼에 대해 결국 supportedContentTypes에 의존하는 것처럼 보이는 canPlayContentType(String contentType)이었습니다.


최종적으로 수행하려는 작업의 개요를 알지 못하기 때문에 아래 제안 된대로 솔루션을 테스트하지는 않았지만. 그러나, Basic PlayBack guidelines뿐만 아니라 제안 무엇을 현재 구현에 가장 가까운 및

  • 당신이 제공 한 파일 이름 밖으로 Media instance를 구축하려고했다.

  • (1)을 수행하는 동안 어떤 것이 있다면 MediaException를 확인하십시오.


또한, 예외 타입 MediaException.Type MEDIA_UNSUPPORTED

이 미디어 타입이 플랫폼에 의해 지원되지 않는 것을 나타낸다고 말한다.

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 : 다음이 유추하여 현재 솔루션에서 그리기

, 당신은 아마 이것의 사용을 만들 수 I이 더 실제로 경우를 최적화 할 수 있으리라 생각하지만 위의 스텁에서와 같이 Media을 사용하여 코드를 삭제하는 대신 바로 사용하십시오.

+1

그래, 나는 이것을 이미 생각했다. 예외를 잡는 것이 이것을 처리하는 데 선호되는 방법이라고 생각하지는 않는다.이제, 일부 인스턴스에서는 최대 40,000 개가 될 수있는 전체 개체 라이브러리를 저장하므로 파일 개체 또는 미디어 개체의 메모리 사용 공간이 더 큰지 궁금합니다. – Xerus

+0

이제 큰 문제가 발생했습니다. Media 객체는 해당 파일을 잠급니다. 그 후 바로 그 태그를 읽지 못하게됩니다 ... – Xerus

+0

@Xerus는 최종 구현이 무엇으로 끝났습니까? 그래도 또 다른 질문은 (간접적으로 관련된 질문을 피하라고 요구하는 것일까 요?) – nullpointer