2010-01-24 5 views
1

미디어 파일 (영화)을 해독 한 다음 해독 된 파일을 HDD에 저장하지 않고 재생할 수있는 WinForms 앱을 개발해야합니다 (해독 된 파일 마지막으로 메모리 스트림에 저장됩니다.) 문제는 어떻게 메모리 스트림에서 동영상을 재생할 수 있습니까? 가능합니까?미디어 파일을 해독하고 HDD에 저장하지 않고 재생합니다.

답변

1

가능할 수도 있지만, 그렇게하기 위해 만든 DirectShow 필터는 IFileSourceFilter 인터페이스를 구현하는 파일 판독기로 작동하며 비디오가 재생 될 때 연속적으로 읽습니다. 프레임을 암호화하고 해독 한 다음 다음 필터로 전달합니다.

파일을 순차적으로 암호화하면 (즉 개별 프레임이 별도의 엔티티로 암호화 된 경우) 작동합니다. 그렇지 않으면 전체 파일을 한 번에 해독해야합니다.이 파일은 집중적이고 느려서 최종 파일을 저장하기 위해 하드 드라이브에 도달해야 할 수 있습니다.

어쨌든,이 링크를 클릭하면 시작할 수 있어야합니다 http://msdn.microsoft.com/en-us/library/dd375454%28VS.85%29.aspx

나는 DirectShow 필터를 만들기 위해, 당신은 C++를 사용해야합니다 것을 두려워하고,이 얻을 수있는 가장 쉬운 API 아니다 당신의 주위에 머리.

대체 방법으로 Windows Media Format SDK을 사용하면 맞춤 비디오 패킷을 실시간으로 렌더러에 전달할 수 있습니다. C# (WindowsMediaLib)에 대한 좋은 interop 라이브러리도 있습니다.

1

우선 소스 비디오를 조각별로 암호화하는 것이 좋습니다. 따라서 암호화 된 비디오 파일은 암호화 된 부분 집합입니다. 원본 파일을 같은 크기의 부분으로 분할하고 암호화하십시오.

여기에서 구성표 (OutputStream은 암호화 된 비디오 파일의 스트림이고 InputStream은 원본 파일 스트림, ChunkSize는 원본 파일의 각 부분의 크기, 원본 및 암호화 된 조각의 크기 :

)
using (BinaryWriter Writer = new BinaryWriter(OutputStream)) 
{ 
    byte[] Buf = new byte[ChunkSize]; 

    List<int> SourceChunkSizeList = new List<int>(); 
    List<int> EncryptedChunkSizeList = new List<int>(); 

    int ReadBytes; 
    while ((ReadBytes = InputStream.Read(Buf, 0, Buf.Length)) > 0) 
    { 
     byte[] EncryptedData = Encrypt(Buf, ReadBytes); 
     OutputStream.Write(EncryptedData, 0, EncryptedData.Length); 

     SourceChunkSizeList.Add(ReadBytes); 
     EncryptedChunkSizeList.Add(EncryptedData.Length); 
    } 

    foreach (int SourceChunkSize in SourceChunkSizeList) 
     Writer.Write(SourceChunkSize); 

    foreach (int EncryptedChunkSize in EncryptedChunkSizeList) 
     Writer.Write(EncryptedChunkSize); 
} 

이러한 메타 데이터는 암호화 된 부분을 빠르게 찾는 데 도움이됩니다.

둘째, 각 읽기 요청에서 암호화 된 데이터를 해독하지 마십시오. 캐시하기 : 대부분의 경우 재생되는 비디오는 순차적 인 읽기 일뿐입니다.

까다로운 부분은 암호화 된 비디오 파일을 재생하는 방법입니다. DirectShow 필터 (비디오 특정 솔루션)를 작성하거나 타사 제품 (다목적 솔루션)을 확인할 수 있습니다 : BoxedApp, 가상화 SDK. 멋진 점은 정확한 작업을 해결하는 방법을 보여주는 기사가 있다는 것입니다. http://boxedapp.com/encrypted_video_streaming.html

관련 문제