Transmisión de video desde la cámara de Android al servidor

286

He visto mucha información sobre cómo transmitir video desde el servidor a un dispositivo Android, pero no mucho sobre el otro lado, ala Qik. ¿Podría alguien señalarme en la dirección correcta aquí, o darme algún consejo sobre cómo abordar esto?

JCL
fuente
9
Me gustaría ver una respuesta a esto también. ¿Ya se te ocurrió algo?
Jeremy White
No, renunció a la transmisión. Simplemente superar la API de MediaRecorder para enviarlo fue lo suficientemente difícil. Sin embargo, puede consultar el código sipdroid, parece que lo han hecho funcionar.
JCL
Sin embargo, el código del video no está en la fuente Sipdroid en línea :(
Donal Rafferty
1
Puede buscar en ffserver un componente en ffmpeg.
Vinay
1
Tengo una pregunta relacionada con esta que podría ser de su interés también. Se trata de impulsar la transmisión de video a más de 3g una vez que haya realizado la captura de video y la parte del contenedor. bit.ly/vYpWGy
michael

Respuestas:

123

He alojado un proyecto de código abierto para habilitar el teléfono Android a la cámara IP:

http://code.google.com/p/ipcamera-for-android

Los datos de video sin procesar se obtienen de LocalSocket, y el MDAT MOOV de MP4 se verificó primero antes de la transmisión. El video en vivo está empaquetado en formato FLV y se puede reproducir a través del reproductor de video Flash con un servidor web incorporado :)

Zhou Chang
fuente
26
Haz clic en el botón "Fuente". Además, quien rechazó a este tipo es una herramienta.
Nicholi
3
Me da errores ... como, java.lang.UnsatisfiedLinkError: No se pudo cargar teaonly: findLibrary devolvió nulo ... Si alguien tiene una solución, compártala. Gracias
anddev
1
@mpp: la aplicación tiene código NDK. Puede compilarlo usted mismo, o tomar los archivos .so del apk que está en ese proyecto de Google Code en "Descargas".
Turnsole
1
También obtengo el error java.lang.UnsatisfiedLinkError. Mencione brevemente los pasos para eliminar ese error.
1
Para aquellos que no entienden el UnsatisfiedLinkError: deben construir el código C con el NDK. En pocas palabras, corre ndk-build. Para obtener más información, lea la documentación de NDK .
Paul Lammertsma
70

Me tomó algo de tiempo, pero finalmente logré hacer una aplicación que haga exactamente eso. Consulte la página de códigos de Google si está interesado: http://code.google.com/p/spydroid-ipcamera/ Agregué muchos comentarios en mi código (principalmente, mira CameraStreamer.java), por lo que debería ser bastante autoexplicativo. La parte difícil fue comprender el RFC 3984 e implementar un algoritmo adecuado para el proceso de empaquetado. (Este algoritmo en realidad convierte la transmisión mpeg4 / h.264 producida por MediaRecorder en una buena transmisión rtp, de acuerdo con el rfc)

Adiós

Simón
fuente
2
¡Muchas gracias! Actualmente no puedo hacer que funcione correctamente con h264 ... y no puedo cambiarlo a h263 (no tengo idea de cómo hacerlo). de todos modos, gracias hombre!
Yotes
1
Estoy usando lo mismo, pero cuando se trata de transmitir en Android con rtsp, dice que no se pudo reproducir el video. Estoy usando VideoView. ¿Puedes por favor ayudarme?
Rohit Mandiwal
1
Funciona muy bien (¡hasta ahora!) Lo estoy usando para transmitir video desde Glass (después de un poco de trabajo / edición / descifrado), pero hasta ahora solo puedo conectarlo desde un navegador basado en Windows (Chrome) con Complemento vlc. VLC en Android / iPad o cualquier otro reproductor rtsp no recogerá la transmisión (una de ellas se veía bien, pero estaba tratando de obtener una transmisión basada en el nombre del dispositivo, que este código devolvió como 0 y, por lo tanto, no se pudo resolver). Aún así, obteniendo resultados después de un día de codificación gracias a ti, ¡así que felicitaciones!
MacD
@MacD ¿Utiliza el código spydroid-ipcamera (todo el proyecto o solo algunas clases? ¿Puede decirme?) O esta biblioteca github.com/fyhertz/libstreaming para transmitir en Google Glass? ¡¡Muchas gracias!!
Bae
Hola, ¿podría explicar cómo implementar este proyecto en el estudio de Android? No puedo hacer que se ejecute
utdev
24

Estoy investigando esto también, y aunque no tengo una buena solución para ti, logré desenterrar el código de video de SIPDroid:

http://code.google.com/p/sipdroid/source/browse/trunk/src/org/sipdroid/sipua/ui/VideoCamera.java

