2014-12-14 4 views
1

JavaFX에는 자체 미디어 플레이어가 있지만 MP4 파일을 재생할 수 있는지 여부는 알 수 없습니다. VLCJ를 사용할 수 있더라도 VLCJ를 사용하는 편이 좋을 것입니다. VLC는 더 가까운 형식과 품격을 지원합니다.VLCJ 및 JavaFX를 사용하여 비디오 파일을 재생하는 방법은 무엇입니까?

저는 Caprical이 그의 VLCJ-JavaFX GitHub에 게시 한 예제를 따라 왔지만 아무것도하지 않았습니다. 오류는 아니지만 아무것도 수행하지 않습니다. 그것은 제안 된 것

private final EventHandler<ActionEvent> nextFrame = new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent t) { 
     Memory[] nativeBuffers = mediaPlayerComponent.getMediaPlayer().lock(); 
     if (nativeBuffers != null) { //<-----This is always NULL so everything in the block is skipped . . . 
      // FIXME there may be more efficient ways to do this... 
      // Since this is now being called by a specific rendering time, independent of the native video callbacks being 
      // invoked, some more defensive conditional checks are needed 
      Memory nativeBuffer = nativeBuffers[0]; 
      if (nativeBuffer != null) { 
       ByteBuffer byteBuffer = nativeBuffer.getByteBuffer(0, nativeBuffer.size()); 
       BufferFormat bufferFormat = ((DefaultDirectMediaPlayer) mediaPlayerComponent.getMediaPlayer()).getBufferFormat(); 
       if (bufferFormat.getWidth() > 0 && bufferFormat.getHeight() > 0) { 
        pixelWriter.setPixels(0, 0, bufferFormat.getWidth(), bufferFormat.getHeight(), pixelFormat, byteBuffer, bufferFormat.getPitches()[0]); 
       } 
      } 
     } 
     mediaPlayerComponent.getMediaPlayer().unlock(); 
    }; 
}; 

내가 로그를 얻을하지만 그건 내가 할로 무의식에 걸리고 있어요로 기다려야 할 것이다 : 코드로 보면

, 문제가 타임 라인 이벤트 핸들러에 보인다 이 게시물 (내가 살아있는 땅으로 돌아 왔을 때, 나는 어떤 것을 게시하기 위해 내가 할 수있는 일을 볼 것이다). 이 일을 가능하게하는 더 좋은 방법이 있다면, 누군가가 나를지도 할 수 있다면 나는 그것을위한 것입니다. 감사 ...

+0

비디오가 재생되지 않기 때문에 nativeBuffers는 항상 null입니다. – caprica

답변

1

Github 프로젝트의 vlcj-javafx 샘플은 정상적으로 작동합니다.

당신의 질문에 vlcj는 "오류가 아니지만 아무것도하지 않는다"고 말합니다.

글쎄, 질문에 게시 한 코드에 표시되지 않은 오류를 확인하는 방법은 두 가지가 있습니다.

  1. mediaPlayer.playMedia() 방법은 boolean는 VLC 당신의 MRL을 수락 여부 말을 반환 - 당신이 반환 값을 확인 했습니까? 이 메소드가 true를 반환한다고해도 VLC가 미디어를 재생할 수 있다는 것을 단정적으로 나타내지는 않지만, false를 반환하면 재생할 수 없다는 것을 의미합니다.
  2. 미디어 플레이어에 MediaPlayerEventLister을 추가하고 "playing()"및 "error()"에 대한 구현을 제공해야합니다. 이러한 콜백은 비동기식으로 트리거됩니다. LibVLC가 작동하는 방식이기 때문에 vlcj가 "오류가 발생하지 않음"또는 "아무 것도하지 않음"을 결론 내릴 수 있습니다.

아마도 파일 이름이 잘못되어 미디어를 시작하지 못한 것 같습니다.

+0

좋아, 지금 정확한 위치를 가리키고 있지만 Play가 false를 반환하고 "C : /path/to/video.mp4 '의 네이티브 미디어 리소스를 만들지 못했습니다" – Will

+0

알았어, 신경 쓰지 마. 경로에서 '/'를별로 신경 쓰지 않는다는 것을 알 수 있습니다. 고맙습니다. – Will

+0

경로가 실제로 * 네이티브 * 함수에 전달된다는 것을 알아야합니다. Java는 네이티브 함수의 경우 파일 이름에 "/"또는 "\"을 사용할 수 있습니다. Windows에서 "\"를 사용해야하고 Linux에서는 "/"를 사용해야합니다. – caprica