Suscribirse a canales — iOS
Una vez que haya conectado a una sesión, puedes suscribirte a las transmisiones de la sesión. Cuando te suscribes a una transmisión, puedes mostrar su vídeo en la aplicación.
Este tema incluye las siguientes secciones:
- Detección de flujos en una sesión
- Suscribirse a una transmisión
- Darse de baja de un canal
- Detectar cuándo los flujos abandonan una sesión
- Detectar cuándo se desactiva el vídeo de un suscriptor
- Obtener información sobre un flujo
- Ajuste de la frecuencia de imagen y la resolución preferidas
Reconexión automática
Si un cliente pierde la conexión con un flujo al que está suscrito (por ejemplo, debido a una interrupción de la conectividad de red en cualquiera de los clientes), intentará volver a conectarse automáticamente al flujo. Cuando se interrumpe el flujo y el cliente intenta volver a conectarse, el [OTSubscriberKitDelegate subscriberDidDisconnectFromStream:] Se envía un mensaje al delegado del objeto OTSubscriberKit. Cuando se restablece la conexión, el [OTSubscriberKitDelegate subscriberDidReconnectToStream:] Se envía el mensaje. Si el cliente no puede restablecer la conexión, el [OTSessionDelegate session:streamDestroyed:] se envía el mensaje.
En respuesta a estos eventos, tu aplicación puede (opcionalmente) mostrar notificaciones en la interfaz de usuario indicando los estados de desconexión temporal, reconexión y desconexión.
// OTSubscriber delegate callbacks:
- (void)subscriberDidDisconnectFromStream:(OTStream*)stream
{
// Display a user interface notification.
}
- (void)subscriberDidReconnectToStream:(OTStream*)stream
{
// Adjust user interface.
}
// OTSession delegate callback:
- (void)session:(OTSession*)session session:streamDestroyed:(OTStream*)stream
{
// Adjust user interface.
}
Detección de flujos en una sesión
El [OTSessionDelegate session:streamCreated:] Se envía un mensaje cuando se crea un nuevo flujo en una sesión. (Se crea un flujo cuando un cliente publica a la sesión). El sitio Objeto OTStream tiene propiedades que definen el flujo. Compara el connection propiedad del objeto OTStream con el connection propiedad del objeto OTSession para determinar si el flujo es uno de los que ha publicado tu cliente:
- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
NSLog(@"session streamCreated (%@)", stream.streamId);
// See the declaration of subscribeToSelf above.
if ([stream.connection.connectionId isEqualToString: session.connection.connectionId]) {
// This is my own stream
} else {
// This is a stream from another client.
}
}
Puedes suscribirte a una transmisión para mostrarla en tu aplicación. Consulta la siguiente sección.
Suscribirse a una transmisión
Para suscribirte a un flujo, llama a la función [OTSubscriber initWithStream:] método, pasando un objeto OTStream y un objeto delegado para recibir mensajes relacionados con los suscriptores. A continuación, llama al[OTSession subscribe:error] Método para empezar a suscribirse a la transmisión:
- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
OTError* error = nil;
[session subscribe:subscriber error:&error]
if (error) {
NSLog(@"subscribe failed with error: (%@)", error);
}
}
El [OTSubscriberDelegate subscriberDidConnectToStream:] se envía cuando la aplicación empieza a recibir el flujo del abonado. En este punto, puedes añadir la vista del suscriptor (representada por el icono OTSubscriber.view propiedad) a la aplicación:
- (void)subscriberDidConnectToStream:(OTSubscriber*)subscriber
{
[subscriber.view setFrame:CGRectMake(0, 300, 400, 300)];
[self.view addSubview:subscriber.view];
}
Darse de baja de un canal
Para dejar de reproducir una transmisión a la que estás suscrito, llama a la [OTSession unsubscribe:error:] método:
OTError* error = nil;
[session unsubscribe:_subscriber error:&error]
if (error) {
NSLog(@"unsubscribe failed with error: (%@)", error);
}
El suscriptor se ha desconectado. A continuación, elimina su vista de su supervista:
[subscriber.view removeFromSuperview:];
Detectar cuándo los flujos abandonan una sesión
Cuando los flujos abandonan una sesión, el [OTSession session: streamDestroyed:] Se envía el mensaje. Cuando se elimina un flujo, la vista de cualquier objeto `OTSubscriber` asociado a dicho flujo se elimina de su vista principal. Comprueba si el flujo no ha sido publicado por tu propio cliente y, en ese caso, elimina su vista de la vista principal.
- (void)session:(OTSession*)session streamDestroyed:(OTStream *)stream
{
NSLog(@"session streamDestroyed (%@)", stream.streamId);
if ([subscriber.stream.streamId isEqualToString:stream.streamId])
{
[_subscriber.view removeFromSuperview];
_subscriber = nil;
}
}
Detectar cuándo se desactiva el vídeo de un suscriptor
El representante del suscriptor envía el [OTSubscriberDelegate subscriberVideoDisabled:reason:] Mensaje que aparece cuando el vídeo del suscriptor está desactivado:
- (void)subscriberVideoDisabled:(OTSubscriber *)subscriber
reason:(OTSubscriberVideoEventReason)reason
{
NSLog(@"subscriber video disabled.");
}
El reason El parámetro se puede establecer en una de las siguientes constantes definidas en la enumeración OTSubscriberVideoEventReason:
OTSubscriberVideoEventPublisherPropertyChanged- El evento de vídeo fue causado por el editor de la secuencia de detener el flujo de vídeo.OTSubscriberVideoEventQualityChanged- El evento de vídeo ha sido causado por un cambio en la calidad del flujo de vídeo. La calidad del flujo puede cambiar debido a las condiciones de la red o al uso de la CPU por parte del suscriptor o del editor. Esta razón sólo se utiliza en sesiones que tienen el modo de medios configurado como "enrutado". (Véase El OpenTok Media Router y los modos multimedia.) Esta función del OpenTok Media Router hace que el suscriptor interrumpa la transmisión de vídeo cuando la calidad de la misma se deteriora y se envía el mensaje. Cuando las condiciones mejoran, la transmisión de vídeo se reanuda, y el[OTSubscriberKit subscriberVideoEnabled:reason:]se envía el mensaje. Cuando se interrumpe el flujo de vídeo, el abonado sigue recibiendo el flujo de audio, si lo hay.OTSubscriberVideoEventSubscriberPropertyChanged- El evento de vídeo ha sido causado por un cambio en el abonadoOTSubscriberKit.subscribeToVideopropiedad.
Si el flujo de vídeo se reanuda, el [OTSubscriberKit subscriberVideoEnabled:reason:] se envía el mensaje.
Cuando publique un flujo, puede evitar que se desactive su vídeo debido a la calidad del flujo. Antes de llamar a la función [OTSession publish:error:] establezca el método audioFallbackEnabled del objeto Publisher (o del objeto PublisherKit) a NO.
Obtener información sobre un flujo
El objeto OTStream tiene las siguientes propiedades que definen el flujo:
connection-El objeto OTConnection correspondiente a la conexión que está publicando el flujo. Puede compararlo con el objetoconnectiondel objeto OTSession para ver si el flujo está siendo publicado por su cliente.creationTime-La marca de tiempo NSDate para la hora de creación del flujo.hasAudio-(Boolean) Si el flujo tiene audio.hasVideo-(Boolean) Si el flujo tiene vídeo.name-(NSString) El nombre del flujo. Se define al inicializar el editor del flujo (véase Inicialización de un objeto OTPublisher).session—(OTSession) La sesión de OpenTok a la que está vinculada la transmisión.streamId—(NSString) El identificador único de la secuencia.videoDimensions-Un objeto CGSize que define las dimensiones actuales de la pista multimedia de vídeo en este flujo.videoType-(OTStreamVideoType) Si el flujo utiliza una fuente de vídeo de cámara (OTStreamVideoTypeCamera), una fuente de vídeo de pantalla compartida (OTStreamVideoTypeScreen), o una fuente de vídeo personalizada (OTStreamVideoTypeCustom). Véase Compartir pantalla.
Puedes configurar un OTSubscriberKitNetworkStatsDelegate objeto que permite al objeto OTSubscriberKit supervisar las estadísticas de la transmisión de un suscriptor. Para obtener estadísticas de bajo nivel sobre la transmisión, utiliza el [OTSubscriberKit getRtcStatsReport:] método.
Consulte guía del desarrollador de la observabilidad del cliente para obtener información detallada.
Ajuste de la frecuencia de imagen y la resolución preferidas
Al suscribirse a una transmisión que utiliza el función de vídeo escalable, puedes configurar la frecuencia de fotogramas y la resolución que prefieras para la transmisión que el cliente suscrito recibe del OpenTok Media Router. Para obtener más información, consulta SubscriberKit.preferredFrameRate y SubscriberKit.preferredResolution.
Nota: Estas preferencias dan por hecho que el editor utiliza la disposición predeterminada de la capa de escalabilidad. Si el editor ha configurado un modo de escalabilidad de destino distinto del predeterminado (véase Configuración del modo de escalabilidad deseado), es posible que la selección de capa del Media Router no coincida con la resolución o la frecuencia de fotogramas solicitadas. Véase Interacción con la resolución y la frecuencia de fotogramas preferidas por el suscriptor Para más información.