Avatar billede borrisholt Novice
31. maj 2001 - 12:32 Der er 10 kommentarer og
1 løsning

MPEG afsipller.

http://www.eksperten.dk/spm/77458 om TDCaviPlayer minder mig om jeg lige skal have oprettet et spørgsmål :

Jeg skal bruge onoget kode til afspilling af en MPEG video, eller brud stykker af den, målt i tid. Det skal bruges til noget Tegn Til Tale.

Jeg læser det følgende fra en fil :

abe
00:02:00:05
00:02:03:03
d

de betydet at hvis Jeg skal vise tegnet for abe skal jeg afspille min MPEG film fra 2 minutter og 00 sekunder og 5 hunderede dele inde i filmen og til lige godt 3 sekunder frem .....

Der må gerne bruges DIRECT X.

Jeg vil gerne have hjælp til MPEG delen.


Jens B
Avatar billede martinlind Nybegynder
31. maj 2001 - 12:41 #1
Hej JB, er du ved at lave et undervisnings program ?

Kan Delphi\'s mediaplayer ikke finde ud af MPeg ?

/Martin
Avatar billede borrisholt Novice
31. maj 2001 - 12:52 #2
ved det ikke har ikke prøver ...
Avatar billede hlj Nybegynder
31. maj 2001 - 13:02 #3
Jeg har rimelige gode erfaringer med TMediaPlayer.

Lidt fra Delphi hjælpen:

Specifies the position within the currently loaded medium from which to begin playing or recording.

property StartPos: Longint;

Description

StartPos is specified using the current time format, which is specified in the TimeFormat property.

The StartPos property affects only the next Play or StartRecording method called after setting StartPos. Reset must be set to StartPos to affect any subsequent calls to Play or StartRecording.

StartPos does not affect the current position of the medium (specified in the Position property) until the next Play or StartRecording method is called.

viser at man kan specifisere starttidspunkt og sluttidspunkt i den aktuelle fil.

Så er det bare med at få sat TimeFormat rigtig.
Avatar billede borrisholt Novice
31. maj 2001 - 13:05 #4
mit problem er tids nød. Jeg har ikke lige tid til at kigge på det ..... Men hvis en af ejg lige kan komme med noget kode der passer lige ind så er der points at hente.

Jens B
Avatar billede borrisholt Novice
31. maj 2001 - 16:31 #5
martin >> Det er en undervisnings program. Til døve. Det er mit personlige lille velgørhends projekt. Jeg har nogle relative faste rammer at gøre det under så det er ikke så svært. Men på den anden side så har jeg heller ikke så meget tid.

Hvis der var nogen der lige gad at vide mig hvordan jeg afspiller det ønskede intervalg af en MPEG fil så ville jeg blive glad. Og dem der senere får glæde af programmet også ....

Jens B
Avatar billede martinlind Nybegynder
31. maj 2001 - 16:49 #6
Ok.

Jeg er selv rimelig hængt op, men er det ikke bare at sætte property\'en og derefter startpos og play, det kunne jeg da godt forestille mig.
Avatar billede kamikaze Nybegynder
07. juni 2001 - 13:34 #7
Kan MediaPlayeren afspille MPEG????? Det mener jeg ikke den umiddelbart kan.
Avatar billede borrisholt Novice
07. juni 2001 - 13:36 #8
kamikaze >> Det er ikke noget problem i Delphi 5 i hvertfald. Mit problem er at få den startet og stoppet det rigtige sted ... Resten får jeg af Delphi 5 .....

Hvis du kan få den startet og stoppet det rigtige sted, så vil jeg være glad .....

Jens B
Avatar billede borrisholt Novice
07. juni 2001 - 13:41 #9
indtil videre har jeg prøvet det følgende kode. og det virker ikke, men jeg tror det er lidt der hen af :

Uses
  MMSystem;
procedure TForm1.FormCreate(Sender: TObject);
begin
  MediaPlayer1.FileName := \'E:\\FULLDEF.MPG\';
  MediaPlayer1.Open;
  MediaPlayer1.TimeFormat := tfMilliseconds;
end;


procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;  var DoDefault: Boolean);
var
  h, m,s, hund : integer;
  start, stop : String;
  f : real;
