问题
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
.
回答1:
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.
来源:https://stackoverflow.com/questions/11638463/encrypt-video-on-the-fly-from-android-camera