尝试捕获视频并使用本地套接字将其保存为Mp4/3gp格式的SD卡.能够按字节写入sd卡,但视频文件不可播放.我已经经历了很多例子:
https://github.com/fyhertz/spydroid-ipcamera
https://github.com/mconf/sipdroid
还有很多.我注意到有人建议这可能是文件头的问题.我试图从标题跳过那些"mdat"数据:
private void skipHeader() throws IOException {
// Skip all atoms preceding mdat atom
byte[] buffer = new byte[3];
while (true) {
while (mReceiver.getInputStream().read() != 'm');
mReceiver.getInputStream().read(buffer,0,3);
if (buffer[0] == 'd' && buffer[1] == 'a' && buffer[2] == 't') break;
}
}
Run Code Online (Sandbox Code Playgroud)
最后没有什么对我有用.我需要做些什么来使这些视频文件可以使用Local Socket播放
有没有人有关于例外"再试一次"的更多有用信息?
我正在使用LocalServerSocket和发送应用程序之间的位图LocalSocket:
输出:
socket = new LocalSocket();
socket.connect(new LocalSocketAddress(SOCKET_NAME));
fos = new DataOutputStream(socket.getOutputStream());
...
public void onEvent() {
fos.writeInt(width);
fos.writeInt(height);
fos.writeInt(newBuffer.length);
fos.write(newBuffer);
}
Run Code Online (Sandbox Code Playgroud)
输入:
server = new LocalServerSocket(SOCKET_NAME);
socket = server.accept();
socket.setSoTimeout(60);
while(true) {
int width = fis.readInt(); // IO Exception being thrown here
int height = fis.readInt();
int length = fis.readInt();
byte[] bytes = new byte[length];
fis.read(bytes);
}
Run Code Online (Sandbox Code Playgroud)
[为了清晰起见,删除了try/catch等]
04-18 09:19:11.664: W/System.err(1268): java.io.IOException: Try again
04-18 09:19:11.664: W/System.err(1268): at android.net.LocalSocketImpl.readba_native(Native Method)
04-18 09:19:11.664: W/System.err(1268): at …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发圆形录像机,并且需要将录制的视频保存在缓冲区中,以恢复特定时间的最后X分钟。问题是当我运行MediaRecorder对象的'start()'方法时:
mMediaRecorder.start();
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
位于picture.wikinova.com.odc.CameraActivity $ MediaPrepareTask.doInBackground(CameraActivity.java:298)的java.lang.IllegalStateException android.media.MediaRecorder.start(本机方法),位于picture.wikinova.com.odc.CameraActivity $ MediaPrepareTask。在java.util.concurrent.FutureTask.run(FutureTask.java:266)处的android.os.AsyncTask $ 2.call(AsyncTask.java:333)处的doInBackground(CameraActivity.java:289)在java.util.concurrent.ThreadPoolExecutor处。 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:641)上的runWorker(ThreadPoolExecutor.java:1167)在java.lang.Thread.run(Thread.java:764)上
当我使用'File'作为MediaRecorder的outputFile时,不会发生该错误,但是当我尝试使用LocalSocket恢复内存中的视频缓冲区时,就会发生该错误。
这是我创建本地服务器套接字并捕获视频的代码
mLocalServerSocket = new LocalServerSocket("sockt_ip");
} catch (Exception e) {
e.printStackTrace();
}
LocalSocket mLocalClientSocket = null;
mLocalClientSocket = mLocalServerSocket.accept();
InputStream in = mLocalClientSocket.getInputStream();
byte[] buffer = new byte[1024];
String retorno = "";
int len = 0;
while ((len = in.read(buffer)) >= 0) {
for (int i = 0; i < len; i++) {
retorno += buffer[i];
}
}
Run Code Online (Sandbox Code Playgroud)
这是我创建MediaRecorder并设置输出文件的代码
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
profile.videoFrameWidth = …Run Code Online (Sandbox Code Playgroud)