Poslední příspěvky

Stran: 1 [2] 3 4 ... 10
11
Obecné / Re:VLC
« Poslední příspěvek od Kony kdy 17-06-2018, 11:44:58 »
chci udelat moznost pustit http stream primo v aplikaci

PS: Diky opravil jsem, ale napsalo mi to chybu nahrani VLC library

upravil jsem i

Kód: [Vybrat]
  Result := LoadLibrary(PChar('libvlccore.dll'));
  Result := LoadLibrary(PChar('libvlc.dll'));

a potrebny knihovny dal primo do adresare aplikace, ale to stejny
12
Obecné / Re:VLC
« Poslední příspěvek od Stanislav Hruška kdy 17-06-2018, 11:29:30 »
Ja sa síce vôbec nechytám na to čo robíš, ale oznamy si čítam pozorne.
Na riadku Ti hlási inkompatibilitu typov. Chyba je na riadku 57, kde máš Key: PWideChar; a vyžaduje sa Char.
Podobne na ďalších riadkoch.
13
Obecné / Re:VLC
« Poslední příspěvek od Kony kdy 17-06-2018, 11:02:50 »
tak to zkousim a asi to nedam :)))) takze tuto funkcni proste nejak budu muset ozelit.... Uz se s tim trapim jak debil a porad nejaky chyby...

Kód: [Vybrat]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  plibvlc_instance_t        = type Pointer;
  plibvlc_media_player_t    = type Pointer;
  plibvlc_media_t           = type Pointer;

var
  Form1: TForm1;
  libvlc_media_new_path              : function(p_instance : Plibvlc_instance_t; path : PAnsiChar) : Plibvlc_media_t; cdecl;
  libvlc_media_new_location          : function(p_instance : plibvlc_instance_t; psz_mrl : PAnsiChar) : Plibvlc_media_t; cdecl;
  libvlc_media_player_new_from_media : function(p_media : Plibvlc_media_t) : Plibvlc_media_player_t; cdecl;
  libvlc_media_player_set_hwnd       : procedure(p_media_player : Plibvlc_media_player_t; drawable : Pointer); cdecl;
  libvlc_media_player_play           : procedure(p_media_player : Plibvlc_media_player_t); cdecl;
  libvlc_media_player_stop           : procedure(p_media_player : Plibvlc_media_player_t); cdecl;
  libvlc_media_player_release        : procedure(p_media_player : Plibvlc_media_player_t); cdecl;
  libvlc_media_player_is_playing     : function(p_media_player : Plibvlc_media_player_t) : Integer; cdecl;
  libvlc_media_release               : procedure(p_media : Plibvlc_media_t); cdecl;
  libvlc_new                         : function(argc : Integer; argv : PAnsiChar) : Plibvlc_instance_t; cdecl;
  libvlc_release                     : procedure(p_instance : Plibvlc_instance_t); cdecl;
  vlcLib: integer;
  vlcInstance: plibvlc_instance_t;
  vlcMedia: plibvlc_media_t;
  vlcMediaPlayer: plibvlc_media_player_t;

implementation

{$R *.dfm}

// -----------------------------------------------------------------------------
// Read registry to get VLC installation path
// -----------------------------------------------------------------------------
function GetVLCLibPath: String;
var
  Handle: HKEY;
  RegType: Integer;
  DataSize: Cardinal;
  Key: PWideChar;
