Transmisiones de publicación — iOS (Swift)

Una vez que haya conectado a una sesiónpuede publicar un flujo que otros clientes conectados a la sesión puedan ver.

Este tema incluye las siguientes secciones:

Inicialización de un objeto OTPublisher

El OTPublisher El objeto se utiliza para capturar un flujo de audio y vídeo desde el micrófono y la cámara del dispositivo para utilizarlo en una sesión de OpenTok. El view La propiedad del objeto contiene la vista del vídeo que publicas:

let publisher = OTPublisher(delegate: self, settings: OTPublisherSettings())!
if let publisherView = publisher.view {
	self.view.addSubview(publisherView)
	publisherView.frame = CGRect(x: 0, y: 0, width: 200, height: 150)
}

Implementa los métodos del protocolo OTPublisherDelegate en el objeto que especifiques como objeto delegado. Estos métodos se llaman cuando se producen eventos relacionados con el editor.

Pasa el objeto Publisher a la OTSession publish(_:error:) Método para publicar un flujo en una sesión. Véase Publicar un flujo.

Puedes configurar otras propiedades del objeto OTPublisherSettings para definir ajustes personalizados para el editor:

let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Bob's video"
publisherSettings.audioTrack = false
publisherSettings.videoTrack = true
publisherSettings.cameraResolution = .high
publisherSettings.cameraFrameRate = .rate30FPS
let publisher = OTPublisher(delegate: self, settings: publisherSettings)!

Ten en cuenta que en las sesiones que utilizan el OpenTok Media Router (sesiones con el modo multimedia enrutado), al reducir la frecuencia de imagen se reduce proporcionalmente el ancho de banda utilizado por el flujo. Sin embargo, en las sesiones que tienen el modo de medios establecido en retransmitido, la reducción de la frecuencia de imagen no reduce el ancho de banda del flujo.

Puede utilizar un capturador de vídeo personalizado para publicar un flujo con una fuente de vídeo personalizada - véase Uso de un capturador de vídeo personalizado. También puedes utilizar el capturador de vídeo personalizado para publicar una transmisión en la que se comparta la pantalla; consulta Compartir pantalla.

También puedes utilizar una fuente de audio personalizada para la transmisión publicada; consulta Uso de un controlador de audio personalizado.

Comprobar si un cliente tiene capacidades de publicación

Una vez que te hayas conectado a una sesión, puedes comprobar si el cliente puede publicar. Comprueba el valor de la OTSession capablilites.canPublish propiedad. Si se establece en true, el cliente puede publicar:

if let capabilities = session.capabilities, capabilities.canPublish {
    // The client can publish.
} else {
    // The client cannot publish.
    // You may want to notify the user.
}

Para publicar, el cliente debe conectarse a la sesión con un token al que se le haya asignado un rol que permita la publicación. Consulte el Visión general de la creación de tokens.

Comprobación del acceso a la cámara

Te recomendamos que compruebes los permisos de acceso a la cámara de la aplicación antes de publicarla y, si se deniega el acceso, que indiques al usuario final cómo configurar los permisos de acceso de la aplicación. (El usuario final puede habilitar el acceso a la cámara a través de los Ajustes de iOS: Privacidad > Cámara.)

Se solicita al usuario final que conceda acceso a la cámara a cualquier aplicación que lo solicite. Puedes controlar cuándo se muestra este mensaje llamando a AVCaptureDevice requestAccess(for:completionHandler:) con AVMediaType.Video, lo que mostrará el mensaje de solicitud la primera vez que se ejecute. Las llamadas posteriores ejecutarán el controlador de finalización con la preferencia guardada por el usuario.

AVCaptureDevice.requestAccess(for: .video) { granted in
	if granted {
		// Access to the camera is granted. You can publish.
	} else {
		// Access to the camera is not granted.
	}
}

Publicar un flujo

Una vez creado el objeto Publisher (véase Inicialización de un objeto OTPublisher), puedes pasarlo a la OTSession publish(_:error:) de un objeto OTSession para publicar el flujo en la sesión:

var error: OTError?
session.publish(publisher, error: &error)

if let error = error {
	print("publishing failed with error: \(error)");
}

Este código supone que session es un objeto Session y que el cliente se ha conectado a la sesión. Para obtener más información, consulta Cómo unirse a una sesión.

El OTPublisherDelegate publisher(_:streamCreated:) El mensaje se envía cuando el editor comienza a transmitir datos a la sesión.

Impedir que una editorial transmita en streaming

Puedes impedir que el editor transmita en directo a la sesión llamando a la función OTSession unpublish(_:error:) método del objeto OTSession:

var error: OTError?
session.unpublish(publisher, error: &error)

if let error = error {
	print("unpublishing failed with error: \(error)");
}

El OTPublisherDelegate publisher(_:streamDestroyed:) Se envía este mensaje cuando el editor deja de transmitir datos a la sesión. Cuando se envíe este mensaje, elimina la vista del editor de su vista superior:

publisher.view?.removeFromSuperview();

Probar el flujo de un editor

Puedes publicar un flujo de prueba y comprobar sus estadísticas de audio y vídeo para determinar el tipo de flujo (como alta resolución o sólo audio) que admite tu conexión.

Para obtener estadísticas de una transmisión publicada por el cliente local, debes utilizar una sesión que emplee el OpenTok Media Router (las sesiones con el modo multimedia (configurado como «enrutado»). A continuación, puedes utilizar el networkStatsDelegate método del objeto OTSubscriberKit para obtener estadísticas de audio y vídeo de la transmisión que publicas. Consulta este tema para más información.

El prueba-de-red-opentok repo incluye código de ejemplo para mostrar cómo utilizar las estadísticas de un flujo de prueba antes de publicarlo en una sesión.