2010-11-24 3 views
6

나는 이상한 문제에 직면 해있다. 내 애플리케이션은 특정 위치의 영화를 재생하므로 밀리 초 단위로 언급 된 위치조차도 중요합니다. 미디어 요소에 위치를 지정하고 있지만 잘못된 프레임을 보여줍니다. 왜 미디어 플레이어가 내가주는 위치에서 놀지 않는지 나는 모른다.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

사람이 내가 잘못 여기서 뭘하는지 말해 줄래?

+0

잘못된 프레임이 표시되고 있는지, 200ms에 프레임이 있고 199ms에 프레임이 있는지 확실합니까? – AnthonyWJones

+0

실제로 04 : 40 : 00.2000000이 04 : 40 : 00.1990000으로 변환 된 방법에 더 관심이 있습니까 ?? – Singleton

+0

이것은 재생을 위해 사용되는 특정 코덱이 프레임 시작에만 위치 할 수 있기 때문일 수도 있습니다. 내가하는 일 중에는 키 프레임에만 위치 할 수있는 코덱이 있습니다.이 경우 내 위치에 따라 위치가 전체 초만큼 벗어납니다. 나는 나머지 인터페이스를 플레이어가 내가 말하는 곳으로, 심지어 내가 가고 싶은 곳으로 말한 후에도 반응하도록함으로써 그것을 처리합니다. – Duane

답변

1

timespan은 int로 속성을 노출하지만 내부적으로 부동 소수점 값을 사용하고있는 것으로 생각됩니다. 이러한 문제는 부동 소수점 값이 저장되는 방식 때문입니다.

TimeSpan.Equals(MediaPlayer.Position, oTimeSpan)에서 얻은 정보를 확인해 보셨습니까? 나는 이것이 그들이 동등하다는 것을 나타내는 것으로 의심한다.

+0

이것은 틱으로서 Int64에 저장되고 필요에 따라 /로 변환됩니다. – Duane

3

이 경우 분수 밀리 초 차이를 염려 할 수도 있지만 비디오는 33 밀리 초마다 프레임을 가질 것임을 기억해야합니다 (표준 NTSC 29.97 FPS 사용). 따라서 법의학 수준 분석 (MediaPlayer가 올바른 도구가 아닌 경우)을 수행하지 않는 한 필요한 정확도가 더 높아집니다.

TimeSpan은 내부적으로 Int64를 사용하므로 반올림 문제가 없어야하므로 MediaPlayer가 사용 가능한 가장 가까운 비디오 프레임에 스냅되어 있다고 생각합니다.

+0

내 평가뿐 아니라 비디오 플레이어의 속성이 현재 프레임의 박자 기호를 표시하고 있습니다. 프레임이 시작되지 않을 수도 있으므로 시간 소절과 같지 않을 수도 있습니다. 정확히 밀리 세컨드. – EtherDragon

관련 문제