begin
  Result := '';
  Key := 'Software\VideoLAN\VLC';
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then
  begin
    if RegQueryValueEx(Handle, 'InstallDir', nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then
    begin
      SetLength(Result, DataSize);
      RegQueryValueEx(Handle, 'InstallDir', nil, @RegType, PByte(@Result[1]), @DataSize);
      Result[DataSize] := '\';
    end
    else Showmessage('Error on reading registry');
    RegCloseKey(Handle);
    Result := String(PChar(Result));
  end;
end;
// -----------------------------------------------------------------------------
// Load libvlc library into memory
// -----------------------------------------------------------------------------
function LoadVLCLibrary(APath: string): integer;
begin
  Result := LoadLibrary(PWideChar(APath + '\libvlccore.dll'));
  Result := LoadLibrary(PWideChar(APath + '\libvlc.dll'));
end;

// -----------------------------------------------------------------------------
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;
begin
  addr := GetProcAddress(handle, PWideChar(procName));
  if Assigned(addr) then Result := 0
  else begin
    if Assigned(failedList) then failedList.Add(procName);
    Result := -1;
  end;
end;
// -----------------------------------------------------------------------------
// Get address of libvlc functions
// -----------------------------------------------------------------------------
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;
begin
  GetAProcAddress(vlcHandle, @libvlc_new, 'libvlc_new', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, 'libvlc_media_new_location', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, 'libvlc_media_player_new_from_media', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_release, 'libvlc_media_release', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, 'libvlc_media_player_set_hwnd', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, 'libvlc_media_player_play', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, 'libvlc_media_player_stop', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, 'libvlc_media_player_release', failedList);
  GetAProcAddress(vlcHandle, @libvlc_release, 'libvlc_release', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, 'libvlc_media_player_is_playing', failedList);
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, 'libvlc_media_new_path', failedList);
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed
  Result := failedList.Count = 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
var sL: TStringList;
begin
  // load vlc library
  vlclib := LoadVLCLibrary(GetVLCLibPath());
  if vlclib = 0 then begin
    Showmessage('Load vlc library failed');
    Exit;
  end;
  // sL will contains list of functions fail to load
  sL := TStringList.Create;
  if not LoadVLCFunctions(vlclib, sL) then begin
    Showmessage('Some functions failed to load : ' + #13#10 + sL.Text);
    FreeLibrary(vlclib);
    sL.Free;
    Exit;
  end;
  sL.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  // create new vlc instance
  vlcInstance := libvlc_new(0, nil);
  // create new vlc media from file
  //vlcMedia := libvlc_media_new_path(vlcInstance, 'e:\udp\239.10.10.9.ts');

  // if you want to play from network, use libvlc_media_new_location instead
   vlcMedia := libvlc_media_new_location(vlcInstance, 'http://login:heslo@server/c0b6b7979fe4ce9d3ab29f?title=T18');

  // create new vlc media player
  vlcMediaPlayer := libvlc_media_player_new_from_media(vlcMedia);

  // now no need the vlc media, free it
  libvlc_media_release(vlcMedia);

  // play video in a TPanel, if not call this routine, vlc media will open a new window
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));

  // play media
  libvlc_media_player_play(vlcMediaPlayer);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if not Assigned(vlcMediaPlayer) then begin
    Showmessage('Not playing');
    Exit;
  end;
  // stop vlc media player
  libvlc_media_player_stop(vlcMediaPlayer);
  // and wait until it completely stops
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin
    Sleep(100);
  end;
  // release vlc media player
  libvlc_media_player_release(vlcMediaPlayer);
  vlcMediaPlayer := nil;

  // release vlc instance
  libvlc_release(vlcInstance);
end;


end.

Kód: [Vybrat]
[Error] Unit1.pas(61): Incompatible types: 'WideChar' and 'Char'
[Warning] Unit1.pas(79): Suspicious typecast of String to PWideChar
[Warning] Unit1.pas(80): Suspicious typecast of String to PWideChar
[Warning] Unit1.pas(86): Suspicious typecast of String to PWideChar
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
14
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od Stanislav Hruška kdy 16-06-2018, 21:52:32 »
S pravidelnou údržbou DB do budúcnosti počítam.
Na základe diskusie dávam prednosť trvalým tabuľkám. Nie je problém ich udržať prázdne. DB som si už upravil. Ešte mám podlžnosti v kóde. Aj zajtra je deň.
15
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od Delfin kdy 16-06-2018, 21:24:11 »
Ja som k tým GTT pristúpil preto, aby som sa vyhol viacnásobnému použitiu subselect-ov. Poniektoré sú zložitejšie.

