Transmisión de vídeo desde el 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 intentando crear una aplicación para guardar Una secuencia de vídeo desde una cámara móvil a un servidor remoto. (He encontrado varios ejemplos en el código de google para Android parte: ipcamera-for-android, spydroid-ipcamera, etc.)
He leído algunas respuestas aquí y alrededor de la red, pero no puedo encontrar la solución sobre cómo "leer" y guardar la corriente de datos en el lado del servidor.
- Cómo evitar el tiempo de espera de sesión en Android
- Adición de VideoView a un diseño XML
- Android MediaRecorder setOutPutFile () para transmitir utilizando Socket
- Androide a androide flujo de vídeo en vivo a través de Wifi directo (P2P)
- Cómo grabar streaming de vídeo?
Mi conocimiento de java es pobre, así que prefiero ser capaz de crear scripts de servidor en PHP (usando sockets de servidor, u otras cosas). ¿Alguien puede ayudar en esta parte?
ACTUALIZAR
Utilizando mi poco conocimiento de herramientas como mplayer / ffmpeg mencorer Puedo guardar la secuencia de vídeo … por ejemplo, utilizando ipcamera-for-android y su servidor nanohttp utilizando en el lado del servidor:
ffmpeg-i "http://{ip of android phone}:8080/live.flv" /my/server/path/stream.flv
Sin embargo, sólo se puede utilizar en LAN, necesito que el servidor de conexión móvil y no viceversa.
ACTUALIZAR 2
Algunos progresos .. utilizando este script en el lado del servidor
#!/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); ?>
Sin embargo, el archivo 3gp no se puede reproducir ..
ACTUALIZACIÓN 3
#!/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); ?>
Después de algunos experimentos, esta vez vlc / mplayer parece que se puede jugar .. todavía algunos problemas con el audio (pero creo que tengo algo mal en el lado androide)
- android VideoView aumentar el almacenamiento en búfer
- Android 3.x / HLS cómo iniciar al final de la secuencia
- Retardo de streaming de video de Android: un mundo a través de una cámara de fotos de somene elses
- Android Video Streaming - ¿Dispositivo compatible?
- Android - Transmitir la cámara como RTMP stream
- android - cómo transmitir vídeo desde el teléfono al servidor?
- RTSP streaming con resultados de video HTML5 en el servidor murió error (100,0) en Android
- Android VideoView guardar RTSP secuencia
Probablemente va a querer usar la funcionalidad de socket del servidor de PHP.
Aquí está un tutorial práctico que pasa por lo que necesita hacer para implementar la transmisión de datos.
Dependiendo de la secuencia entrante (protocolo, etc.), has terminado o quieres terminar usando:
No estoy seguro de lo que está dispuesto a utilizar / instalar en la LÁMPARA, o lo que usted prefiere, pero sé VLC puede capturar fácilmente una corriente entrante.
http://wiki.videolan.org/Documentation:Streaming_HowTo/Receive_and_Save_a_Stream
Por supuesto, la versión de la línea de comandos de VLC es probablemente lo que quieres. Nunca lo he hecho, no estoy seguro de cómo funciona, espero que no instale una tonelada métrica de paquetes adicionales. Es algo que hay que mirar con respecto a posibles preocupaciones.
- Android Wear: Programe la pantalla de despertador
- ¿Cómo manejar el despliegue de aplicaciones móviles de plataforma con etiqueta blanca?