我有一个非常简单的程序,使用DSPack从 Delphi 2010年。我有一个带有TFilterGraph和TVideoWindow的表单。视频播放和渲染效果很好。我似乎不知道如何使视频循环回到开始时,它结束了。
如何使用DSPack使视频自动循环?
代码
unit Unit21;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DSPack, ExtCtrls;
type
TForm21 = class(TForm)
FilterGraph1: TFilterGraph;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
VideoWindow1: TVideoWindow;
Panel2: TPanel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form21: TForm21;
implementation
{$R *.dfm}
procedure TForm21.Button1Click(Sender: TObject);
begin
OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
if OpenDialog1.Execute then
begin
if not FilterGraph1.Active then FilterGraph1.Active:= True;
VideoWindow1.FilterGraph:= FilterGraph1;
FilterGraph1.RenderFile(OpenDialog1.Filename);
FilterGraph1.Play;
end;
end;
procedure TForm21.Button2Click(Sender: TObject);
begin
FilterGraph1.Stop;
end;
procedure TForm21.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
FilterGraph1.ClearGraph;
FilterGraph1.Active:= False;
end;
end.
DFM
object Form21: TForm21
Left = 0
Top = 0
Caption = 'Form21'
ClientHeight = 441
ClientWidth = 644
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCloseQuery = FormCloseQuery
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 0
Top = 0
Width = 644
Height = 384
Align = alClient
Caption = 'Panel1'
TabOrder = 0
object VideoWindow1: TVideoWindow
Left = 1
Top = 1
Width = 642
Height = 382
Mode = vmVMR
FilterGraph = FilterGraph1
VMROptions.Mode = vmrWindowed
Color = clWhite
Align = alClient
end
end
object Panel2: TPanel
Left = 0
Top = 384
Width = 644
Height = 57
Align = alBottom
Caption = 'Panel2'
TabOrder = 1
object Button1: TButton
Left = 24
Top = 16
Width = 75
Height = 25
Caption = 'Play'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 128
Top = 16
Width = 75
Height = 25
Caption = 'Stop'
TabOrder = 1
OnClick = Button2Click
end
end
object FilterGraph1: TFilterGraph
GraphEdit = True
LinearVolume = True
Left = 424
Top = 144
end
object OpenDialog1: TOpenDialog
Left = 344
Top = 128
end
end
2条答案
按热度按时间qlckcl4x1#
没有内置的无缝循环支持。是的,你当然可以接收完成事件,寻求回放到开始并再次运行图形,但是这将不可避免地有一个重新启动延迟和可能 Flink 。
要实现无缝循环,您可以使用multigraph解决方案,在演示图短暂暂停且不 Flink 时重新启动上游图。或者以其他方式将自定义过滤器添加到管道中,以在内部重新启动流式传输并将其呈现为连续流。
kqlmhetl2#