Vyuziti GTT pro takove pripady je v poradku. Jen je treba se smirit s tim ze jejich obsah neni k videni z jinych aplikaci nez kde se s nimi pracuje (jako napr. DB manager). Porad se vsak da z dane aplikace pred jejich vyprazdnenim (zpusobene ukoncenim transakce nebo spojeni) obsah ziskat.
16
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od pf1957 kdy 16-06-2018, 21:22:35 »
Podľa mňa GTT majú ešte jednu výhodu. Ich údaje sú uložené len v pamäti a tak nerozbíjajú DB. To sa o trvalých tabuľkách tvrdiť nedá. Ak sa mýlim, tak ma opravte.
To nevim, jak jsi k tomu dospel. I kdyz FB je u nas pod tlakem zakazniku na ustupu, tak jsem se schvalne podival, co o tom pise Helen Borrie ve FireBird book, kdyz uz ho mam: "...GTT je alokovana ve vlastnich "soukromych" strankach, ktere maji shodny format jako bezne tabulky a ktere se po commitu uvolni...". Takze me z toho plyne:
a) neni pravda, ze jsou jen v pameti
b) jejich alokace muze zpusobovat fragmentaci stranek,
c) pravidelnou udrzbu DB bys mel provadet bud jak bud
17
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od Stanislav Hruška kdy 16-06-2018, 21:09:43 »
Ja som k tým GTT pristúpil preto, aby som sa vyhol viacnásobnému použitiu subselect-ov. Poniektoré sú zložitejšie. Ja sa stále snažím šetriť systémové prostriedky. Aj keď sa tomu skoro každý čuduje. Ja som už taký skúpy od prírody.
18
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od Stanislav Hruška kdy 16-06-2018, 20:57:48 »
Jsem za 2 databaze. Ale s fixnimi sadami testovacich dat (jen pro vyvoj a testovani). Urcite bych se nesnazil delat klon produkcni jen proto abych mohl videt mezivysledky vypoctu.

Cile by se dalo s uvedenym objemem dosahnout nejspis i jinak. Nemam ted moc predstavu zda se tu bavime o DBMS procedurach nebo zda je kod v Delphi aplikaci, nicmene v obou pripadech by se dalo jit primo cestou GTT jen si bud pred koncem vypoctu (vyprazdnenim te GTT tabulky) volitelne vratit data jako (sadu) resultset(u) nebo naplnit perzistentni tabulku(y).
Čo sa týka testovania, tak 2 DB budem mať. Potrebujem v budúcnosti ladiť výkon a to sa s ostrými údajmi nedá. Kto by tam nahadzoval do jednej tabuľky niekoľko stotisíc záznamov. Pre zaistenie funkčnosti app. a správnosti výpočtov ich tam je len pár. A pre ladenie výkonu mi úplne postačia náhodné údaje.
Procedúry, view ani nič podobné nepoužívam. Všetko mám v Delphi. Jedine ak ma donúti situácia. Tie GTT by som zvládol, ale z diskusie vyplynulo, že by to bola zbytočná komplikácia.
Podľa mňa GTT majú ešte jednu výhodu. Ich údaje sú uložené len v pamäti a tak nerozbíjajú DB. To sa o trvalých tabuľkách tvrdiť nedá. Ak sa mýlim, tak ma opravte.
19
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od Delfin kdy 16-06-2018, 20:35:37 »
Jsem za 2 databaze. Ale s fixnimi sadami testovacich dat (jen pro vyvoj a testovani). Urcite bych se nesnazil delat klon produkcni jen proto abych mohl videt mezivysledky vypoctu.

Cile by se dalo s uvedenym objemem dat dosahnout nejspis i jinak. Nemam ted moc predstavu zda se tu bavime o DBMS procedurach nebo zda je kod v Delphi aplikaci, nicmene v obou pripadech by se dalo jit primo cestou GTT; jen si pred vyprazdnenim te GTT tabulky volitelne vratit data jako (sadu) resultset(u) nebo naplnit perzistentni tabulku(y).
20
Obecné / Re:Debbug - GTT voči RunTime persistent table
« Poslední příspěvek od Stanislav Hruška kdy 16-06-2018, 20:26:27 »
Citace
Ale prednost bych dal temer cemukoli pred udrzbou 2 ruznych DB
To už ste dvaja. Dám si povedať.
Citace
Pro perzistentni tabulku s konkurencnim pristupem by bylo treba jeste pridat sloupec ktery by zaznamy pro pristupujici rozlisil.
To nie je problém. Stačí sa vrátiť k stavu z dnešného rána ;D ;D ;D  A to som celkom tvrdo makal :o  Aj takým spôsobom sa človek učí.
Akurát sa zbavím indexov, prepojení tabuliek pomocou foreign key. Bude tam málo záznamov. Rádovo stovky, takže aj tak by sa neuplatnili.
Stran: 1 [2] 3 4 ... 10