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`.