Streaming de vídeo do dispositivo Android para o LAMP Server

a partir deste ponto:http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system Eu estou tentando criar um aplicativo para salvar um fluxo de vídeo da câmera móvel para um servidor remoto. (Encontrei vários exemplos no google code para android parte: ipcamera-para-android, spydroid-ipcamera, etc.)

Eu li algumas respostas aqui e em torno da rede, mas não consigo encontrar a solução sobre como "ler" e salvar o fluxo de dados no lado do servidor.

Meu conhecimento de java é ruim, então eu prefiro ser capaz de criar script do lado do servidor em PHP (usando sockets de servidor, ou outros materiais). Alguém pode ajudar nessa parte?

ATUALIZAR

usando meu pequeno conhecimento de ferramentas como o mplayer / ffmpeg mencorer eu sou capaz de salvar o fluxo de vídeo ... por exemplo, usando ipcamera-para-android e seu servidor nanohttp usando no lado do servidor:

<code>ffmpeg-i "http://{ip of android phone}:8080/live.flv" /my/server/path/stream.flv
</code>

No entanto, só pode ser usado em LAN, eu preciso desse servidor de conexão móvel e não viceversa.

ATUALIZAÇÃO 2

Algum progresso .. usando este script no lado do servidor

<code>#!/usr/bin/php5
<?php
$handle = fopen("stream.3gp","w");
$socket = stream_socket_server("tcp://192.168.0.102:9000", $errno, $errstr);
if ($socket)
{
 echo "start listening\n";
 while ( $conn = stream_socket_accept($socket, 180))
  {
    echo "phone connected\n";
    while ($chunk = stream_socket_recvfrom($conn, 1500))
    {
        fwrite($handle,$chunk);
    }
  }
}

  fclose($handle);
  fclose($socket);
?>
</code>

no entanto, o arquivo 3gp ainda não é jogável.

ATUALIZAÇÃO 3

<code>#!/usr/bin/php5
<?php


$socket = stream_socket_server("tcp://192.168.0.102:9000", $errno, $errstr);
$file = "saved.3gp";
$threegp_header = "\x00\x00\x00\x18\x66\x74\x79\x70\x33\x67\x70\x34\x00\x00\x03\x00\x33\x67\x70\x34\x33\x67\x70\x36";
$four_bytes = "\x00\x00\x00\x00";

if (!$socket) {

  echo "$errstr ($errno)\n";

} else {

  echo "server start listening\n";

  while ( $conn = @stream_socket_accept($socket, 180))
  {
        echo "phone connected\n";

    $handle = fopen($file,"w");

    //mediaRecorder gives invalid stream header, so I replace it discarding first 32 byte, replacing with 28 good byte (standard 3gp header plus 4 empty bytes)
    $discard = stream_get_contents($conn, 32);
    fwrite($handle, $threegp_header);
    fwrite($handle, $four_bytes);

    //then confinue to write stream on file until phone stop streaming
        while(!feof($conn))
        {
        fwrite($handle, stream_get_contents($conn, 1500));
        }
    echo "phone disconnected\n";
    fclose($handle);

    //then i had to update 3gp header (bytes 25 to 28) with the offset where moov atom starts
    $handle = fopen($file,"c"); 
    $output = shell_exec('grep -aobE "moov" '.$file);
    $moov_pos = preg_replace('/moov:(\d+)/i', '\\1', $output);
    $moov_pos_ex = strtoupper(str_pad(dechex($moov_pos - 24), 8, "0", STR_PAD_LEFT));
    fwrite($handle, $threegp_header);
    $tmp = '';
        foreach(str_split($moov_pos_ex,2) as $hex)
        {
                 $tmp .= pack('C*', hexdec($hex));
        }
    fwrite($handle, $tmp);
    fclose($handle);


  }
  echo "phone disconnected\n";


}
  @fclose($handle);
  fclose($socket);
?>
</code>

depois de algumas experiências, desta vez vlc / mplayer parece que pode jogá-lo .. ainda alguns problemas com áudio (mas eu acho que tenho algo errado no lado do Android)

questionAnswers(2)

yourAnswerToTheQuestion