미디어 파일 (영화)을 해독 한 다음 해독 된 파일을 HDD에 저장하지 않고 재생할 수있는 WinForms 앱을 개발해야합니다 (해독 된 파일 마지막으로 메모리 스트림에 저장됩니다.) 문제는 어떻게 메모리 스트림에서 동영상을 재생할 수 있습니까? 가능합니까?미디어 파일을 해독하고 HDD에 저장하지 않고 재생합니다.
답변
가능할 수도 있지만, 그렇게하기 위해 만든 DirectShow 필터는 IFileSourceFilter 인터페이스를 구현하는 파일 판독기로 작동하며 비디오가 재생 될 때 연속적으로 읽습니다. 프레임을 암호화하고 해독 한 다음 다음 필터로 전달합니다.
파일을 순차적으로 암호화하면 (즉 개별 프레임이 별도의 엔티티로 암호화 된 경우) 작동합니다. 그렇지 않으면 전체 파일을 한 번에 해독해야합니다.이 파일은 집중적이고 느려서 최종 파일을 저장하기 위해 하드 드라이브에 도달해야 할 수 있습니다.
어쨌든,이 링크를 클릭하면 시작할 수 있어야합니다 http://msdn.microsoft.com/en-us/library/dd375454%28VS.85%29.aspx
나는 DirectShow 필터를 만들기 위해, 당신은 C++를 사용해야합니다 것을 두려워하고,이 얻을 수있는 가장 쉬운 API 아니다 당신의 주위에 머리.
대체 방법으로 Windows Media Format SDK을 사용하면 맞춤 비디오 패킷을 실시간으로 렌더러에 전달할 수 있습니다. C# (WindowsMediaLib)에 대한 좋은 interop 라이브러리도 있습니다.
우선 소스 비디오를 조각별로 암호화하는 것이 좋습니다. 따라서 암호화 된 비디오 파일은 암호화 된 부분 집합입니다. 원본 파일을 같은 크기의 부분으로 분할하고 암호화하십시오.
여기에서 구성표 (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
- 1. xml 파일을 저장하지 않고
- 2. 서버에 저장하지 않고 파일을 다운로드하십시오.
- 3. 서버에 저장하지 않고 파일을 읽으십니까?
- 4. 버튼을 클릭하면 인터넷에서 소리 파일을 재생합니다.
- 5. 저장하지 않고 파일을 받고 업로드하는 중
- 6. 파일을 저장하지 않고 XmlDataProvider 소스를 설정하십시오.
- 7. XmlSerializer.Serialize가 파일을 저장하지 않고 예외를 throw하지 않습니다.
- 8. HTML 파일을 저장하지 않고 미리 보려면 어떻게해야합니까?
- 9. 저장하지 않고 ActiveRecord 유효성 검사하기
- 10. 저장하지 않고 Infopath 양식을 업그레이드하십시오.
- 11. 이미지를 저장하지 않고 브라우저로 전송
- 12. InAppSettingsKit을 설정 앱에 저장하지 않고
- 13. PHP에서, 내 서버에 저장하지 않고 브라우저에 s3 파일을 다운로드하려고합니다.
- 14. CVS에 파일별로 파일을 저장하지 않고 전체 저장소를 어떻게 추가합니까?
- 15. 먼저 Ruby에 저장하지 않고 GET 요청에서 zip 파일을 읽으시겠습니까?
- 16. 로컬로 저장하지 않고 PHP로 파일을 작성하고 FTP 서버에 업로드
- 17. 처음에 텍스트 파일을 저장하지 않고 Ruby에서 FTP하는 방법
- 18. Java - 로컬로 다운로드 및 저장하지 않고 파일을 직접 읽음
- 19. Adobe AIR - 저장하지 않고 웹 서버에서 파일을 다운로드하려면 어떻게합니까?
- 20. 사용자가 업로드 한 파일을 데이터베이스에 저장하지 않고 읽는 방법
- 21. 디스크에 저장하지 않고 생성 된 XML 파일을 전송하십시오.
- 22. 전체 파일을 저장하지 않고 XML 파일에 XElement를 추가합니다. C#
- 23. Java 애플릿은 미디 파일을 표시하고 재생합니다.
- 24. 저장하지 않고 서버에서 xml 파일 읽기
- 25. 파일을 저장하지 않는 이유는 무엇입니까?
- 26. 전체 파일을 다운로드하지 않고 미디어 길이 가져 오기
- 27. 미디어 파일을 분할하는 방법
- 28. 미디어 파일을 재생하는 방법
- 29. outfile을 선택하여 파일에 저장하지 않고 blob로 저장하십시오.
- 30. 변경 사항을 저장하지 않고 원점에서 업데이트 됨