Проблема с расположением медиаплеера Silverlight

У меня странная проблема. Мое приложение воспроизводит фильмы с определенных позиций, поэтому для меня важна даже позиция, указанная в миллисекундах. Я назначаю позицию мультимедийному элементу, но он показывает неправильный кадр. Я не знаю, почему медиаплеер не играет с той позиции, которую я даю.

Вот пример кода:

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

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

Вот снимок экрана до и после назначения: alt text

alt text

Кто-нибудь может сказать мне, что я здесь делаю не так?


person Singleton    schedule 24.11.2010    source источник
comment
Вы уверены, что отображается неправильный кадр, что есть один кадр на 200 мс, а другой - на 199 мс?   -  person AnthonyWJones    schedule 24.11.2010
comment
на самом деле меня больше беспокоит, как 04: 40: 00.2000000 было преобразовано в 04: 40: 00.1990000 ??   -  person Singleton    schedule 24.11.2010
comment
Это также может быть связано с тем, что конкретный кодек, используемый для воспроизведения, может позиционироваться только до начала кадра. В некоторых работах, которые я выполняю, у меня есть кодек, который может позиционироваться только по ключевому кадру (что в моем случае приводит к отключению позиционирования на целую секунду). Я справляюсь с этим, заставляя остальную часть моего интерфейса реагировать на то, где игрок говорит, что я, даже после того, как сказал ему, куда я хочу пойти.   -  person Duane    schedule 17.03.2011


Ответы (2)


Хотя вы, возможно, обеспокоены разницей в долях миллисекунд в этом случае, вы должны помнить, что видео будет иметь кадр только каждые ~ 33 миллисекунды или около того (при использовании стандартного NTSC 29,97 FPS). Так что, если вы не занимаетесь анализом на уровне криминалистики (в этом случае MediaPlayer не является подходящим инструментом), это более высокая точность, чем вам нужно.

Поскольку TimeSpan внутренне использует Int64 и, следовательно, не должен иметь проблем с округлением, я предполагаю, что MediaPlayer выполняет привязку к ближайшему доступному видеокадру.

person Brent Stewart    schedule 16.03.2011
comment
Это было моей оценкой, свойство для видеопроигрывателя показывает размер текущего кадра, он не обязательно будет таким же, как временной интервал, который вы передаете в него, потому что может не быть кадра, начинающегося с именно эта миллисекунда. - person EtherDragon; 06.08.2011

Хотя timespan предоставляет его свойства как целые числа, я подозреваю, что он использует значение с плавающей запятой внутри. Такие проблемы возникают из-за способа хранения значений с плавающей запятой.

Вы пробовали проверить, что вы получаете от TimeSpan.Equals(MediaPlayer.Position, oTimeSpan)? Я подозреваю, что это означает, что они равны.

person Matt Lacey    schedule 24.11.2010
comment
Он хранится в Int64 в виде тиков и конвертируется в / из по мере необходимости. - person Duane; 17.03.2011