Конференция "KOL" » KOLMediaPlayer
 
  • Dy1 (31.10.08 21:52) [0]
    вопрос наверно глупый...
    Как запустить плеер из чистого КОЛ? При создании с помощью КОЛнМЦК работает, а в КОЛ не получается
    program ScrSvrVid;
    uses FastMM4, Windows, KOL,
     main in 'main.pas',
     dlg in 'dlg.pas';
    var
     s: string;
    begin
    Run_;
    end.



    unit main;
    interface
    uses
     Windows, KOL, KOLMediaPlayer;
     procedure Run_;
    var
     f: PControl;
     mp: PMediaPlayer;
     
    implementation

    procedure onnotif(d: pointer; Sender: PMediaPlayer; NotifyValue: TMPNotifyValue);
    begin
     if NotifyValue = nvSuccessful then
       Sender.Play(1,-1);
    end;

    procedure Run_;
    begin
     f := NewForm(nil, '');
    //  f.HasCaption := False; // не работает, не показывает окно
     f.Show;
     mp := NewMediaPlayer('t.wmv', f.GetWindowHandle);//кодек стоит
     mp.OnNotify := TMPOnNotify(MakeMethod(nil, @onnotif));
    Run(f);
     mp.Stop;
     mp.Free;
    end;
    end.

  • Дмитрий К © (31.10.08 22:49) [1]
    program Project1;

    uses
     KOL, KOLMediaPlayer;

    var
     Form: PControl;
     Btn: PControl;
     MP: PMediaPlayer;

    procedure BtnClick(Dummy, Sender: PObj);
    begin
     MP.Play(0, MP.Length);
    end;

    begin
     Form := NewForm(nil, '');
     Applet := Form;
     Form.CreateWindow;
     Form.HasCaption := False;
     MP := NewMediaPlayer('c:\windows\media\tada.wav', Form.Handle);
     Form.Add2AutoFree(MP);
     Btn := NewButton(Form, 'Play');
     Btn.OnClick := TOnEvent(MakeMethod(nil, @BtnClick));

     Run(Applet);
    end.

  • Dy1 (02.11.08 00:50) [2]
    Дмитрий К, в проекте будет только обработка ключей запуска, а всё остальное - в модуле(-ях). По-другому будет каша
  • Dy1 (02.11.08 01:13) [3]
    в моём варианте вылезает ошибка, в другом вообще не запускается
  • Дмитрий К © (02.11.08 18:19) [4]
    МедиаПлейеру нужен Applet для обработки нотификаций.
  • Dy1 (03.11.08 13:28) [5]
    музыка есть, нет видео - AV. Во всех вариантах. Кодеки стоят. КОЛ 2.87 с не помню сколькими плюсами
  • finder2007 (03.11.08 19:29) [6]
    Была такая же проблема. Заюзал DirectShow - помогло.
  • Dy1 (03.11.08 20:55) [7]
    как?
  • finder2007 (04.11.08 13:23) [8]
    Что-то навроде этого:

    uses DShow, ActiveX, ComObj;

    var
     MyGraphBuilder: IGraphBuilder;
     MyMediaControl: IMediaControl;
     MyMediaEventEx: IMediaEventEx;
     MyMediaSeeking: IMediaSeeking;
     MyVideoWindow : IVideoWindow;
     MyBasicAudio  : IBasicAudio;


    *********
    При запуске программы:
    CoInitialize(nil);
    *********
    При выходе:
    CoUninitialize;
    *********

    function Play(f:Kol_String):boolean;
    var hr:integer;
    begin
     result:=false;
     CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,My GraphBuilder);
     hr:=MyGraphBuilder.RenderFile(StringToOleStr(f),nil);
     if FAILED(hr) then exit;
     hr:=MyGraphBuilder.QueryInterface(IID_IMediaControl,MyMediaControl);
     if FAILED(hr) then exit;
     hr:=MyGraphBuilder.QueryInterface(IID_IMediaEventEx,MyMediaEventEx);
     if FAILED(hr) then exit;
     hr:=MyGraphBuilder.QueryInterface(IID_IMediaSeeking,MyMediaSeeking);
     if FAILED(hr) then exit;
     hr:=MyGraphBuilder.QueryInterface(IID_IBasicAudio,MyBasicAudio);
     if FAILED(hr) then exit;
     hr:=MyGraphBuilder.QueryInterface(IID_IVideoWindow,MyVideoWindow);
     if FAILED(hr) then exit;
     hr:=MyVideoWindow.put_Owner(Form1.Panel1.Handle);
     if FAILED(hr) then exit;
     hr:=MyVideoWindow.put_WindowStyle(WS_CHILD OR WS_CLIPSIBLINGS);
     if FAILED(hr) then exit;
     hr:=MyVideoWindow.SetWindowPosition(0,0,Form1.Panel1.ClientRect.Right,Form1.Pane l1.ClientRect.Bottom);
     if FAILED(hr) then exit;
     hr:=MyBasicAudio.put_Volume(VolumeTrackBar.Position);

     hr:=MyMediaControl.Run;
     if FAILED(hr) then exit;

     result:=true;
    end;



    А более подробно сюда - http://directshow.wonderu.com/
Есть новые Нет новых   [134431   +15][b:0][p:0.002]