Encrypt video on the fly from android camera

android, android-camera, encryption, file-descriptor, java

Solution

You can use LocalServerSocket and LocalSocket to implement what you want.

LocalServerSocket which provides the FileDescriptor via LocalServerSocket.getFileDescriptor()

- Initiate a LocalServerSocket.

- Initiate a LocalSocket object and connect to LocalServerSocket.

- Invoke LocalServerSocket.accept() to accept connection from LocalSocket.

- When the connection established, you can get FileDescriptor from LocalServerSocket.

- Every bytes the Camera writes to LocalServerSocket could be retrieved from LocalSocket.getInputStream(), you can use a for-loop to get byte stream and write to CipherOutputStream.

Remember to put all steps into a new Thread.

I used those APIs to create on-the-fly stream processor with the Camera as stream source.

I hope this helps.

Problem

I want to encrypt video on the fly that android camera captures. So I need to tell android `MediaRecorder` to write it video stream to my `CipherOutputStream`. The problem is `MediaRecorder.setOutputFile()` method accepts only `FileDescriptor` and there is no way to get encrypting file descriptor from CipherOutputStream. So my question is how can I either emulate FileDescriptor to receive data writes and do encryption manually or somehow convince `MediaRecorder` to stream video into `CipherOutputStream`.

Original source

Related problems