RT

解决方案 »

  1.   


    dfm 文件源码
    object Form1: TForm1
      Left = 257
      Top = 268
      BorderStyle = bsToolWindow
      Caption = 
        'DSPlayer Async StreamSource Example     ( Coder@dsplayer , www.d' +
        'splayer.de )'
      ClientHeight = 58
      ClientWidth = 477
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      Position = poScreenCenter
      OnClose = FormClose
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 16
        Top = 16
        Width = 75
        Height = 25
        Caption = 'open'
        TabOrder = 0
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 96
        Top = 16
        Width = 75
        Height = 25
        Caption = 'Play'
        TabOrder = 1
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 176
        Top = 16
        Width = 75
        Height = 25
        Caption = 'Pause'
        TabOrder = 2
        OnClick = Button3Click
      end
      object Button4: TButton
        Left = 256
        Top = 16
        Width = 75
        Height = 25
        Caption = 'Stop'
        TabOrder = 3
        OnClick = Button4Click
      end
      object Button5: TButton
        Left = 344
        Top = 16
        Width = 105
        Height = 25
        Caption = 'PropertyPage'
        TabOrder = 4
        OnClick = Button5Click
      end
      object OpenDialog1: TOpenDialog
        Left = 448
        Top = 16
      end
    end
    //pas 文件源码 
    unit DSPlayerAsyncStreamSourceExample;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DirectShow9, ActiveX, StdCtrls, DSUtil;type
      TForm1 = class(TForm)
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
      private
        procedure NilAll();
      public
      end;IStreamLoad = interface(IUnknown) ['{3E0FA056-926C-43d9-BA18-EF16E980913B}']
       function LoadFromStream(f_Stream: TStream) : HRESULT; stdcall;
    end;var
      Form1: TForm1;
      g_GraphBuilder        : IGraphBuilder         = NIL;
      g_MediaControl        : IMediaControl         = NIL;
      g_DSPlayerFileSource  : IBaseFilter           = NIL;
      g_StreamSource        : IStreamLoad           = NIL;
      g_Pin                 : IPin                  = NIL;
      g_count               : integer               = 0;
      g_FileStream          : TFileStream           = NIL;const
      CLSID_DSPlayerAsyncSource : TGUID = '{3E0FA044-926C-42d9-BA12-EF16E980913B}';
      IID_IStreamLoad           : TGUID = '{3E0FA056-926C-43d9-BA18-EF16E980913B}';
      pinID                             = 'StreamOut';
    implementation{$R *.dfm}procedure TForm1.NilAll();
    begin
      if Assigned(g_MediaControl)       then CheckDSError(g_MediaControl.Stop);
      if Assigned(g_Pin)                then g_Pin                  := nil;
      if Assigned(g_StreamSource)       then g_StreamSource           := nil;
      if Assigned(g_DSPlayerFileSource) then g_DSPlayerFileSource   := nil;
      if Assigned(g_MediaControl)       then g_MediaControl         := nil;
      if Assigned(g_GraphBuilder)       then g_GraphBuilder         := nil;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not OpenDialog1.Execute then exit;
      NilAll;
      CheckDSError(CoCreateInstance(TGUID(CLSID_FilterGraph), NIL, CLSCTX_INPROC,
                                 TGUID(IID_IGraphBuilder), g_GraphBuilder)) ;
      CheckDSError(g_GraphBuilder.QueryInterface(IID_IMediaControl, g_MediaControl));
      CheckDSError(CoCreateInstance(CLSID_DSPlayerAsyncSource,NIL, CLSCTX_INPROC,
                                     IID_IBaseFilter, g_DSPlayerFileSource));
      CheckDSError(g_DSPlayerFileSource.QueryInterface(IID_IStreamLoad,
                   g_StreamSource));
      if g_FileStream <> nil then g_FileStream.Free;
      g_FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
      CheckDSError(g_StreamSource.LoadFromStream(g_FileStream));
      CheckDSError(g_DSPlayerFileSource.FindPin(pinID, g_Pin));
      CheckDSError(g_GraphBuilder.AddFilter(g_DSPlayerFileSource,
                   StringToOleStr('DSPlayer Async FileSource')));
      CheckDSError(g_GraphBuilder.Render(g_Pin));
      CheckDSError(g_MediaControl.Run);
      if g_count = 0 then begin
            g_count := g_count+1;
            CheckDSError(dsutil.ShowFilterPropertyPage(0,g_DSPlayerFileSource));
      end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     NilAll;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
       if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Run);
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
       if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Pause);
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
       if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Stop);
    end;procedure TForm1.Button5Click(Sender: TObject);
    begin
      CheckDSError(dsutil.ShowFilterPropertyPage(0,g_DSPlayerFileSource));
    end;end.