标签: localsocket

使用Android中的本地插槽将实时视频录制保存到SD卡 - 视频无法播放

尝试捕获视频并使用本地套接字将其保存为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播放

mp4 android buffer video-recording localsocket

24
推荐指数
1
解决办法
993
查看次数

使用LocalServerSocket时"IOException:再试一次"

有没有人有关于例外"再试一次"的更多有用信息?

我正在使用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)

android localserversocket localsocket

5
推荐指数
1
解决办法
2604
查看次数

如何使用LocalSocket修复'MediaRecorder.start()'上的'java.lang.IllegalStateException'

我正在尝试开发圆形录像机,并且需要将录制的视频保存在缓冲区中,以恢复特定时间的最后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)

java android mediarecorder localsocket

5
推荐指数
1
解决办法
164
查看次数