Video frame sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Video frame sorunu

Mesaj gönderen brs »

Selam,
Function ile WindowsMediaPlayer okuduğu video nun saat, dakika, ve kaçıncı saniyede olduğunu alabiliyorum fakat aynı zamanda da kaçıncı frame de olduğunu Label nasıl ala birim?

Kod: Tümünü seç

Function SureHesapla(strFrameRate: String; dblDuration: Double): String;
var
  FPS: Double;
  Sa, Dk, Sn, Fr: Integer;
begin
  Try
    Sa := 0;
    Dk := 0;
    Sn := 0;
    FPS := StrToFloat(strFrameRate) / 1000;
    Fr := Trunc(dblDuration * FPS); // Toplam Kare Sayısı
    if Fr > FPS then
    begin
      Sn := Trunc(Fr / FPS); // Tam bölünen kısmını aldık...
      Fr := Fr - Trunc(Sn * FPS);
    end;
    if Sn > 60 then
    begin
      Dk := Sn div 60; // Tam bölünen kısmını aldık...
      Sn := Sn - (Dk * 60);
    end;
    if Dk > 60 then
    begin
      Sa := Dk div 60; // Tam bölünen kısmını aldık...
      Dk := Dk - (Sa * 60);
    end;
    Result := Format('%.2d:%.2d:%.2d', [Sa, Dk, Sn, Trunc(Fr)]);
  Except
  End;
end;

procedure TForm1.frameTimer(Sender: TObject);
begin
Label1.Caption:=(SureHesapla(WindowsMediaPlayer1.CurrentMedia.GetItemInfo('FrameRate'), WindowsMediaPlayer1.CurrentMedia.Duration));
end
;
En son brs tarafından 01 Ağu 2015 07:38 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Video frame sorunu

Mesaj gönderen mrmarman »

- Aynı fonksiyonu yine kullanabilirsin.

- Normalde tüm süreyi ilgili formatta almak için kullandığını görüyorum. Ayrıca WindowsMediaPlayer1.controls.CurrentPosition değerini de bir TTimer koyup alır ve aynı fonksiyondan geçirirsen güncel süreyi de aynı formatta bir label'a yansıtabilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Video frame sorunu

Mesaj gönderen brs »

mrmarman yazdı:- Aynı fonksiyonu yine kullanabilirsin.

- Normalde tüm süreyi ilgili formatta almak için kullandığını görüyorum. Ayrıca WindowsMediaPlayer1.controls.CurrentPosition değerini de bir TTimer koyup alır ve aynı fonksiyondan geçirirsen güncel süreyi de aynı formatta bir label'a yansıtabilirsin.

Çıkamadım İşin içinden hocam...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Video frame sorunu

Mesaj gönderen mrmarman »

Resim

Kod: Tümünü seç

Function SureHesapla(strFrameRate: String; dblDuration: Double): String;
var
  FPS: Double;
  Sa, Dk, Sn, Fr: Integer;
begin
  Try
    Sa  := 0;
    Dk  := 0;
    Sn  := 0;
    FPS := StrToFloat(strFrameRate) / 1000;
    Fr  := Trunc(dblDuration * FPS); // Toplam Kare Sayısı
    if Fr > FPS then
    begin
      Sn := Trunc(Fr / FPS); // Tam bölünen kısmını aldık...
      Fr := Fr - Trunc(Sn * FPS);
    end;
    if Sn > 60 then
    begin
      Dk := Sn div 60; // Tam bölünen kısmını aldık...
      Sn := Sn - (Dk * 60);
    end;
    if Dk > 60 then
    begin
      Sa := Dk div 60; // Tam bölünen kısmını aldık...
      Dk := Dk - (Sa * 60);
    end;
    Result := Format('%.2d:%.2d:%.2d,%.2d', [Sa, Dk, Sn, Trunc(Fr)]);
  Except
  End;
end;

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 25;
  Timer1.Enabled  := True;
end;

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
Var
  strToplamSure, strPozisyon : String;
