Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




ZeePlayer

Informatica


ZeePlayer

Ver. 1.2



ZeePlayer, versiunea 1.2 se vrea a fi si poate deveni cel mai mic si mai simplu video player existent. Cu o ,,greutate'' de numai 1,14MB, ZeePlayer poate concura cu succes player-ele existente pe piata, datorita interfetei sale usor de folosit, precum si datorita simplitatii sale.

Geneza

Versiunea ZeePlayer-ului de fata a fost construita si dezvoltata cu ajutorul limbajului de programare Delphi 6.

Crearea aplicatiei

În scrierea unui program de redare video AVI, asa cum este aplicatia ZeePlayer, sunt implicati o multime de factori. Rezultatul final este afectat de versiunea sistemului de operare, dispozitivele hardware de afisare, driverele video si formatul fisierelor AVI. În orice caz, componenta MediaPlayer pare a fi foarte robusta - am folosit programul Ze 20320o142u ePlayer pentru redarea unor clipuri AVI deteriorate, care nu puteau fi redate prin nici un alt mijloc.

Pe ecran componenta MediaPlayer este reprezentata doar de o bara cu butoane pe care utilizatorii pot executa clic pentru operarea obiectului, ca si când ar folosi butoanele unui VCR.

Figura de mai sus prezinta un obiect MediaPlayer nemodificat, inserat într-un formular. Cele noua butoane, de la stânga la dreapta, sunt: Play, Pause, Stop, Next, Previous, Step, Back, Record si Eject. Trei proprietati afecteaza aspectul butoanelor. Am folosit proprietatea ColoredButtons ca sa afisam butoanele colorate, cealalta varianta permitându-ne sa le afisam monocromatic, alb-negru. Am folosit proprietatea EnabledButtons ca sa activam sau sa dezactivam butoanele individuale (butoanele dezactivate sunt afisate estompat si nu pot fi selectate). Am folosit proprietatea VisibleButtons ca sa indicam butoanele care trebuie afisate. Aceasta proprietate este utila pentru ascunderea butoanelor nedorite - aplicatia ZeePlayer nu afiseaza butonul Record, deoarece acesta nu are nici o utilitate în program.

Pentru redarea unui clip AVI am folosit o caseta de dialog - OpenDialog1. ZeePlayer demonstreaza programarea acestei actiuni în procedura de tratare a evenimentelor ButtonClick, care este apelata atunci când executati clic pe butonul Deschide fisier audio:

Apelarea metodei execute determina afisarea ferestrei OpenDialog. Functia returneaza valoarea True daca utilizatorul a selectat un nume de fisier, caz în care sunt executate instructiunile dintre cuvintele cheie begin si end. Pentru a indica ce fisier este rulat, prima instructiune stocheaza în titlul ferestrei numele fisierului, obtinut din obiectul Opendialog1. Acelasi nume este stocat si în proprietatea FileName a obiectului MediaPlayer, pregatind fisierul pentru vizualizare. Pentru a indica faptul ca dorim notificari privind evenimentele, programul atribuie valoarea True proprietatii Notify.

Dupa aceste doua etape, metoda Open încarca fisierul în memorie, dar înca nu începe redarea. Pentru a indica numarul de cadre cu care avanseaza butonul pas cu pas (Step), proprietatii Frames îi este atribuita valoarea 1 ( în mod normal, Frames are ca valoare o zecime din numarul de cadre al secventei video, dar este de preferat avansul cadru cu cadru).

Pentru a începe redarea clipului AVI, procedura de tratare a evenimentelor apeleaza metoda Play pentru obiectul MediaPlayer1. Este suficient sa o apelati pentru a rula clipul video. Daca programul nu apeleaza metoda Play, utilizatorul trebuie sa execute clic pe butonul Play ca sa înceapa redarea clipului AVI.

Unul dintre aspectele mai complicate ale folosirii componentei MediaPlayer este raspunsul la notificarile media. Atribuind proprietatii Notify valoarea True, am semnalat ca dorim sa primim aceste notificari, care sunt generate pentru diferite evenimente, cum ar fi pornirea si oprirea unui clip video. Pentru a raspunde la aceste notificari, am atribuit valoarea True proprietatii Notify ( acest lucru s-a facut printr-o instructiune din program, ca în fragmentul de cod de mai sus ) si am creat o procedura de tratare a evenimentului OnNotify pentru obiectul MediaPlayer. Iata cum arata procedura de tratare a evenimentului OnNotify în aplicatia ZeePlayer:

Rolul acestui cod este sa reia de la început redarea clipului AVI curent daca utilizatorul a validat caseta Auto replay. Deoarece aceeasi procedura primeste numeroase modificari, primul pas este sa verifice daca clipul a fost oprit, caz în care redarea porneste de la început. Daca nu este validata caseta Auto replay, procedura nu face nimic si secventa video se opreste la sfârsit ( sau acolo unde se afla atunci când utilizatorul a executat clic pe butonul Stop ).

