Ajustar el audio y el vídeo — iOS
Puedes realizar ajustes de audio y vídeo en publicado y suscrito fuentes:
- Publicar sólo audio o vídeo
- Publicar en una sesión solo de voz
- Selección de la cámara utilizada por un editor
- Detectar cuándo cambia la cámara del editor
- Configuración de la resolución y la velocidad de fotogramas de un vídeo
- Activar la linterna de la cámara
- Ajuste del zoom de la cámara
- Uso de un capturador de vídeo personalizado
- Uso de un controlador de audio personalizado
- Aplicación de transformaciones de audio y vídeo a las transmisiones publicadas
- Ajuste de la calidad del audio
- Reducción del ancho de banda de audio con Opus DTX
- Ajustar el volumen del audio de un abonado
- Suscribirse solo a contenido de audio o vídeo
- Detectar si un flujo tiene audio o vídeo
- Configuración de las preferencias de reducción de calidad de los vídeos del editor
Publicar sólo audio o vídeo
Puedes activar o desactivar el audio y el vídeo configurando el publishAudio y publishVideo propiedades. Por ejemplo, el siguiente código desactiva el audio:
publisher.publishAudio = NO;
Publicar en una sesión solo de voz
Para configurar un solo voz sesión, configura el videoTrack propiedad del objeto OTPublisherSettings a NO cuando tú inicializar cada objeto OTPublisher en la sesión. Por ejemplo, el siguiente código crea un editor para una sesión de solo voz:
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.videoTrack = NO;
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
Selección de la cámara utilizada por un editor
Puedes especificar (o cambiar) la cámara que se utiliza para publicar una transmisión:
publisher.cameraPosition = AVCaptureDevicePositionFront; // front camera
publisher.cameraPosition = AVCaptureDevicePositionBack; // back camera
Tenga en cuenta que el cameraPosition La propiedad no está disponible en la clase OTPublisherKit. Si estás utilizando la clase OTPublisherKit para implementar un capturador de vídeo personalizadopuede definir la cámara utilizada en el código de captura de vídeo personalizado.
Detectar cuándo cambia la cámara del editor
Cuando la cámara utilizada para publicar un flujo cambia, el delegado del editor envía un mensaje [OTPublisher publisher:didChangeCameraPosition:] mensaje:
- (void)publisher:(OTPublisher *)publisher didChangeCameraPosition:(AVCaptureDevicePosition)position
{
if (position == AVCaptureDevicePositionFront) {
// front camera
} else {
// back camera
}
}
Configuración de la resolución y la velocidad de fotogramas de un vídeo
Puedes configurar la resolución y la frecuencia de fotogramas de la retransmisión de un creador estableciendo el cameraResolution y cameraFrameRate propiedades del objeto OTPublisherSettings que pasas al [OTPublisher initWithDelegate:settings:] método:
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
initWithDelegate: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.
Nota: Consulta el Guía del desarrollador 1080p para conocer los aspectos que hay que tener en cuenta a la hora de utilizar una resolución de 1080p.
Activar la linterna de la cámara
Utiliza el cameraTorch propiedad del editor para activar o desactivar la linterna de la cámara (antorcha) mientras se captura vídeo:
OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraTorch = YES;
El valor por defecto es NO (la linterna no se utiliza).
Tenga en cuenta que no todas las cámaras de los dispositivos disponen de linterna. Si la cámara activa no admite la función de linterna de cámara (por ejemplo, la cámara frontal normalmente no la admite), llamar a este método no tiene ningún efecto.
Ajuste del zoom de la cámara
Utiliza el cameraZoomFactor propiedad del editor para establecer la relación de zoom de la cámara (factor):
OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraZoomFactor = 0.7;
El valor de la relación o factor oscila entre 0,5 y el factor de zoom máximo. Los valores comprendidos entre 0,5 y 1,0 corresponden al gran angular (alejamiento), mientras que los valores comprendidos entre 1,0 y el factor de zoom máximo corresponden al acercamiento. El factor de zoom real aplicado se limita al rango admitido por la configuración de la cámara activa: si la cámara no admite el gran angular, los factores de zoom establecidos por debajo de 1,0 no surtirán efecto y no se aplicará ningún zoom. En el caso de valores superiores al factor de zoom máximo admitido por la cámara, el factor de zoom se establecerá en el valor máximo admitido.
Uso de un capturador de vídeo personalizado
La clase OTPublisher captura vídeo desde una cámara del dispositivo iOS. Puedes utilizar la API de flujo de vídeo personalizado para definir un capturador de vídeo personalizado, utilizando las clases OTPublisherKit y OTVideoCapture. Para ver un ejemplo, consulta el ejemplo «Proyecto 2: Creemos OTPublisher» en el directorio de ejemplos del SDK de OpenTok para iOS (o en la opentok-ios-sdk-samples repositorio en GitHub).
También puedes utilizar un renderizador de vídeo personalizado para vídeos.
Uso de un controlador de audio personalizado
De forma predeterminada, el SDK de OpenTok para iOS utiliza el micrófono del dispositivo para capturar el audio que se va a transmitir a una transmisión publicada. Además, utiliza los altavoces (o los auriculares) para reproducir el audio de una transmisión a la que se ha suscrito. Llama a la función [OTAudioDeviceManager setAudioDevice:] Método para configurar un controlador de audio personalizado para la captura y reproducción de muestras de audio:
myAudioDevice = [[MyAudioDevice alloc] init];
[OTAudioDeviceManager setAudioDevice:_myAudioDevice];
Llame a [OTAudioDeviceManager setAudioDevice:] antes de inicializar un objeto OTSession. Llama a la función [OTAudioDevice setAudioBus:] método para establecer un objeto de bus de audio. Este objeto, definido por el protocolo OTAudioBus, tiene un [OTAudioBus writeCaptureData:numberOfSamples:] método y un [OTAudioBus readRenderData:numberOfSamples:] método. Estos métodos se invocan cuando hay muestras de audio disponibles para escribir en el flujo de audio del editor o para leer desde los flujos a los que se está suscrito.
Por ejemplo, consulta el ejemplo «Proyecto 7: Dispositivo de audio externo» en el directorio de ejemplos del SDK de OpenTok para iOS (o en la opentok-ios-sdk-samples repositorio en GitHub).
Aplicación de transformaciones de audio y vídeo a las transmisiones publicadas
Puedes utilizar transformadores predefinidos de la biblioteca de Vonage Media Processor o crear tu propio transformador de audio o vídeo personalizado para aplicarlo al vídeo publicado. Consulta este tema.
Ajuste de la calidad del audio
Para ajustar con precisión la calidad del audio en una transmisión de un editor, se pueden utilizar los siguientes métodos:
La tasa de bits de audio como configuración del editor
@property (nonatomic) int audioBitrate
El bitrate deseado para el audio publicado, en bits por segundo. El rango de valores admitido es de 6.000 - 510.000. (Los valores no válidos se ignoran). (Los valores no válidos se ignoran.) Establezca este valor para permitir audio de alta calidad (o para reducir el uso de ancho de banda con audio de menor calidad). Si no establece esta opción, OpenTok asigna automáticamente una tasa de bits de audio para el flujo.
A continuación se indican los ajustes recomendados:
- 8.000 - 12.000 para voz de banda estrecha (NB)
- 16.000 - 20.000 para voz de banda ancha (WB)
- Entre 28 000 y 40 000 para la voz en banda completa (FB)
- 48.000 - 64.000 para música de banda completa (FB)
Reducción del ancho de banda de audio con Opus DTX
Opus DTX (Transmisión discontinua) es un códec de audio que permite reducir el consumo de ancho de banda cuando un participante no está hablando. Esto puede resultar útil en sesiones con muchos participantes de audio. Para activar Opus DTX, hay que configurar el enableOpusDtx propiedad del OTPublisherKitSettings que se pasa al objeto [OTPublisherKit initWithDelegate:settings:] método (cuando Crear una editorial). Para obtener más información, consulta esto Artículo de la base de conocimientos de la API de Video de Vonage.
Ajustar el volumen del audio de un abonado
Puede ajustar individualmente el volumen de audio para cada abonado configurando la opción OTSubscriberKit.audioVolume propiedad.
Suscribirse solo a contenido de audio o vídeo
Por defecto, un objeto «Subscriber» se inicializa para suscribirse al audio y al vídeo, si están disponibles.
Cuando suscribirse a un flujo, puedes especificar si deseas suscribirte inicialmente al audio o al vídeo (si están disponibles). Por ejemplo, el siguiente código se suscribe únicamente a la transmisión de audio:
_subscriber = [[OTSubscriber alloc]
initWithStream:stream delegate:self];
_subscriber.subscribeToAudio = NO;
Una vez creado el objeto «Subscriber», puedes activar o desactivar el audio llamando a la función subscribeToAudio() del objeto Subscriber:
_subscriber.subscribeToAudio = NO; // audio off
_subscriber.subscribeToAudio = YES; // audio on
Para activar o desactivar el vídeo, llame al botón subscribeToVideo() del objeto Subscriber:
subscriber.subscribeToVideo = NO; // video off
subscriber.subscribeToVideo = YES; // video on
Ten en cuenta, sin embargo, que solo puedes suscribirte al audio o al vídeo si el cliente que publica la transmisión incluye audio o vídeo. Por ejemplo, al llamar a subscribeToVideo(false) no tendrá ningún efecto si el cliente que publica el flujo sólo publica audio.
Detectar si un flujo tiene audio o vídeo
De forma predeterminada, un objeto «Subscriber» reproduce tanto el audio como el vídeo (si están disponibles). Puedes comprobar si una transmisión contiene audio o vídeo (si el emisor de la transmisión está transmitiendo audio o vídeo) consultando el hasAudio y hasVideo del objeto Stream:
if (!stream.hasAudio) {
// You may want to adjust the user interface
}
if (!stream.hasVideo) {
// You may want to adjust the user interface
}
Por ejemplo, cuando suscribirse a un flujo, es posible que quieras adaptar la interfaz de usuario en función de si la transmisión incluye audio o vídeo. Por ejemplo, quizá quieras indicar al usuario si una transmisión tiene audio o no; o quizá prefieras no mostrar la vista de suscriptor si una transmisión no incluye vídeo.
Configuración de las preferencias de reducción de calidad de los vídeos del editor
Cuando el ancho de banda o la CPU son limitados, el motor de vídeo puede reducir la frecuencia de imagen y/o la resolución del vídeo del editor para ajustarse a las limitaciones.
La «preferencia de degradación» es un parámetro de configuración que permite ajustar este comportamiento.
Los desarrolladores son responsables de definir y aplicar las preferencias de degradación en función de sus casos de uso y requisitos.
Funciona como una opción de configuración, lo que significa que el motor de vídeo intentará seguir la opción seleccionada, pero no hay garantías sobre el resultado.
Esta preferencia puede comportarse de forma diferente cuando se utiliza vídeo escalabledonde el motor de vídeo puede decidir eliminar capas en lugar de degradar la resolución.
Sugerencia sobre el contenido y la preferencia de degradación sirven a propósitos diferentes pero relacionados: La sugerencia de contenido describe el tipo de contenido que se transmite, mientras que la preferencia de degradación controla la estrategia de codificación. Al definir una sugerencia de contenido, el motor de vídeo determina automáticamente la preferencia de degradación adecuada (por ejemplo, "texto" selecciona automáticamente mantener la resolución). Una preferencia de degradación establecida explícitamente anulará esta selección automática.
Puedes configurar este valor utilizando cualquiera de las opciones proporcionadas OTDegradationPreference valores:
No se ha establecido
_publisher.degradationPreference = OTDegradationPreferenceNotSet;
El valor por defecto. El motor de vídeo determinará la preferencia de degradación óptima.
Mantener la frecuencia de fotogramas y la resolución
_publisher.degradationPreference = OTDegradationPreferenceMaintainFrameRateAndResolution;
El motor de vídeo intentará mantener constante la frecuencia de fotogramas y no reducir la resolución.
Mantener la frecuencia de fotogramas
_publisher.degradationPreference = OTDegradationPreferenceMaintainFrameRate;
El motor de vídeo intentará mantener constante la frecuencia de fotogramas, pero podría reducir la resolución si fuera necesario.
Mantener la resolución
_publisher.degradationPreference = OTDegradationPreferenceMaintainResolution;
El motor de vídeo no reducirá la resolución, pero podría reducir la frecuencia de fotogramas si fuera necesario.
Equilibrado
_publisher.degradationPreference = OTDegradationPreferenceBalanced;
El motor de vídeo intentará encontrar un equilibrio entre la reducción de la resolución y la frecuencia de fotogramas cuando sea necesario.