ورود

View Full Version : آموزش: MediaPlayer و Trackbar



saeed6162
پنج شنبه 20 خرداد 1389, 09:18 صبح
سلام به دوستان عزیز
من تو پروژم نیاز داشتم تا از مدیاپلیر استفاده کنم
ولی برای همگام سازی trackbar و mediaplayer ، برای حرکت در طول video و کنترل اونمشکلات زیادی برام پیش اومد
بعد از جستجوهای زیاد به قطعه کدی رسیدم که مشکلم رو حل کرد.
کل یونیت مربوط به قسمت مدیاپیلیر رو براتون می ذارم که امیدوارم به دردتون بخوره




unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer, ExtCtrls, ComCtrls, Menus, MMSystem;

type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
OpenDialog1: TOpenDialog;
TrackBar1: TTrackBar;
Timer1: TTimer;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Exit1: TMenuItem;
Button5: TButton;
Help1: TMenuItem;
About1: TMenuItem;
Label1: TLabel;
Label2: TLabel;
TrackBar2: TTrackBar;
CheckBox1: TCheckBox;
StaticText1: TStaticText;
Button6: TButton;
Button7: TButton;
Image1: TImage;
Timer2: TTimer;
ListBox1: TListBox;
Button8: TButton;
Button9: TButton;
Button10: TButton;
procedure ListBox1DblClick(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ListBox1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure MediaPlayer1Notify(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
B:TBitmap;
end;

var
Form1: TForm1;
Zvuk: String;
pjesma:string;



implementation

uses Unit2, Unit3;

{$R *.dfm}
type
TGlasnoca = record
Levi, Desni: Word;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.Close;
MediaPlayer1.FileName := Pjesma ;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MediaPlayer1.Pause;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
Stanje: Boolean;
begin
Stanje := CheckBox1.Checked;
CheckBox1.Checked := False;
MediaPlayer1.Stop;
CheckBox1.Checked := Stanje;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if OpenDialog1.Execute then
ListBox1.Items.Add(OpenDialog1.FileName);
end;

procedure TForm1.FormCreate(Sender: TObject);
var a:textfile;
begin
try
listbox1.Items.LoadFromFile('lista.lst');
except
assignfile(a,'c:\lista.lst');
rewrite(a);
closefile(a);
end;
Zvuk := '';
B:=TBitmap.Create;
B.Width:=Image1.Width;
B.Height:=Image1.Height;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
TrackBar1.OnChange := nil;
TrackBar1.Position := MediaPlayer1.Position;
TrackBar1.OnChange := TrackBar1Change;

Label1.Caption:=formatdatetime('dd.mm.yyyy', Date);
Label2.Caption:=formatdatetime('hh.mm.ss', Time);
end;


procedure TForm1.TrackBar1Change(Sender: TObject);

begin
if (MediaPlayer1.Mode = mpPlaying) or
(MediaPlayer1.Mode = mpPaused) then
begin
MediaPlayer1.Position := TrackBar1.Position;
MediaPlayer1.Play;
end;

end;





procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
ListBox1.Items.Add(OpenDialog1.FileName);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
showmessage('Thank you for using my software.Coded by Passwd!!');
close;
end;


procedure TForm1.About1Click(Sender: TObject);
begin
Form2.ShowModal;
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
var
G: TGlasnoca;
begin
G.Levi := TrackBar2.Position;
G.Desni := TrackBar2.Position;
waveOutSetVolume(0, Cardinal(G));

end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if (MediaPlayer1.Mode = mpStopped) and
CheckBox1.Checked then
begin
MediaPlayer1.Rewind;
MediaPlayer1.Play;
end;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Form1.Height:=225;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
Form1.Height:=534;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
B.Canvas.ellipse(Random(B.Width), Random(B.Height),
Random(B.Width), Random(B.Height));
B.Canvas.rectangle(Random(B.Width), Random(B.Height),
Random(B.Width), Random(B.Height));

Image1.Picture.Bitmap := B;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
B.Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
if ListBox1.ItemIndex <> -1 then
pjesma:=ListBox1.Items[ListBox1.ItemIndex];
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
listbox1.Items.SaveToFile('c:\lista.lst');
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
mediaPlayer1.Close;
form3.showmodal;

end;

procedure TForm1.Button9Click(Sender: TObject);
begin
Listbox1.DeleteSelected;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
listbox1.Clear;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
MediaPlayer1.Close;
MediaPlayer1.FileName:=pjesma;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

end.

sholug
شنبه 08 آبان 1389, 16:46 عصر
یک سوال داشتم از دوستانی که در زمینه ملتی مدیا کار کردن

من چند تا فایل دارم که زمانشون درست نیست یعنی با هر پلیری که باز میکنی زمان رو غلط نشون میده مثلا فایلی دارم که طولش 35 دقیقه هست ولی پلیر اون رو 10 دقیقه نشون میده به 10 دقیقه که رسید ادامش رو پخش میکنه در حالی که با آخر فایل رسیده خیلی گشتم تا نرم افزاری برای اصلاح این فایلها پیدا کنم ولی نشد هر کاری هم که به فکرم رسید کردم حل نشد تصمیم گرفتم خودم یه برنامه بنویسم برای این کار مشکل اینجاست که بلد نیستم چطوری میشه هدر فایل رو خوند و دستکاری کرد چون همه اطلاعات فایل تو هدرش هست و من باید اول تعداد فریم های کل فایل رو شمارش کنم و با استفاده از استاندارد این فایل زمان درستش رو محاسبه کنم ولی نمیدونم چطوری به هدر فایل دسترسی پیدا کنم کسی میتونه راهنمایی کنه؟؟؟

مصطفی ساتکی
شنبه 08 آبان 1389, 17:14 عصر
ویرایش شد ، تاپیک رو به حاشیه نبرید !


من باید اول تعداد فریم های کل فایل رو شمارش کنم و با استفاده از استاندارد این فایل زمان درستش رو محاسبه کنم ولی نمیدونم چطوری به هدر فایل دسترسی پیدا کنم کسی میتونه راهنمایی کنه
تعداد کل فریم ها در هدر و همچین fps هم داخل هدر نوشته شده که محل قرار گیری با توجه به codec های مختلف فرق داره با دونستن این 2 مقدار میشه زمان دقیق رو بدست آورد.
در ضمن اطلاعات در مورد فرمت های ویدیویی می تونید به wiki مراجعه کنید.
http://en.wikipedia.org/wiki/List_of_file_formats

sholug
شنبه 08 آبان 1389, 23:19 عصر
تعداد کل فریم ها در هدر و همچین fps هم داخل هدر نوشته شده که محل قرار گیری با توجه به codec های مختلف فرق داره با دونستن این 2 مقدار میشه زمان دقیق رو بدست آورد
ممنون این درسته ولی خب فایلهایی که من میگم احتمال قوی تعداد کل فریمها توش درست نیست که تمامی نرم افزار ها زمان رو درست محاسبه نمیکنن پس من باید تعداد کل فریمها رو خودم با شمردن تو یک کانتر بدست بیارم و تو هدر تغییر بدم

بازم ممنون اگر کس دیگه ای راهی بلده میتونه راهنماییم کنه ممنون میشک

seyed_27
یک شنبه 09 آبان 1389, 22:42 عصر
من چند تا فایل دارم که زمانشون درست نیست یعنی با هر پلیری که باز میکنی زمان رو غلط نشون میده

سلام دوست عزیز من هم همچین مشکلی دارم
مخصوصا در فایلهای Wav و ra ,rm و بعضی dvd ها که بصورت زیادی فشرده شده باشن
من این مشکل رو با convert دوباره اونا با نرم افزار Convertor حل کردم
همین طور که گفتم این مشکل تا جایی که من بررسی کردم در دو صورت پیش میاد:
1- فشردگی بالا
2- درست convert نشدن فایل ها از فرمتی به فرمت دیگه
که در این صورت بعضی از player ها باهاشون مشکل دارن
البته بعضی از Player های دیگه که برای پخش اونا از codec استفاده نمیشه مشکل ندارن که من دو نمونه از اونا رو در تاپیک زیر گذاشتم mplayer , FFVCL
http://barnamenevis.org/forum/showthread.php?t=192164

zahra_no
پنج شنبه 13 آبان 1389, 12:10 عصر
سلام به دوستان عزیز
من تو پروژم نیاز داشتم تا از مدیاپلیر استفاده کنم
ولی برای همگام سازی trackbar و mediaplayer ، برای حرکت در طول video و کنترل اونمشکلات زیادی برام پیش اومد
بعد از جستجوهای زیاد به قطعه کدی رسیدم که مشکلم رو حل کرد.
کل یونیت مربوط به قسمت مدیاپیلیر رو براتون می ذارم که امیدوارم به دردتون بخوره


دوست عزیز کاش به جای اینکه این کدها رو بزاری برنامه رو ضمیمه میکردی
من هم مشکل شما رو داشتم ولی از این کد ها چیزی نفهمیدم
مخصوصا این فایل lista