2011-09-23 8 views
0

필자는 비디오를 훌륭하게 재생하고 열어주는 Windows Form 프로젝트에 Windows Media Player COM이 있습니다. 그러나로드 된 비디오의 첫 번째 프레임을 잡아 내 프로그램 사용자가 비디오를 미리 볼 수 있으므로 (이상적으로 다른 비디오를 인식 할 수 있기를 바랍니다).Windows Media Player COM의 프레임을 어떻게 업데이트 할 수 있습니까?

Windows Media Player 개체가 표시하는 프레임을 어떻게 업데이트 할 수 있습니까? ,

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) 
{ 
    Text = openFileDialog1.SafeFileName + " - MPlayer 2.0"; 
    //mediaPlayer1.openPlayer(openFileDialog1.FileName); 
    mediaPlayer1.URL = openFileDialog1.FileName; 
    //hopefully, this will load the first frame. 
    mediaPlayer1.Ctlcontrols.play(); 
    mediaPlayer1.Ctlcontrols.pause();   
} 

내가 이것을 실행할 때, 일시 정지 명령이 무시됩니다 (비디오 로딩을위한 자동 재생이 꺼져 :

내 OpenFileDialog를 이벤트 응답의 끝에 다음 코드를 사용하여 시도 그래서 위의 .play()를 호출하지 않으면 비디오가 재생되지 않습니다. 추측해야한다면, 이것은 재생을 호출하고, 일시 중지를 호출하고, 일시 중지를 호출하고, 마지막으로 재생이 해결되고 비디오가 시작되는 일부 스레딩 작업 때문이라고 말할 수 있습니다.하지만 .pause .play 전에 해결되면 최종 결과는 .pause가 궁극적으로 무시됩니다.

먼저, .play() 이외의 방법이 있습니까? .중지(); AxWindowsMediaPlayer 객체에 대한 비디오의 미리보기 이미지를 찍으려면? 그렇지 않다면 어떻게 내 .pause()가 무시되지 않도록 할 수 있습니까?

은 '당신이 할 수있는

답변

2

동안 윈도우 미디어 플레이어 컴 수도 같은하지 공식적으로 지원 기능, '가짜'이 그것의 매우 쉽습니다. CtlControls2를 사용하는 경우 내장 된 "step (1)"기능에 액세스 할 수 있습니다.이 기능은 정확히 하나의 프레임으로 진행됩니다.

내가 발견 한 당신이 호출하는 경우 단계 (1) 또한 비디오를 업데이트 할 트랙 바에서 검색 일시 정지()를 호출 한 후.

예쁜 것은 아니지만 작동합니다!

1

(나는 비디오가로드가 완료 후 그 두 가지 방법을 를 호출 별도의 버튼을 테스트하고 있기 때문에 일반 경우 .play(); .pause(); 작품, 그것은 예상대로 일을 알고) 이 COM으로 많은 일을하지 마십시오. 그러나 Follow this link이고 비디오 파일에서 이미지를 추출하는 데 도움이되는 클래스를 찾을 수 있습니다. 단순히 이미지를 추출하여 비디오 상단이나 옆에 놓을 수 있습니다. 이것은 귀하의 요구 사항에 대한 간단한 해결 방법입니다. 만족스럽지 않으면이 COM을 전혀 사용하지 말고 다른 오픈 소스 비디오 플레이어/플러그인을 사용하는 것이 좋습니다. 진짜 좋은 것들이 많이 있지만, 나는 VLC Plugin을 추천하거나 다른 것을 찾아 볼 수 있습니다.

행운을 빕니다. Hanlet

0

일반적인 문제 (-1)를 해결하는 것은 약간의 트릭입니다.

IWMPControls2 Ctlcontrols2 = (IWMPControls2)WindowsMediaPlayer.Ctlcontrols; 

double frameRate = WindowsMediaPlayer.network.encodedFrameRate; 
Console.WriteLine("FRAMERATE: " + frameRate); //Debug 
double step = 1.0/frameRate; 
Console.WriteLine("STEP: " + step); //Debug 
WindowsMediaPlayer.Ctlcontrols.currentPosition -= step; //Go backwards 
WindowsMediaPlayer.Ctlcontrols.pause(); 
Ctlcontrols2.step(1); 
관련 문제