потоковая передача файла MediaRecorder во время записи

Я пытаюсь получить видеопоток из точки A (телефон Android 2.1) в точку B (мой сервер) в реальном времени. . Как мне это сделать? Ниже приведены мои попытки (немного длинные, но краткие! )


Цель состоит в том, чтобы передать на сервер часовое видео, записанное с телефона, без приостановки / остановки потока. задержка до нескольких минут не проблема. Я пробовал три подхода

  1. : поток FileInputStream, который читает из FileDescriptor видео пункт назначения
  2. вызывает MediaRecoder.setOutputFile на FD сокета "отправителя". этот сокет подключается к LocalSocketServer, чей пункт назначения является сокетом "получателя".
  3. открыть сокет для моего сервера и давая setOutputFile свой FD

, к сожалению, обе попытки потерпели неудачу.

  1. Регистрирует только 24 байта всякий раз, когда i вызовите FileInputStream.available (), и только фактическое количество байтов после того, как я вызываю Recorder.stop ()
  2. , я получаю этот красивый бесполезный stacktrace

    ОШИБКА / AndroidRuntime (18532): вызвано: java.lang.RuntimeException: сбой при запуске. ОШИБКА / AndroidRuntime (18532): в android.media.MediaRecorder.start (собственный метод) ОШИБКА / AndroidRuntime (18532): в com.example.demovideo.DemoVideo.initializeCamera (...) ...

  3. та же ошибка 2

фрагменты кода (части опущены)

1)

fileOut = new FileOutputStream(pathToFile);
...
recorder.setOutputFile(fileOut.getFD());
recorder.prepare()
recorder.start()

// in an Async Thread
fileIn = FileInputStream(fileOut.getFD);
while (recording) {   
    fos.flush();
    Log.w("---", "bytesAvailable: " + fileIn.available()); //always returns 24
    Thread.sleep(1000);
}

2)

// in a Thread
server = new LocalServerSocket(SOCKET_ADDRESS);
    while (true){
        receiver = server.accept();
        if (receiver != null){
        InputStream input = receiver.getInputStream();
            ... // processing would go here
    }   }

sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
recorder.setOutputFile(sender.getFileDescriptor());
...
recorder.prepare();
recorder.start(); // <- error
  1. правильно сохраняет неповрежденное видео to sd
  2. работает, если я использую setOutputFile (pathToFile) вместо этого. розетки также работают, когда я бегу sender.getOutputStream (). Write (message.getBytes ());
8
задан 0605002 8 May 2012 в 09:50
поделиться