samsung para pantalla interno grabar con como celular app aplicaciones android upload video-recording helix-server

para - ¿Cómo grabar un video directamente en el servidor Helix desde mi dispositivo Android?



grabar pantalla android con audio interno (2)

Como dijo @guillaume, el mejor enfoque para resolver este problema es cargar el archivo grabado desde su dispositivo a su base de datos utilizando el protocolo FTP.

Hice un proyecto similar donde los dispositivos Android necesitaban acceso a una base de datos remota. Esto se logró mediante el uso del Protocolo HTTP desde el sistema Android. Este tutorial realmente se rompió y describió cómo escribir el script PHP, cómo funciona el protocolo HTTP en Android y cómo funciona el script en conjunto con la base de datos remota:

http://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/

Soy nuevo en el desarrollo del lado del servidor. Quiero trabajar en una aplicación y necesito grabar un video en el servidor Helix desde mi dispositivo Android a través de mi aplicación. He instalado el servidor Helix en una PC con Windows Server.

En la aplicación de Android, estoy tratando de cargar un video grabado en el servidor Helix. He implementado mi aplicación para grabar el video en la tarjeta SD, pero me gustaría grabar y guardar ese video directamente en el servidor Helix. He implementado mi aplicación de Android de la siguiente manera:

public class NewRecordingVideo extends Activity implements SurfaceHolder.Callback { private MediaRecorder recorder; boolean flag = false; boolean startedRecording = false; boolean stoppedRecording = false; SurfaceHolder mHolder; SurfaceView videoSView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_main); recorder = new MediaRecorder(); recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); videoSView = ((SurfaceView)findViewById(R.id.surfaceView1)); mHolder=videoSView.getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ((Button)findViewById(R.id.startBtn)).setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { if(startedRecording == false) { recorder.start(); startedRecording = true; Toast.makeText(NewRecordingVideo.this, "Your video is recording", Toast.LENGTH_LONG).show(); } else if (startedRecording == true && stoppedRecording == false) { recorder.stop(); recorder.release(); recorder = null; stoppedRecording = true; } } }); ((Button)findViewById(R.id.stopBtn)).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { recorder.stop(); recorder.release(); recorder = null; stoppedRecording = true; Toast.makeText(NewRecordingVideo.this, "Your video recorded ", Toast.LENGTH_LONG).show(); finish(); } }); } public Surface getSurface() { return mHolder.getSurface(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { try { Socket socket = new Socket("IP address", 8008); ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); Log.v("find about connection","====>"+socket.isConnected()); recorder.setOutputFile("/sdcard/recording.3gp"); // Here I would like to record my video (recording.3gp) on helix server directly recorder.setPreviewDisplay(mHolder.getSurface()); recorder.prepare(); } catch (Exception e) { String message = e.getMessage(); recorder.release(); recorder = null; } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (recorder != null) { recorder.release(); recorder = null; } } }

Del código anterior: ¿Cómo puedo guardar mi archivo de grabación de video en el servidor Helix directamente? ¿Debo hacer alguna implementación en el desarrollo del lado del servidor?


La relación entre el tamaño de un video y la capacidad de carga de la red en un intervalo de tiempo dado es baja para cargar / grabar simultáneamente la transmisión de video, a menos que el usuario tenga una conexión celular LTE muy rápida.

Sin embargo, cuando se realiza la grabación, puede cargar el archivo a su servidor a través de un protocolo FTP. Se recomienda dar a cada archivo grabado un Universal Unique Identifier (UUID) para poder marcar la diferencia entre todos los demás archivos grabados. Utilicé este código (no probado para Android, pero funciona bien en JavaSE 7). Como es un proceso bastante largo (pero rápido), te hice un resumen. (Niza, ¿eh?)

Resumen

1) Generar un UUID con UUID.randomUUID().toString(); que se utilizará durante todo el proceso para identificar el archivo grabado.
2) Grabe el archivo con el nombre "sdcard/" + uuid + ".3gp"
3) Cuando finalice la grabación, cargue el archivo a su servidor a través de una carga de FTP.
4) Solicite a su servidor remoto que ejecute el script PHP que haga lo que tenga que hacer con el archivo grabado, como la manipulación de la base de datos, etc. (si existe un script, si no necesita hacer esto, simplemente omita este paso).
5) Solicite a su servidor remoto que elimine el archivo, si es necesario. (hecho a través de otro script PHP)