O problema a notificarilor este faptul ca redarea clipului este reluata de la început, în loc sa se opreasca imediat, atunci când utilizatorul executa clic pe butonul Stop. În forma de mai sus, OnNotify repeta clipul curent daca este selectata caseta de validare Auto replay - acest fapt determinând repetarea clipului chiar dupa ce acesta a fost oprit de utilizator. Pentru rezolvarea acestei probleme, o procedura de tratare a evenimentului OnClick pentru obiectul MediaPlayer verifica daca utilizatorul a apasat butonul Stop. Iata procedura completa din aplicatia ZeePlayer.

Un alt parametru primit de procedura de tratare a evenimentului OnClick al obiectului MediaPalyer, DoDefault, indica daca programul sau componenta vor executa actiuni standard. Daca DoDefault este True (valoarea prestabilita), componenta executa codul standard pentru toate butoanele. De exemplu, daca s-a executat clic pe butonul Play, MediaPlayer apeleaza propria metoda Play.

Pentru a nu fi executate metode proprii ale componentei, am atribuit valoarea false indicatorului DoDefault în procedura de tratare a evenimentului OnClick al obiectului MediaPlayer. În acest fel, componenta stie ca am executat alte actiuni pentru un anumit buton. De exemplu, pentru redarea cadru cu cadru a unui clip AVI am folosit urmatoarea secventa de cod în procedura de tratare a evenimentului:

If button=btStep then

begin

MediaPlayer1.Frames:=1;

MediaPlayer1.Step;

DoDefault:=false;

end;

Dupa cum se poate observa si de pe pictograma aplicatiei ZeePlayer, aceasta contine, pe lânga componenta MediaPlayer si doua butoane de tip TButton, care se gasesc în paleta de instrumente Standard.

Butonul Deschide fisier audio este un buton caruia i-a fost explicata utilitatea, functionarea lui fiind strâns legata de cea a obiectului OpenDialog;

Proprietatile componentei Media Player

În continuare, sunt prezentate pe scurt câteva proprietati ale componentei Media Player pe care puteti sa le folositi pentru personalizarea obiectelor de acest tip:

AutoEnable - Atribuiti valoarea True acestei proprietati ca sa activati si sa dezactivati butoanele obiectului Media Player în functie de starea dispozitivelor multimedia. De exemplu, atunci când aceasta proprietate are valoarea True, butonul Play este dezactivat daca nu este încarcat nici un fisier. Selectati valoarea False daca doriti ca toate butoanele sa fie activate permanent (acest lucru poate parea fara sens, dar mai gânditi-va un moment).

Aplicatia Video Player foloseste aceasta optiune.

AutoOpen - Atribuiti valoarea True acestei proprietati ca sa deschideti automat fisierul specificat prin proprietatea FileName. Daca Auto Open are valoarea False, trebuie sa apelati metoda Open pentru deschiderea fisierului.

AutoRewind - Atribuiti valoarea True acestei proprietati ca sa treceti la începutul fisierului multimedia dupa terminarea redarii. Apasarea butonului Play repeta redarea de la început.

DeviceType - Folositi aceasta proprietate ca sa specificati tipul dispozitivului sau al fisierului controlat de obiectul MediaPlayer. Valoarea prestabilita, dtAutoSelect, determina tipul dispozitivului si, ca urmare, tipul driverului de dispozitiv folosit, în functie de extensia fisierului, asa cum a fost aceasta înregistrata în Windows. Pentru specificarea unui tip particular de dispozitiv ,puteti sa atribuiti proprietatii DeviceType una dintre valorile : dtAVIVideo, dtCAudio,dtDat, dtDigitalVideo, dtMMovie, dtOther, dtOverlay, dtScaner, dtSequencer, dtVCR, dtVideodisc sau dtWaveAudio.

Display - Atribuiti acestei proprietati numele unei componente de tip fereastra, cum ar fi Panel sau Form. Iesirile obiectului MediaPlayer sunt trimise catre componenta specificata. Totusi, unele tipuri de fisiere media sunt redate întotdeauna într-o fereastra separata . Ca rezultat, proprietatea Display este ignorata pentru mediile Animation, AVI Video (cu sunet), Digital Video, Overlay si VCR.

FileName - Atribuiti acestei proprietati numele fisierului care trebuie deschis. Daca AutoOpen are valoarea True, modificarea proprietatii FileName determina apelarea automata a metodei Open.

Frames - Aceasta proprietate specifica numarul de cadre cu care se avanseaza atunci când utilizatorul executa clic pe butoanele Step sau Back. În mod normal, Frames are o valoare egala cu o zecime din numarul total de cadre continute de fisier. Schimbati aceasta valoare dupa ce apelati metoda Open ca sa modificati numarul de cadre cu care se avanseaza în timpul operatiilor pas cu pas.

Mode - De obicei, examinati aceasta proprietate în procedura de tratare a evenimentului OnNotify al obiectului MediaPlayer (asigurati-va ca ati atribuit proprietatii Notify valoarea True, astfel încât procedura sa primeasca notificari).

Proprietatea Mode poate avea una dintre valorile mpNotReady, mpPlaying, mpRecording, mpSeeking, mpPaused sau mpOpen.

Codul sursa. În continuare am considerat necesara dezvaluirea codului sursa a ZeePlayer-ului, pentru o întelegere mai buna a modului de functionare:

