.NET System.Media.SoundPlayer를 사용하여 메모리 스트림에서 wav 파일을 재생하는 기존 프로그램이 있습니다. 이렇게해야하는 이유는 wav 파일이 디스크에서 암호화되어 있기 때문입니다. 메모리 스트림으로 해독하고 해당 스트림을 플레이어에 공급합니다. 잘 작동합니다.
그러나 나는 차라리 mp3를 사용하고 싶습니다 ... 그들은 더 작습니다. 솔루션으로 NAudio를 탐색하고 있지만 암호화 스트림에서 mp3를 재생하는 방법을 알 수 없습니다.
현재 암호화 된 wav 파일을 재생하는 데 사용하는 코드는 다음과 같습니다.
public void PlayEncMP3(String sourceFile)
{
FileStream input = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);
DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
cryptic.Key = ASCIIEncoding.ASCII.GetBytes("64BITKEY");
cryptic.IV = ASCIIEncoding.ASCII.GetBytes("64BIT_IV");
CryptoStream crStream = new CryptoStream(input, cryptic.CreateDecryptor(), CryptoStreamMode.Read);
MainPlayer = new SoundPlayer(crStream);
MainPlayer.Play();
}
이 코드는 완벽하게 작동합니다. 암호화 된 wav 파일을 열고 복호화 한 다음, wav 파일을 정상적으로 재생하는 플레이어에 메모리 스트림으로 복호화 된 wav 파일을 공급합니다.
나는 NAudio로 이것을 시도했지만 (이 질문에서 가져온 코드 : C #을 사용하여 스트림에서 오디오 재생 ) 코드에서 cryptoStream이 검색을 지원하지 않는다는 예외가 발생하여 blockAlignedStream을 만들지 못했습니다.
public void PlayEncMP3(String sourceFile)
{
//FileInfo info = new FileInfo(sourceFile);
FileStream input = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);
DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
cryptic.Key = ASCIIEncoding.ASCII.GetBytes("64BITKEY");
cryptic.IV = ASCIIEncoding.ASCII.GetBytes("64BIT_IV");
CryptoStream crStream = new CryptoStream(input, cryptic.CreateDecryptor(), CryptoStreamMode.Read);
using (WaveStream blockAlignedStream =
new BlockAlignReductionStream(
WaveFormatConversionStream.CreatePcmStream(
new Mp3FileReader(crStream))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(blockAlignedStream);
waveOut.Play();
while (waveOut.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(100);
}
}
}
}
이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
편집 : 블록 정렬 스트림을 완전히 제거하고 waveOut.Init에서 cryptoStream (blockAlignedStream 대신)을 사용하려고 시도했지만 cryptoStream을 NAudio.Wave.IWaveProvider로 변환 할 수 없습니다.
Mp3FileReader는 먼저 목차를 작성하려고 시도하기 때문에 검색 가능한 스트림 없이는 사용할 수 없으며 재생 중 위치 변경도 지원합니다. 따라서 먼저 전체 MP3를 메모리 스트림으로 읽어 들인 다음 Mp3FileReader에 제공해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다