如何设置Windows Media Player在特定位置显示框架

时间:2019-08-23 10:37:33

标签: delphi windows-media-player

我已经创建了Windows Media Player ActiveX控件。
(请参阅:Windows Media Player in Delphi,以获取更多参考)。

一切正常。这是我的代码示例:

uses ..., WMPLib_TLB;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MP := TWindowsMediaPlayer.Create(Self);
  MP.Parent := Panel1;
  MP.Align := alClient;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MP.controls.stop;
  MP.URL := 'https://www.w3schools.com/html/mov_bbb.mp4';
  MP.controls.pause;
  MP.controls.currentPosition := 2; // 2 seconds 
end;

我想打开视频文件/ URL,并在X秒的位置显示视频帧。

但是上述代码不会在2秒后停止/暂停视频,而只是播放到结束。

如何在X位置暂停帧?

编辑:为了清楚起见,我想获得“预览”效果,因此,当我第一次加载视频时,媒体播放器将显示一些(第一)帧而不是黑屏。然后用户可以按播放来观看视频。

1 个答案:

答案 0 :(得分:1)

这是我目前的解决方法。
IMO远非优雅,但似乎可行。 评论中提到的@Sertac的关键点是媒体播放器正在异步加载:

  

或状态更改为wmppsPlaying时。如果加载是异步的,   点击处理程序返回后,播放可能会开始。

procedure TForm1.FormCreate(Sender: TObject);
begin
  MP := TWindowsMediaPlayer.Create(Self);
  MP.Parent := Panel1;
  MP.Align := alClient;    
  Timer1.Enabled := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FFirstTimePlay := True;
  Timer1.Interval := 50;
  MP.OnPlayStateChange := MP_PlayStateChange;
  MP.controls.stop;
  MP.settings.autoStart := False;  
  MP.URL := 'https://www.w3schools.com/html/mov_bbb.mp4';  
  MP.controls.play; // start playing
end;

procedure TForm1.MP_PlayStateChange(ASender: TObject; NewState: Integer);
begin
  Timer1.Enabled := (NewState = wmppsPlaying) and FFirstTimePlay;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin  
  if FFirstTimePlay and MP.controls.isAvailable['currentPosition'] then
  begin
    FFirstTimePlay := False;
    MP.controls.currentPosition := 2;
    MP.controls.pause;
  end;
end;

此代码将在2秒到达位置并暂停。
现在,用户可以按播放继续播放其余视频...
视频有一个小的视觉副作用,即视频从初始(零)位置“跳到” X位置。

再次,IMO这远非优雅,但这也许是唯一的方法。