ObsidianX
fuente
Lo que han hecho allí es transmitir mediante paquetes RTP a un servidor. Ahora la pregunta es ¿qué se está haciendo en el servidor? qué hace la transcodificación y cómo se transmite
Azlam
No ... no elegí el enfoque SIPDroid, era demasiado complejo. Luego hice algo con un servidor MJPEG
Azlam
19

Creé un SDK de código abierto llamado Kickflip para hacer que la transmisión de video desde Android sea una experiencia indolora.

El SDK demuestra el uso de la API MediaCodec de Android 4.3 para dirigir los paquetes del codificador de hardware del dispositivo directamente a FFmpeg para RTMP (con librtmp) o transmisión HLS de H.264 / AAC. También muestra los efectos OpenGL en tiempo real (titulación, croma, fundidos) y grabación en segundo plano.

Gracias así, y especialmente, fadden .

dbro
fuente
¿puede transmitir a cualquier cliente compatible con HLS (no solo a su servidor)?
4ntoine
44
@dbro Intento conocer su servicio, pero necesita mi información de inicio de sesión antes de que pueda ver su precio. Es como si ustedes coleccionaran direcciones de correo electrónico. Si esa no es su intención, debe hacer que la información de precios esté disponible: de la misma manera que lo han hecho Parse y App Engine y muchos otros.
alumno
¿Es posible que una cámara de video envíe un video a Kickflip y luego vaya al teléfono Android? ¿
Cuál
11

Aquí hay un artículo completo sobre la transmisión de video de la cámara de Android a una página web.

Android Streaming Live Camera Video a la página web

  1. Libstreaming usado en la aplicación de Android
  2. En el lado del servidor, Wowza Media Engine se usa para decodificar la transmisión de video
  3. Finalmente, jWplayer se usa para reproducir el video en una página web.
Esbirro
fuente
Esto utiliza componentes de código cerrado. ¿Alguna alternativa de código abierto?
Raj
Puede usar JavaCV para esto. Lo usé en mi proyecto para hacer transmisión en vivo desde un dispositivo Android al servidor de medios wowza. También puede usar github.com/begeekmyfriend/yasea
Chinthaka Devinda
¿es gratis la transmisión de libs?
Akrramo
¿Podemos usar un dispositivo de tarjeta de sonido como fuente de entrada de audio y no un micrófono en libstreaming?
user2980181
5

Puedo enviar el video de la cámara en vivo desde el móvil a mi servidor. Con este enlace, vea el enlace

Consulte el enlace anterior. Hay una aplicación de muestra en ese enlace. Solo necesita configurar su url de servicio en RecordActivity.class.

Ejemplo como: ffmpeg_link = "rtmp: // la dirección del servidor: 1935 / live / venkat";

podemos enviar videos de tipo H263 y H264 usando ese enlace.

Venkat
fuente
He usado el código usando el enlace anterior, pero ni siquiera pude comenzar a grabar. obteniendo una excepción "No Video to Stream". ¿Tienes alguna idea sobre esto?
Akhilesh Sk
@AkhileshSk usando el código anterior, puede enviar el video en vivo a través de rtmp url a su servidor. No es para grabar. si desea grabar el video, debe grabarlo en el lado del servidor.
Venkat
Hey @ Venkat es posible enviar un vídeo en directo desde una cámara de teléfono Android, ¿tiene algunos enlaces de código, como el uso de Youtube en vivo, etc
Lutaaya Huzaifah Idris
@LutaayaHuzaifahIdris sí, es posible. Trabajé previamente en esto.
Venkat
Hola @Venkat, ¿puedes ayudarme con esto? No puedo encontrar el archivo RecordActivity.class
sanyam
1

Consultar la biblioteca de Yasea

Yasea es un cliente de transmisión de Android. Codifica datos YUV y PCM de la cámara y el micrófono a H.264 / AAC, se encapsula en FLV y se transmite a través de RTMP.

Característica:

  1. Android mini API 16.
  2. Codificación rígida H.264 / AAC.
  3. Codificación suave H.264.
  4. Transmisión RTMP con controlador de devolución de llamada estatal.
  5. Orientación dinámica vertical y horizontal.
  6. Interruptor caliente de las cámaras delantera y trasera.
  7. Grabando a MP4 durante la transmisión.
Hamed Ghadirian
fuente
0

Mux (mi empresa) tiene una aplicación de Android de código abierto que transmite RTMP a un servidor, incluida la configuración de la cámara y las interacciones del usuario. Está diseñado para transmitir a la API de transmisión en vivo de Mux, pero puede transmitir fácilmente a cualquier punto de entrada RTMP.

heff
fuente