Código

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; public class FTPUploader { static void doUpload(String uuid) { File fileSource = new File("/sdcard/" + uuid + ".3gp"); // Or new File("/sdcard/recording.3gp"); String fileName = fileSource.getName(); /** YOUR SERVER''S INFORMATIONS **/ String userName = "USERNAME"; String password = "PASSWORD"; String ftpServer = "FTP.SERVER.COM"; /****/ StringBuffer sb = new StringBuffer("ftp://"); sb.append(userName); sb.append('':''); sb.append(password); sb.append(''@''); sb.append(ftpServer); sb.append("/"); /**WARNING: Path extension; it will be added after connection *The file must be at your server''s root. Otherwise the PHP script won''t detect it. **/ sb.append(fileName); sb.append(";type=i"); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { URL url = new URL(sb.toString()); URLConnection urlc = url.openConnection(); bos = new BufferedOutputStream(urlc.getOutputStream()); bis = new BufferedInputStream(new FileInputStream(fileSource)); int i; // read byte by byte until end of stream while ((i = bis.read()) != -1) { bos.write(i); } } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) try { bis.close(); } catch (IOException ioe) { ioe.printStackTrace(); System.out.println("IO exception after if bis " + ioe); } if (bos != null) try { bos.close(); } catch (IOException ioe) { ioe.printStackTrace(); System.out.println("IO exception after if " + ioe); } } } } import java.util.UUID; public class Main { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String uuid = UUID.randomUUID().toString(); //Assuming you set your file''s name as uuid + ".3gp" FTPUploader.doUpload(uuid); //Launches a FTP Upload //Then, if you want to ask your server to "process" the file you gave him, you can perform a simple HTTP request: try { String url = "http://YOURSITE.COM/shell.php"; String charset = "iso-8859-1"; String param1 = uuid; String query = String.format("id=%s", URLEncoder.encode(param1, charset)); URLConnection connection = new URL(url + "?" + query).openConnection(); connection.setRequestProperty("Accept-Charset", charset); connection.getInputStream(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //This try {}catch{} requests a PHP script: this script is "triggered" just like if it was loaded in your web browser, with as parameter the file UUID (`shell.php?id=UUID`), so that he knows wich file on his server he has to process. }

BONIFICACIÓN : si desea eliminar el archivo de su servidor cuando haya terminado con él, puede ejecutar la misma línea que antes, pero reemplazando "shell.php" por otro script PHP que puede llamar "delete.php". Contendría las siguientes líneas:

<?php $recordedFile = $_GET[''id''] . ".3gp"; unlink($recordedFile); ?>

Por ejemplo: siguiendo la solicitud http://www.YOURSERVER.com/delete.php?id=123456789 elimina http://www.YOURSERVER.com/123456789.3gp en su servidor.

Otro código de muestra

Hace unas semanas, configuré una aplicación Java (la llamé Atom ...) que analiza la voz y respondo todas las preguntas (usando la API de reconocimiento de voz de Google (no oficial) y la API de Wolfram | Alpha). Definitivamente, deberías echarle un vistazo a GitHub , hay todos los archivos utilizados, tanto en el escritorio como en el servidor . Espero haberte ayudado!

EDITAR: Para trabajar con su servidor Helix.

Encontré este tutorial sobre Cómo administrar y usar FTP en simplehelix.com y este video Windows Server 2008 R2 - Configuración de un servidor FTP . Solo tiene que seguir las instrucciones, pero omita el paso llamado Iniciar sesión en una cuenta FTP porque solo explica cómo administrar los archivos desde un cliente de aplicaciones (como FileZilla o CuteFTP). Esto se hace con el fragmento de Java que he escrito anteriormente. Además, si te puede ayudar, encontré este video .

NOTA: En el primer código (Java), a menos que el directorio raíz al que acceda su servidor FTP sea la carpeta que contiene todos los archivos de medios, deberá reemplazar sb.append("/"); por la ruta a la carpeta donde se encuentran los archivos de medios que se pueden transmitir. Ejemplo de formulario, sb.append("/username/media/"); .