2010-11-24 24 views
6

Garip bir sorunla karşı karşıyayım. Uygulamam filmleri belirli konumlardan oynatıyor, bu yüzden milisaniye cinsinden belirtilen bir pozisyon bile benim için önemli. Medya öğesine bir konum atarım ancak yanlış çerçeveyi gösterir. Medya oynatıcısının neden verdiğim pozisyondan oynadığını bilmiyorum.Silverlight medya oynatıcı pozisyon sorunu

İşte
TimeSpan oTimeSpan = TimeSpan.FromMilliseconds(16800200); // This shows 04:40:00.2000000 

MediaPlayer.Position = oTimeSpan;  // But after assigning, value is 04:40:00.1990000 

önce ve atama sonrasında bir ekran olduğunu: Burada

örnek kod alt text

alt text

herkes burada yanlış ne yapıyorum söyleyebilir misiniz?

+0

Yanlış çerçevenin gösterildiğinden eminsiniz, 200 ms'de bir çerçeve ve 199 ms'de bir çerçeve var mı? – AnthonyWJones

+0

aslında 04: 40: 00.2000000'ün 04: 40: 00.1990000'e nasıl dönüştürüldüğüne dair daha kaygılıyım? – Singleton

+0

Bu, aynı zamanda, sadece bir çerçeve başlangıcına konumlandırılabilen oynatma için kullanılan belirli kodek nedeniyle de olabilir. Bazı çalışmalarda yapıyorum ki sadece bir Anahtar Çerçeveye (ki benim durumumda konumlandırmanın bir saniyeliğine kadar kapalı olmasına neden olan) bir kodek var. Aracımın geri kalanının oyuncuların nereye gittiğimi söylediklerine, hatta nereye gitmek istediğimi söyledikten sonra tepki göstererek hallediyorum. – Duane

cevap

1

Zaman çizelgesi, mülkleri ints olarak göstermesine rağmen, dahili olarak kayan nokta değeri kullandığını sanıyorum. Bu gibi konular kayan nokta değerlerinin depolanmasından kaynaklanır.

TimeSpan.Equals(MediaPlayer.Position, oTimeSpan)'dan ne aldığınızı kontrol etmeyi denediniz mi? Bunun eşit olduklarını gösterdiğinden şüpheleniyorum.

+0

Bir Int64'te keneler olarak saklanır ve gerektiği şekilde/konumuna dönüştürülür. – Duane

3

Bu durumda kesirli milisaniye farkı konusunda endişeleriniz varsa da, bu videonun yalnızca her 33 milisaniye kadar bir kareye sahip olacağını hatırlamanız gerekir (standart NTSC 29.97 FPS kullanılarak). Yani, adli seviye analizini yapmadığınız sürece (bu durumda MediaPlayer doğru araç değildir), ihtiyacınız olandan daha doğrudur.

Bir TimeSpan dahili olarak Int64 kullanıyor ve bu nedenle herhangi bir yuvarlama sorunu olmaması gerektiğinden, benim tahminim MediaPlayer'ın mevcut en yakın video karesine yapışmasıdır.

+0

Bu benim de değerlendirmemdi, Video Oynatıcının özelliği geçerli kare için zaman imzasını gösteriyor, buna mutlaka girdiğiniz zaman dilimi ile aynı olmayacaktır, çünkü başlangıçta bir çerçeve olmayabilir. Tam milisaniyede. – EtherDragon