begin
  DoDefault := false;

  Start := \'00:02:00:05\';
  Stop  := \'00:02:03:03\';

  case Button of
  btPlay :
  begin
    h := StrToInt(copy(Start,1,2));
    m := StrToInt(copy(Start,4,2));
    s := StrToInt(copy(Start,7,2));
    hund := StrToInt(copy(Start,10,2));

    MediaPlayer1.StartPos := MCI_MAKE_HMS(h,m,s);

    h := StrToInt(copy(Stop,1,2));
    m := StrToInt(copy(Stop,4,2));
    s := StrToInt(copy(Stop,7,2));
    hund := StrToInt(copy(Stop,10,2));

    MediaPlayer1.EndPos := MCI_MAKE_HMS(h,m,s);

    Caption := Format(\'Start %d, Stop %d\', [MediaPlayer1.StartPos, MediaPlayer1.EndPos]);

    MediaPlayer1.Play;
  end;
  btPause:
  begin
    MediaPlayer1.Pause;
  end;
  btStop:
  begin
    MediaPlayer1.Stop;
  end;
end;
end;


Jens B
Avatar billede borrisholt Novice
08. juni 2001 - 16:09 #10
Med stor hjælp fra snowball har jeg fundet ud af det skal gøres således :

procedure TForm1.FormCreate(Sender: TObject);
begin
  MediaPlayer1.FileName := \'E:\\FULLDEF.MPG\';
  MediaPlayer1.Open;
  MediaPlayer1.TimeFormat := tfMilliseconds;
end;


procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
var
  h, m,s, hund : integer;
  start, stop : String;
begin
  DoDefault := false;

  Start := \'01:04:36:03\';
  Stop  := \'01:04:38:12\';

  case Button of
  btPlay :
  begin
    a := (2 * 60 * 1000);
    h := StrToInt(copy(Start,1,2));
    m := StrToInt(copy(Start,4,2));
    s := StrToInt(copy(Start,7,2));
    hund := StrToInt(copy(Start,10,2));

    MediaPlayer1.StartPos := (h * 60 * 60 * 1000);
    MediaPlayer1.StartPos := MediaPlayer1.StartPos + (m * 60 * 1000);
    MediaPlayer1.StartPos := MediaPlayer1.StartPos + (s * 1000);
    MediaPlayer1.StartPos := MediaPlayer1.StartPos + hund;

    h := StrToInt(copy(Stop,1,2));
    m := StrToInt(copy(Stop,4,2));
    s := StrToInt(copy(Stop,7,2));
    hund := StrToInt(copy(Stop,10,2));

    MediaPlayer1.EndPos := (h * 60 * 60 * 1000);
    MediaPlayer1.EndPos := MediaPlayer1.EndPos + (m * 60 * 1000);
    MediaPlayer1.EndPos := MediaPlayer1.EndPos + (s * 1000);
    MediaPlayer1.EndPos := MediaPlayer1.EndPos + hund;

    Caption := Format(\'Start %d, Stop %d\', [MediaPlayer1.StartPos, MediaPlayer1.EndPos]);

    MediaPlayer1.Play;
  end;

  btPause:
  begin
    MediaPlayer1.Pause;
  end;

  btStop:
  begin
    MediaPlayer1.Stop;
  end;
end;
end;

Så når snowball svarer er pointsene hans ....

Jens B
Avatar billede snowball Novice
08. juni 2001 - 20:48 #11
Så kan jeg da lige smide hele koden som den ser ud nu :)

procedure TForm1.Button1Click(Sender: TObject);
var
  TheLength: LongInt;
begin
  if OpenDialog1.Execute then begin
    Label3.Caption := OpenDialog1.Filename;
    with Mediaplayer1 do begin
      FileName := OpenDialog1.Filename;
      Display := Panel1;
      Open;
      Timeformat := tfMilliseconds;
      TheLength := MediaPlayer1.Length;
//      StartPos := 10000;
//      EndPos := 10100;
//      thelength := thelength div 1000 div 60; //længden i min.
      Label1.caption := IntToStr(thelength);
      DisplayRect := Panel1.Clientrect;
//      Play;
    end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label2.Caption := IntToStr(Mediaplayer1.Position);
end;

procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
  var DoDefault: Boolean);
var
  h, m,s, hund : integer;
  start, stop : String;
  f : real;
begin
  DoDefault := false;

  Start := \'00:00:04:05\';
  Stop  := \'00:00:09:03\';

  case Button of
  btPlay :
  begin
    h := StrToInt(copy(Start,1,2)) * 60 * 60 * 1000;
    m := StrToInt(copy(Start,4,2)) * 60 * 1000;
    s := StrToInt(copy(Start,7,2)) * 1000;
    hund := StrToInt(copy(Start,10,2));

    with MediaPlayer1 do begin
      StartPos := 0;
      StartPos := h + m + s + hund;
    end;

    h := StrToInt(copy(Stop,1,2)) * 60 * 60 * 1000;
    m := StrToInt(copy(Stop,4,2)) * 60 * 1000;
    s := StrToInt(copy(Stop,7,2)) * 1000;
    hund := StrToInt(copy(Stop,10,2));

    with MediaPlayer1 do begin
      EndPos := 0;
      EndPos := h + m + s + hund;
    end;

    Caption := Format(\'Start %d, Stop %d\', [MediaPlayer1.StartPos, MediaPlayer1.EndPos]);

    MediaPlayer1.Play;
  end;

  btPause:
  begin
    MediaPlayer1.Pause;
  end;

  btStop:
  begin
    MediaPlayer1.Stop;
  end;
end;
end;

Hele eksemplet kan hentes fra http://home1.inet.tele.dk/j-cgeert/jb.zip

Snowball
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester