Q&A

  • MP3파일을 메모리에 올려서 플레이하기?
MP3 플레이어 관련 프로그램을 짜다 하도 고민스러워 질문을 올립니다



다름이 아니라 DRM쪽에 관련된것인데, 암호화 되어있는 파일을 받아서 그걸



파일로 만들수는 있는데, 중요한건 그걸 파일로 만들면 나중에 사용자가 불법으로



카피가 가능하므로 , 그걸 막기위해서 메모리에 올려서 플레이를 시켜줘야 할것



같은데 어떻게 해야할지 막막합니다



MP3엔진은 파일을 불러서 플레이 시키게 되어있는데, 파일을 메모리맵이라는것을



통해서 만들어 하드에 남게하지않고 플레이 시킬수있는 방법은 없는지요?



아래는 암호화된 파일을 불러와서 메모리 맵에 대응시키는 소스까지입니다



도움좀 부탁드립니다

rocedure TForm1.FlatButton2Click(Sender: TObject);

var

iFileHandle : THandle;

dwLength, dwBytesRead : DWORD;

pBuff : PChar;

fi : dmFileInfo;

i : Integer;

s : AnsiString;

NumWritten : LongInt;

iMapHandle : THandle;

iData : PByte;

iFileSize : Integer;

begin

if OpenDialog1.Execute then

begin

iFileHandle := FileOpen(OpenDialog1.FileName,fmOpenReadWrite);



if iFileHandle = INVALID_HANDLE_VALUE then

raise Exception.Create('파일을 열거나 생성하는데 에러');



try

iFileSize := GetFileSize(iFileHandle,nil); //암호화된 파일 사이즈

iMapHandle := CreateFileMapping

(iFileHandle,nil,PAGE_READWRITE,0,iFileSize,nil);



if iMapHandle = 0 then

raise Exception.Create('파일 맵핑 실패');

finally

CloseHandle(iFileHandle);

end;



if m_pDecMod.GetFileInfo(@fi, PChar(OpenDialog1.FileName)) = 0 then

begin

ShowMessage('GetFileInfo() failed!');

Exit;

end;



if m_pDecMod.OpenFile(PChar(OpenDialog1.FileName)) = 0 then

begin

ShowMessage('OpenFile() failed!');

Exit;

end;



m_pDecMod.GetFileLength(@dwLength);

GetMem(pBuff, fi.dwPacketSize);





try

iData := MapViewOfFile(iMapHandle,FILE_MAP_ALL_ACCESS,0,0,iFileSize);

if iData = nil then

raise Exception.Create('파일의 뷰 맴핑 실패');

finally

CloseHandle(iMapHandle);

end;

repeat

m_pDecMod.ReadFile(LPBYTE(pBuff), fi.dwPacketSize, @dwBytesRead);

NumWritten := FileWrite(iMapHandle, pBuff^, dwBytesRead);

until (dwBytesRead = 0);





end;

end;



0  COMMENTS