begin
  Caption := WindowsMediaPlayer1.status;
  if WindowsMediaPlayer1.playState = 3 then // play durumunda demektir...
  begin
    strToplamSure := SureHesapla( WindowsMediaPlayer1.CurrentMedia.GetItemInfo('FrameRate'), WindowsMediaPlayer1.CurrentMedia.Duration );
    strPozisyon   := SureHesapla( WindowsMediaPlayer1.CurrentMedia.GetItemInfo('FrameRate'), WindowsMediaPlayer1.controls.currentPosition );
    Label1.Caption := Format(' %s / %s', [ strPozisyon, strToplamSure ]);
  end;
end;
Dosya ekleri
WindowsMediaPlayer_Ornegi.rar
Örnek Proje EXE'si
(215.98 KiB) 82 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Video frame sorunu

Mesaj gönderen brs »

Teşekkür ederim hocam eline saplık. Fakat yaklaşık 7 gb bir video oynatmak istediğimde WindowsMediaPlayer donuk kare olarak ilerliyor neden olabilir acaba?
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Video frame sorunu

Mesaj gönderen mrmarman »

dışarıda da yine Windows Media Player ile dene istersen
(1) Codec sorunu
(2) Dizüstü ise pilde çalışıyorken gpu hızı düşürülmüş olabilir.
(3) Bilgisayar performansı ilgili videonun bitrate'ini kaldırmıyor olabilir
(4) Aynı anda yürüyen başka ağır bir iş vardır.
(5) Codec bağlantılı playerin kullandığı YU1, YUY, YUV, RGB vb. birincil renk çözümlemedeki yanlış tercihi.
(6) Benim verdiğim exe ile denedin mi ? Bir de onda dene.

bir sürü parametre var.
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Video frame sorunu

Mesaj gönderen brs »

mrmarman yazdı:dışarıda da yine Windows Media Player ile dene istersen
(1) Codec sorunu
(2) Dizüstü ise pilde çalışıyorken gpu hızı düşürülmüş olabilir.
(3) Bilgisayar performansı ilgili videonun bitrate'ini kaldırmıyor olabilir
(4) Aynı anda yürüyen başka ağır bir iş vardır.
(5) Codec bağlantılı playerin kullandığı YU1, YUY, YUV, RGB vb. birincil renk çözümlemedeki yanlış tercihi.
(6) Benim verdiğim exe ile denedin mi ? Bir de onda dene.

bir sürü parametre var.

Hocam tek tek kontrol ettim hepsi tamam, ama sorun halen devam ediyor aynı videoyu vlc ile çalıştırdığımda sorun çıkmıyor
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Video frame sorunu

Mesaj gönderen mrmarman »

Konu sohbete dönüşüyor ama yazayım.

Elma ile armutu karşılaştırmak doğru olmaz. VLC player codec kurulu değilken de kendi altyapısını kullanabilen bir programdır.

ActiveX denetimi ile erişim yaptığın player WindowsMediaPlayer ve buradaki gösterim hızı karşılaştırması yine aynı sınıftan bir gösterici ile yapılırsa anlamlıdır.

7 gb demek ya yüksek bitrate veri içerdiğine ya da süre olarak 5-6 saatlik bir video olduğuna delalet. Bitrate sorunu olduğunu değerlendiriyorum. Çözümü ;daha hızlı işlem yapan bir codec paketidir. Hatta donanım hızlandırıcı destekli olanlardan.
Resim
Resim ....Resim
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video frame sorunu

Mesaj gönderen Lord_Ares »

Merhaba doğruluğunu test etmeden emin olamam ama fikir olarak aklıma gelen sebepleri söylemek istedim. Belki çözüm arayışınızda işinize yarayabilir.

1) saniyedeki Fps değeri belli olduğuna göre küçük bir bölme işlemi ile kaçıncı karede olduğunu bulabiliriz sanırım. ( sadece fikir )
2) Donma sorunu içinde yanılmıyorsam vlc, gomplayer gibi programlar ram buffer temizleme olayını kullanıyor. İzlenen her kare belli bir süre sonra ramdan atılıyor.
Sanırım sizin işleminizde bu olay gerçekleşmediği için buffer taşması oluyor. Veya marman hocamın dedi sebepler gibi codec, flashplayer gibi eklentileri düzgün kullanamamasından gerçekleşiyor da olabilir.

iyi çalışmalar
Cevapla