2010-10-19 8 views
29

Me gustaría transmitir video desde una cámara de iPhone a una aplicación que se ejecuta en una Mac. Piense en algo así como el video chat, pero de una sola manera, desde el dispositivo hasta la aplicación del receptor (y no es el chat de video).¿Qué técnicas son las mejores para vivir los datos de la cámara de video de Stream para un equipo?

Mi entendimiento básico hasta el momento:

  1. Puede utilizar AVFoundation para obtener datos de la cámara de vídeo 'en vivo' sin guardar en un archivo, pero es sin compresión de datos y por lo tanto tendría que manejar la compresión por mi cuenta .
  2. No hay soporte integrado de AVCaptureOutput para enviar a una ubicación de red, tendría que trabajar en esto por mi cuenta.

¿Tengo razón sobre lo anterior o ya estoy fuera de la pista?

Apple Tech Q&A 1702 brinda información sobre cómo guardar fotogramas individuales como imágenes. ¿Es esta la mejor manera de hacerlo? ¿Ahorrando 30 fps y algo así como ffmpeg para comprimirlos?

Hay mucha discusión sobre la transmisión en vivo al iPhone pero mucha menos información sobre las personas que envían videos en vivo. Espero algunos golpes amplios para que apunte en la dirección correcta.

+2

Hi.Did ha implementado esta funcionalidad? Éntrenos en actualizar como respuesta aquí o dame algunos enlaces para hacer esto en mi proyecto – Ramz

+0

¿me pueden ayudar para la pregunta http://stackoverflow.com/questions/40079842/ios- rotar-filtrar-video-secuenciar-en-ios O me puede ayudar con su código de muestra de trabajo :) –

Respuesta

19

Esto depende en gran medida de la resolución de destino y del tipo de velocidad de fotogramas al que se dirige.

Desde un punto de vista abstracto, que probablemente tendría un hilo de captura para llenar un buffer directamente de AVCaptureOutput, y un hilo de comunicación para enviar y REZERO la memoria intermedia (acolchada si es necesario) a un host especificado previamente cada x milisegundos.

Después de realizar la transferencia de datos inicial, trabajaría para alcanzar 15 fps con la resolución más baja y subir hasta que el búfer se desborde antes de que el hilo de comunicación pueda transmitir, lo que requeriría equilibrar la resolución de la imagen y el tamaño del búfer. GSM, y pronto serán tamaños de trama CDMA), y finalmente la velocidad máxima a la que puede transmitir ese búfer.

+0

¿Cómo puedo transmitir marcos de audio y video? –

24

Puede usar AVCaptureVideoDataOutput y sampleBufferDelegate para capturar cuadros comprimidos sin formato, luego solo necesita transmitirlos a través de la red. AVFoundation proporciona una API para codificar fotogramas para archivos de video locales, pero no proporciona ninguna para la transmisión a la red. Su mejor opción es encontrar una biblioteca que transmita marcos sin formato a través de la red. Comenzaría con ffmpeg; Creo que libavformat admite RTSP, mira el código de ffserver.

Tenga en cuenta que debe configurar AVCaptureVideoDataOutput para proporcionar marcos comprimidos, por lo que evita tener que comprimir cuadros de video sin la codificación de hardware.

+0

Ambas fueron buenas respuestas útiles. Fue difícil decidir. ¡Gracias! – Hunter

Cuestiones relacionadas