2013-07-04 2 views
4

일부 오디오 파일에서는 MediaElement.NaturalDuration 값이 실제 오디오 지속 시간보다 작습니다. Windows Media Player에서 파일을 열면 재생 시간이 정확합니다 (또한 파일의 속성을 볼 때도 마찬가지 임). NaturalDuration 속성의 값이 올바르지 않더라도 오디오는 완전히 재생되지만 어떤 시점에서는 Position 속성의 값이 NaturalDuration 속성의 값보다 커집니다. 이해하는 것처럼 발생하지 않아야합니다.MediaElement.NaturalDuration이 실제 오디오 지속 시간보다 짧습니다.

나는 문제를 재현하는 간단한 응용 프로그램을 만들었습니다 https://skydrive.live.com/redir?resid=ACF8BFD4384116CE!2908&authkey=!AG-wF6Ae-7EAYk8

응용 프로그램에서 사용되는 오디오 파일의 지속 시간이 0시 2분 54초하지만 NaturalDuration 속성의 값이 0시 1분 59초입니다 .

이유를 아는 사람과 이유가있을 수 있습니다.

미리 도움을 청하십시오.

+0

'MediaOpened' 이벤트가 호출 된 후'NaturalDuration' 값을 확인하고 있습니까? – keyboardP

+0

예. 또한 오디오가 재생되는 동안 오디오가 변경되는지 확인하려고했으나 그렇지 않습니다. 앞에서 언급했듯이 Position 속성의 값이 00:01:59 마크를 통과 한 이후의 지속 시간보다 커졌습니다. –

+1

WMP가 올바른 시간을 표시합니다 2:54. 그러나 iTunes는 1:59를 표시합니다. 실제로 파일 크기를 취하여이 파일의 상수가 16kbps라고 가정하면 ~ 3 분이됩니다. 그러나 프레임을 사용하고 프레임 또는 프레임 당 샘플 수에 관한 잘못된 가정을하면 다른 것을 얻을 수 있습니다. 때로는 일부 특수 헤더에서도 기간을 가져올 수 있습니다. 그들이 뭘하는지 누가 알지 ..누군가 알고 있다면 - 공유하십시오 : – Kreol

답변

1

좋아,이 답변은 아니지만 몇 가지 단서를 제공하여 몇 가지 단서를 제공하는 이유와 그 번호가 어디에서 왔는지 (2:58 및 1:59). 이 스레드에서 먼저보기 : Calculating the length of MP3 Frames in milliseconds 두 우리가 거기에서 사용하는 것들 :

1) 프레임 길이 (밀리 초) = Hz에서의 프레임/샘플 속도 당 (샘플()) * 1000, 그리고

프레임의 초 = (ms 단위) 프레임 길이 기간 * 번호/

2 천) 다른 MPEG 버전에 대한 샘플 수에 대한 몇 가지 기준이 있습니다

버전 1

MPEG : 프레임 당 샘플

 384, // Layer1 
     1152, // Layer2 
     1152 // Layer3 

MPEG 버전 2 & 2.5

 384, // Layer1 
     1152, // Layer2 
     576  // Layer3 

지금은 파일 형식 정보에 대해 말하는 윈앰프에서 확인할 수 있습니다 :

MPEG-2.5 레이어 3

16 kbps로, 2482 프레임

이제 프레임 = 2482 및 프레임 당 샘플 = 576 (MPEG-2.5 레이어 3)을 취하면 재생 시간은 2:58가됩니다. 그러나 실버 라이트와 아이튠즈가 프레임 당 샘플 수 = 384를 사용하여 1시 59 분을 사용하는 것처럼 보입니다. 다음 단계는 파일 헤더의 실제 값을 검사하는 것일 수 있으며 올바른 경우 올바른 기간을 계산할 수 있습니다. 예를 들어 서버와 같이 별도로 기간을 확보하기 위해 해킹을 할 수있는 것보다 훨씬 효율적입니다. 그러나 나는 꽤 확신한다 - 그 파일은 약간의 결함 (일치하지 않는 헤더와 내용)을 가지고 있으며, 어떤 플레이어는 그것을 처리 할 수있다.

+0

매우 유용합니다. 고맙습니다! 나는 그 파일에 무엇이 잘못되었는지 조사하려고 노력할 것이다. 어쩌면 유일한 해결책은 서버에서 기간을 별도로 얻는 것입니다. –

관련 문제