2012-07-24 3 views
7

안 드 로이드 카메라 캡처 비디오를 즉석에서 암호화하려고합니다. 그래서 안드로이드에게 MediaRecorder에게 비디오 스트림을 쓰려면 CipherOutputStream으로 연락해야합니다. 문제는 MediaRecorder.setOutputFile() 메서드는 FileDescriptor 만 허용하고 CipherOutputStream에서 파일 설명자를 암호화 할 수있는 방법이 없습니다.안 드 로이드 카메라에서 즉시 비디오 암호화

그럼 내 질문은 FileDescriptor를 에뮬레이트하여 데이터 쓰기를 받고 수동으로 암호화를 수행하거나 MediaRecorderCipherOutputStream으로 스트리밍하도록 설득 할 수 있습니다.

+1

나는 이것이 가능하지 않다고 생각한다 : http://stackoverflow.com/questions/9257364/modifying-fileinputstream-for-mediaplayer-setdatasource –

답변

4

LocalServerSocket 및 LocalSocket을 사용하여 원하는 것을 구현할 수 있습니다. LocalServerSocket.getFileDescriptor 통해 FileDescriptor에 제공

LocalServerSocket()

  1. 는 LocalServerSocket을 시작합니다.
  2. LocalSocket 개체를 시작하고 LocalServerSocket에 연결하십시오.
  3. LocalServerSocket.accept()를 호출하여 LocalSocket에서 연결을 허용합니다.
  4. 연결이 설정되면 LocalServerSocket에서 FileDescriptor를 가져올 수 있습니다.
  5. 카메라가 LocalServerSocket에 쓰는 모든 바이트는 LocalSocket.getInputStream()에서 검색 할 수 있으며 for 루프를 사용하여 바이트 스트림을 가져와 CipherOutputStream에 쓸 수 있습니다.

새 스레드에 모든 단계를 넣어야합니다.

나는 카메라를 스트림 소스로 사용하여 직접 스트림 프로세서를 만드는 데 이러한 API를 사용했습니다.

이 정보가 도움이되기를 바랍니다.

+0

이것이 실제로 작동하는 미디어 포맷이 있는가? 예를 들어, MP4의 경우 MediaRecorder는 FileDescriptor에 대한 무작위 액세스를 기대합니다. 파일의 시작 부분에 moov 아톰을 쓰려고합니다. 1) 소켓 파생 FileDescriptor에서 작동하지 않고 2) CipherOutputStream과 함께 작동하지 않습니다. . – Mark

+0

moov/mdat의 임의 위치 때문에 MP4가 작동하지 않습니다. M2TS와 같은 스트리밍 파일 형식을 테스트했는데 다른 스트리밍 파일 형식도 잘 작동해야한다고 생각합니다. – yrulee

관련 문제