BASS 라이브러리를 사용하여 Delphi (XE)가있는 mp3 플레이어를 개발했습니다.Delphi tmediaplayer가 "이상한"표지 이미지가 포함 된 mp3 파일을 재생하지 않습니다.
특정 이유로 인해 BASS 라이브러리를 제거하고 Delphi에서 TMediaPlayer
구성 요소를 사용하고자합니다 (또한 프로젝트를 Delphi 10 Seattle로 이동하려는 경우).
이제 mp3 파일 중 일부에 "이상한"jpg 이미지가 포함되어 있다는 것을 알았습니다.
이미지 때문에 Delphi 구성 요소에 오류가 발생 함을 의미합니다.
try
mplMain.FileName := CurrentSong;
progbSong.Max := mplMain.Duration;
lblDuration.Text := DurationToString(mplMain.Duration);
PlayClick(Self);
except
on E: Exception do
begin
FMX.Dialogs.MessageDlg('Cannot play song: ' + CurrentSong + #10 + #13 +
'Reason: ' + E.Message,
TMsgDlgType.mtWarning, [TMsgDlgBtn.mbOK], 0,
procedure(const AResult: TModalResult)
begin
MediaNext;
end
);
end;
end;
이 행 :
mplMain.FileName := CurrentSong;
이 문제를 일으키는 나는 다음과 같은 말을 할 수 오랜 시간 디버깅
. 깊이를 디버깅
다이빙 여기에 온다 :
FMX.Media
라이브러리 :
procedure TMediaPlayer.SetFilename(const Value: String);
...
FMedia := TMediaCodecManager.CreateFromFile(FFileName);
...
이 FMX.Media.Win
에 끝 :
constructor TWindowsMedia.Create(const AFileName: string);
...
HR := FGraphBuilder.RenderFile(PChar(AFileName), nil);
...
라인
HR := FGraphBuilder.RenderFile(PChar(AFileName), nil);
이 호출되면 디버그 모드에서 프로그램이 IDE로 돌아갑니다.
런타임 모드에서는 아무 일도 발생하지 않습니다. 오류 메시지가 없습니다. 단지 "아무것도"아닙니다.
알다시피 관련 줄을 try...except
블록으로 감쌌지만 오류는 발생하지 않았습니다. 프로그램/플레이어가 계속되지 않습니다.
나는이 "특별한 경우"를 포착하고 영향을받는 mp3 파일을 로그 파일에 기록하여 삽입 된 이미지를 변경할 수 있기 때문에 나에게 좋지 않습니다.
일부 이미지에서만 발생한다는 것을 알게되었습니다. 어쩌면 그들은 "어떻게 든 부패한다", 그러나 다른 모든 선수들에게 보여진다.
이미지를 제거하고 "새"파일을 포함하고 저장하면 모든 것이 정상이며 파일 번호 TMediaPlayer
이 파일을 재생할 수 있습니다.
이 특정 종류의 "오류"를 어떻게 잡아 영향을받는 파일 목록을 얻을 수 있습니까?
Windows 7에서 JPG 아트웍으로 MP3 파일로 재생할 수 없습니다. 특정 파일을 공유 할 수 있습니까? – Victoria
나는 Windows 7에도 있습니다. :-) http://mschlereth.de/stuff/dl/05%20-%20Fan%20Tong%20Zhou%20-%20Wo%20Shuo%20Wo%20Ai%20Ni.mp3 –
여기에서 파일을 다운로드 할 수 있습니다. 업로드 된 DirectShow에서도 문제가 없습니다. 하지만 K-Lite 코덱 팩 (코덱이 재생에 사용되었을 수도 있음)이 설치되어 있습니다. 내 시스템이 최신 상태입니다 (모든 Windows 업데이트가 적용됨). – Victoria