vivo transmitir puedo programas programa para pantalla grabar directo desde como iphone http video streaming live

iphone - puedo - transmitir en vivo youtube android



Subir videos de transmisiĆ³n en vivo desde iPhone como Ustream o Qik (2)

No estoy seguro de que puedas hacer eso con HTTP Live Streaming. HTTP Live Streaming segmenta el video en 10 segundos (aprox.) De longitud y crea una lista de reproducción con esos segmentos. Por lo tanto, si desea que el iPhone sea el servidor de secuencias con HTTP Live Streaming, tendrá que encontrar la manera de segmentar el archivo de video y crear la lista de reproducción.

Cómo hacerlo está más allá de mi conocimiento. Lo siento.

¿Cómo se transmiten videos en vivo desde un iPhone a un servidor como Ustream o Qik? Sé que hay algo llamado Http Live Streaming de Apple, pero la mayoría de los recursos que encuentro solo hablan sobre la transmisión de videos desde el servidor al iPhone.

¿El Http Living de Apple está transmitiendo algo que debería usar? ¿O algo mas? Gracias.


No hay una forma incorporada de hacer esto, hasta donde yo sé. Como dices, HTTP Live Streaming es para descargar al iPhone.

La forma en que lo estoy haciendo es implementar una sesión AVCaptureSession, que tiene un delegado con una devolución de llamada que se ejecuta en cada fotograma. Esa devolución de llamada envía cada fotograma a través de la red al servidor, que tiene una configuración personalizada para recibirlo.

Aquí está el flujo: https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW2

Y aquí hay un código:

// make input device NSError *deviceError; AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *inputDevice = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&deviceError]; // make output device AVCaptureVideoDataOutput *outputDevice = [[AVCaptureVideoDataOutput alloc] init]; [outputDevice setSampleBufferDelegate:self queue:dispatch_get_main_queue()]; // initialize capture session AVCaptureSession *captureSession = [[[AVCaptureSession alloc] init] autorelease]; [captureSession addInput:inputDevice]; [captureSession addOutput:outputDevice]; // make preview layer and add so that camera''s view is displayed on screen AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.frame = view.bounds; [view.layer addSublayer:previewLayer]; // go! [captureSession startRunning];

Entonces el delegado del dispositivo de salida (aquí, self) tiene que implementar la devolución de llamada:

-(void) captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection { CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer( sampleBuffer ); CGSize imageSize = CVImageBufferGetEncodedSize( imageBuffer ); // also in the ''mediaSpecific'' dict of the sampleBuffer NSLog( @"frame captured at %.fx%.f", imageSize.width, imageSize.height ); }

EDITAR / ACTUALIZAR

Varias personas han preguntado cómo hacer esto sin enviar los cuadros al servidor uno por uno. La respuesta es compleja ...

Básicamente, en la función didOutputSampleBuffer anterior, agrega las muestras en un AVAssetWriter . De hecho, tenía tres escritores de activos activos a la vez (pasado, presente y futuro) administrados en diferentes hilos.

El escritor anterior está en proceso de cerrar el archivo de película y subirlo. El escritor actual está recibiendo los búferes de muestra de la cámara. El futuro escritor está en el proceso de abrir un nuevo archivo de película y prepararlo para datos. Cada 5 segundos, configuro past=current; current=future past=current; current=future y reinicia la secuencia.

Esto luego sube videos en trozos de 5 segundos al servidor. Puede unir los videos junto con ffmpeg si lo desea, o transcodificarlos en transmisiones de transporte MPEG-2 para HTTP Live Streaming. Los datos de video en sí están codificados en H.264 por el escritor del activo, por lo que la transcodificación simplemente cambia el formato del encabezado del archivo.