Transmisión de video desde dispositivo Android al servidor LAMP

a partir de este punto:http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system Estoy tratando de crear una aplicación para guardar un flujo de video desde una cámara móvil a un servidor remoto. (Encontré varios ejemplos en el código de Google para la parte de Android: ipcamera-for-android, spydroid-ipcamera, etc.)

Leí algunas respuestas aquí y alrededor de la red, pero no puedo encontrar la solución sobre cómo "leer" y guardar el flujo de datos en el lado del servidor.

Mi conocimiento de java es escaso, por lo que prefiero poder crear un script del lado del servidor en PHP (usando sockets de servidor u otras cosas). Alguien puede ayudar en esta parte?

ACTUALIZAR

utilizando mi escaso conocimiento de herramientas como mplayer / ffmpeg mencorer, puedo guardar el flujo de video ... por ejemplo, usando ipcamera-for-android y su servidor nanohttp usando desde el servidor:

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

Sin embargo, solo se puede utilizar en LAN, necesito ese servidor de conexión móvil y no viceversa.

ACTUALIZACIÓN 2

Algún progreso ... usando este script en el lado del 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>

Sin embargo, el archivo 3GP aún no se puede reproducir.

ACTUALIZACIÓN 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>

después de algunos experimentos, esta vez parece que vlc / mplayer puede reproducirlo ... aún algunos problemas con el audio (pero creo que tengo algo mal en el lado de Android)

Respuestas a la pregunta(2)

Su respuesta a la pregunta