unit Main1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, MPlayer,comctrls, ExtCtrls,jpeg,about, Gauges;

type

TForm1 = class(TForm)

MediaPlayer1: TMediaPlayer;

OpenDialog1: TOpenDialog;

AutoPlayCheckBox: TCheckBox;

TimeLabel: TLabel;

Timer1: TTimer;

Button1: TButton;

Image1: TImage;

ListBox1: TListBox;

Image2: TImage;

Image3: TImage;

Gauge1: TGauge;

Button2: TButton;

procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean);

procedure AutoPlayCheckBoxClick(Sender: TObject);

procedure MediaPlayer1Notify(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Image3MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure ListBox1DblClick(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

public

end;

var

Form1: TForm1;

implementation

procedure Delay(msecs:integer); //face o pauza

var

FirstTickCount:longint; //nr de msec de cand a pornit numararea

begin

FirstTickCount:=GetTickCount;//GetTickCount returneaza numarul de msec de cand a pornit Win

repeat

Application.ProcessMessages;//obliga aplicatia sa nu ramana blocata

until ((GetTickCount-FirstTickCount) >= Longint(msecs));

end

procedure TForm1.Button2Click(Sender: TObject);

begin

gauge1.Visible:=True; //face vizibila componenta gauge1

if MediaPlayer1.Mode=mpPlaying then begin MediaPlayer1.Stop;MediaPlayer1.Close;end;

with mediaplayer1 do

begin

enabled:=True;

devicetype:=dtAutoSelect;

end

if opendialog1.execute then

begin

form1.Caption:=opendialog1.filename;

mediaplayer1.filename:=opendialog1.filename;

listBox1.Items.add(opendialog1.filename);

listBox1.Items.SaveToFile('c:\playlist.txt');

delay

mediaplayer1.notify:=true;

mediaplayer1.open;

gauge1.MaxValue:=mediaplayer1.Length;

//mediaplayer1.frames:=1;

mediaplayer1.play;

end

end

procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean);

begin

if (button=btstop)or(button=btpause)

then mediaplayer1.Notify:=false

else mediaplayer1.Notify:=true;

If button=btStep then

begin

MediaPlayer1.Frames:=1;

MediaPlayer1.Step;

DoDefault:=false;

end;

end

procedure TForm1.AutoPlayCheckBoxClick(Sender: TObject);

begin

if autoplaycheckbox.checked then

mediaplayer1.Notify:=true;

end

procedure TForm1.MediaPlayer1Notify(Sender: TObject);

begin

if (mediaplayer1.notify)

and(mediaplayer1.mode=mpStopped)and

(autoplaycheckbox.checked) then

begin

mediaplayer1.Rewind;

mediaplayer1.Play;

end;

mediaplayer1.notify:=true;

end

procedure TForm1.Timer1Timer(Sender: TObject);

begin

TimeLabel.Caption:=TimeToStr(Time);

gauge1.Progress:=mediaPlayer1.Position;

end

procedure TForm1.Button1Click(Sender: TObject);

begin

gauge1.visible:=False;

with mediaplayer1 do

begin

enabled:=True;

devicetype:=dtcdaudio;

filename:=' ;

open;

end

form1.Caption:='CD player';

end

procedure TForm1.FormCreate(Sender: TObject);

begin

delay

if not(FileExists('c:\playlist.txt')) then

listBox1.Items.SaveToFile('c:\playlist.txt');

listBox1.Items.LoadFromFile('c:\playlist.txt');

end

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if MediaPlayer1.Mode=mpPlaying then MediaPlayer1.Stop;

MediaPlayer1.Close;

end

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if opendialog1.execute then

begin

form1.Caption:=opendialog1.filename;

listBox1.Items.add(opendialog1.filename);

listBox1.Items.SaveToFile('c:\playlist.txt');

end;

end

procedure TForm1.Image3MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if ListBox1.ItemIndex<>-1 then

begin

if MediaPlayer1.FileName=ListBox1.Items.Strings[ListBox1.Itemindex] then

begin

if MediaPlayer1.Mode=mpPlaying then

begin

MediaPlayer1.Stop;

MediaPlayer1.Close;

end

end

ListBox1.Items.Delete(ListBox1.ItemIndex);

end

end

procedure TForm1.ListBox1DblClick(Sender: TObject);

begin

gauge1.visible:=True;

if ListBox1.Itemindex=-1 then exit;

if MediaPlayer1.Mode=mpPlaying then begin MediaPlayer1.Stop;MediaPlayer1.Close;end;

with mediaplayer1 do

begin

enabled:=True;

devicetype:=dtAutoSelect;

end

form1.Caption:=ListBox1.Items.Strings[ListBox1.Itemindex];

mediaplayer1.filename:=ListBox1.Items.Strings[ListBox1.Itemindex];

mediaplayer1.notify:=true;

mediaplayer1.open;

//mediaplayer1.frames:=1;

mediaplayer1.play;

gauge1.MaxValue:=mediaplayer1.Length;

end

end


Document Info


Accesari: 1666
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )