我正在尝试通过套接字传输视频。
以下是代码段 -
serverSocket = new ServerSocket(serverPort);
receiverSocket = new Socket();
receiverSocket.connect(new InetSocketAddress(serverIP, serverPort));
// receiverSocket.setReceiveBufferSize(500000);
receiverSocket.setSoTimeout(3000);
senderSocket = serverSocket.accept();
// senderSocket.setReceiveBufferSize(500000);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(senderSocket);
FileDescriptor fd = pfd.getFileDescriptor();
mMediaRecorder.setOutputFile(fd);
// mMediaRecorder.setOutputFile(filePath);
mMediaRecorder.setVideoEncodingBitRate(10000000);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setOrientationHint(orientation);
mMediaRecorder.prepare();
但是我在调用prepare()时遇到了IllegalStateException。
java.lang.IllegalStateException
at android.media.MediaRecorder._prepare(Native Method)
at android.media.MediaRecorder.prepare(MediaRecorder.java:742)
at com.example.i047468.videostreaming.VideoRecordingAsyncTask.setUpMediaRecorder(VideoRecordingAsyncTask.java:90)
at com.example.i047468.videostreaming.VideoRecordingAsyncTask.doInBackground(VideoRecordingAsyncTask.java:52)
当我将输出文件设置为" filePath"在SD卡上一切顺利。所以我猜它无法将outputfile设置为socket fd,因此准备失败。
我如何让这个工作?这里出了什么问题?异常堆栈并没有太多启示。
此致 SHAILESH