我已经创建了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位置暂停帧?
编辑:为了清楚起见,我想获得“预览”效果,因此,当我第一次加载视频时,媒体播放器将显示一些(第一)帧而不是黑屏。然后用户可以按播放来观看视频。
答案 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这远非优雅,但这也许是唯一的方法。