3

I'm creating a program to record the screen and use a socket to send the data over socket to server. I've successfully implemented it on my sdcard but how do I create a socket from Socket.io library? setOutputFile asks for filedescriptor. Where is it in socket.io?

Socket.io code:

try {
            socket = IO.socket("http://192.168.0.105:3000");
            socket.connect();
// works

        } catch (Exception e) {
            e.printStackTrace();
        }

Now for mediarecorder:

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// ... some more props...
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setOutputFile(NEED A FILE DESCRIPTOR HERE);

How do I go about this? Help!

mehulmpt
  • 15,861
  • 12
  • 48
  • 88

2 Answers2

3

You can extract the file descriptor of a socket using:

ParcelFileDescriptor.fromSocket(socket).getFileDescriptor(); 

Source: android-developers

Mike Laren
  • 8,028
  • 17
  • 51
  • 70
  • ParcelFileDescriptor.fromSocket needs java.net.Socket, socket.io creates a io.socket.client.Socket. I'm using this dependency for Sockets.io: https://github.com/socketio/socket.io-client-java – mehulmpt Oct 03 '16 at 18:56
0

Mike Jaren's answer about using ParcelFileDescriptor is no so correct, due to this method creates new file descriptor, reflecting the original. Working method for Java7+ (which android supports) for getting correct file descriptor of socket:

FileDescriptor fd = ((FileInputStream)socket.getInputStream()).getFD();

Source: other stackoverflow answer

Also other method of getting socket's file descriptor on andorid (but complicated) with using java reflection may be seen here.