मैं Truiton ScreenCapture उदाहरण परती, क्रम में MediaProjectionस्ट्रीम एंड्रॉयड स्क्रीन
का उपयोग करते समय रिकॉर्डिंग की बचत डिवाइस स्क्रीन रिकॉर्ड करने के लिए कोशिश कर रहा हूँ localy यह काम करता है
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
String localFilePath = getLocalFilePath();
mMediaRecorder.setOutputFile(localFilePath);
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.prepare();
यह कैसे कभी जब FileDescriptor के साथ काम करने को बदलने नहीं
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
String hostname = "10.26.100.18";
int port = 2007;
Socket socket = new Socket(InetAddress.getByName(hostname), port);
ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.fromSocket(socket);
LocalServerSocket localServerSocket = new LocalServerSocket(fileDescriptor.getFileDescriptor());
mMediaRecorder.setOutputFile(localServerSocket.getFileDescriptor());
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.prepare();
LocalServerSocket, तो mMediaRecorder.prepare()
फेंक अपवाद का उपयोग नहीं करते हैं, तो अब मैं हमें हूं कि यह ing, अपवाद
Caused by: java.lang.IllegalStateException: failed to get surface
at android.media.MediaRecorder.getSurface(Native Method)
at com.truiton.screencapture.MainActivity$override.createVirtualDisplay(MainActivity.java:172)
at com.truiton.screencapture.MainActivity$override.onActivityResult(MainActivity.java:133)
at com.truiton.screencapture.MainActivity$override.access$dispatch(MainActivity.java)
at com.truiton.screencapture.MainActivity.onActivityResult(MainActivity.java:0)
at android.app.Activity.dispatchActivityResult(Activity.java:6456)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
at android.app.ActivityThread.-wrap16(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
mMediaRecorder.getSurface()
private VirtualDisplay createVirtualDisplay() {
return mMediaProjection.createVirtualDisplay("MainActivity",
DISPLAY_WIDTH, DISPLAY_HEIGHT, mScreenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mMediaRecorder.getSurface(), null /*Callbacks*/, null
/*Handler*/);
}
में नीचे दी गई विधि में अपवाद यह मेरा जावा सर्वर, मैं के बाद mMediaRecorder.prepare()
कहा जाता है और के रूप में eccpected यह inputStream.read
पर अटक सॉकेट मिलता है। एंड्रॉयड happands में अपवाद है जब मैं फोन mMediaRecorder.start()
final byte[] buffer = new byte[1024];
try {
ServerSocket serverSocket = new ServerSocket(2007);
while (!serverSocket.isClosed()) {
Socket socket = serverSocket.accept();
File videoFile = createEmptyVideoFile();
FileOutputStream outputStream = new FileOutputStream(videoFile);
InputStream inputStream = socket.getInputStream();
int length = inputStream.read(buffer);
while (length != -1) {
outputStream.write(buffer, 0, length);
length = inputStream.read(buffer);
}
}
} catch (IOException e) {
e.printStackTrace();
}
क्या मेरा उत्तर पर्याप्त नहीं है या कोई और स्पष्टीकरण आवश्यक है, कृपया मुझे बताएं? –
nodejs में 'your_socket_addr' कैसे ढूंढें - easyRTC आर्किटेक्चर? –