iphone - recolive - switcher studio español
¿Qué técnicas son mejores para vivir los datos de la cámara de video de Stream para un equipo? (2)
Depende mucho de la resolución del objetivo y del tipo de rendimiento de velocidad de fotogramas al que se dirige.
Desde un punto de vista abstracto, probablemente tendría un hilo de captura para llenar un búfer directamente desde AVCaptureOutput, y un hilo de comunicaciones para enviar y volver a cero el búfer (acolchado si fuera necesario) a un host especificado previamente cada x milisegundos.
Después de lograr la transferencia de datos inicial, trabajaría en lograr 15 fps con la resolución más baja y subiría 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, el tamaño del búfer (probablemente dependiente de GSM, y ser tamaños de fotogramas CDMA), y finalmente la velocidad máxima a la que puede transmitir ese búfer.
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).
Mi entendimiento básico hasta ahora:
- Puede usar AVFoundation para obtener datos de la cámara de video en vivo sin guardarlos en un archivo, pero son datos sin comprimir y, por lo tanto, tendría que manejar la compresión por mi cuenta.
- 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 proporciona 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.
Puede usar AVCaptureVideoDataOutput
y sampleBufferDelegate
para capturar fotogramas comprimidos sin sampleBufferDelegate
, luego solo necesita transmitirlos a través de la red. AVFoundation
proporciona una API para codificar cuadros en archivos de video locales, pero no proporciona ningún tipo de 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 ventaja de la codificación del hardware.