Habilite el audio en su aplicación
En esta guía veremos cómo añadir eventos de audio a la Conversación que hemos creado en la aplicación conversación con eventos guía. Nos ocuparemos del envío y recepción de eventos multimedia desde y hacia la conversación.
Concepts
Esta guía le introducirá en los siguientes conceptos:
- Transmisión de audio - El flujo que el SDK le ofrece en su navegador para escuchar audio y enviar audio
- Pata de audio - Un término de la API del lado del servidor. Los tramos forman parte de una conversación. Cuando se activa el audio en una conversación, se crea un tramo
- Evento mediático - a
member:mediaque se dispara en una Conversación cuando cambia el estado de los medios de un miembro
Antes de empezar
- Ejecutar a través de la guía anterior
Actualizar la aplicación JavaScript
Utilizaremos la aplicación que creamos para la tercera guía de iniciación. Toda la configuración básica se ha hecho en las guías anteriores y debe estar en su lugar. Ahora podemos centrarnos en la actualización de la aplicación del lado del cliente.
Añadir interfaz de audio
En primer lugar, vamos a añadir la interfaz de usuario para el usuario para activar y desactivar el audio, así como un <audio> que utilizaremos para reproducir el flujo de audio de la conversación. Vamos a añadir la interfaz de usuario en la parte superior del área de mensajes.
Y añadir los botones y <audio> en el constructor de la clase
constructor() {
...
this.audio = document.getElementById('audio')
this.enableButton = document.getElementById('enable')
this.disableButton = document.getElementById('disable')
}
Añadir activación del controlador de audio
A continuación, actualizaremos el setupUserEvents para activar conversation.media.enable() cuando el usuario haga clic en el botón Enable Audio botón. La página conversation.media.enable() devuelve una promesa con un objeto stream, que utilizaremos como fuente para nuestro objeto <audio> elemento. A continuación, añadiremos un listener en el elemento <audio> para iniciar la reproducción en cuanto se hayan cargado los metadatos.
setupUserEvents() {
...
this.enableButton.addEventListener('click', () => {
this.conversation.media
.enable()
.then(stream => {
// Older browsers may not have srcObject
if ("srcObject" in this.audio) {
this.audio.srcObject = stream;
} else {
// Avoid using this in new browsers, as it is going away.
this.audio.src = window.URL.createObjectURL(stream);
}
this.audio.onloadedmetadata = () => {
this.audio.play();
}
this.eventLogger('member:media')()
})
.catch(this.errorLogger)
})
}
Ten en cuenta que al activar el audio en una conversación se establece un tramo de audio para un miembro de la conversación. El audio sólo se transmite a otros miembros de la conversación que también hayan activado el audio.
Añadir desactivar controlador de audio
A continuación, añadiremos la posibilidad de que el usuario desactive el flujo de audio. Para ello, actualizaremos la directiva setupUserEvents para activar conversation.media.disable() cuando el usuario haga clic en el botón Disable Audio botón.
setupUserEvents() {
...
this.disableButton.addEventListener('click', () => {
this.conversation.media
.disable()
.then(this.eventLogger('member:media'))
.catch(this.errorLogger)
})
}
Añadir miembro:media listener
Con estas primeras partes estamos enviando member:media en la conversación. Ahora vamos a registrar un oyente para ellos también que actualiza el messageFeed. Para ello, añadiremos un listener para member:media eventos al final del setupConversationEvents método
setupConversationEvents(conversation) {
...
conversation.on("member:media", (member, event) => {
console.log(`*** Member changed media state`, member, event)
const text = `${member.user.name} <b>${event.body.audio ? 'enabled' : 'disabled'} audio in the conversation</b><br>`
this.messageFeed.innerHTML = text + this.messageFeed.innerHTML
})
}
Si queremos que se actualice el historial de conversaciones, tenemos que añadir un caso para member:media en el showConversationHistory interruptor:
showConversationHistory(conversation) {
...
switch (value.type) {
...
case 'member:media':
eventsHistory = `${conversation.members.get(value.from).user.name} @ ${date}: <b>${value.body.audio ? "enabled" : "disabled"} audio</b><br>` + eventsHistory
break;
...
}
}
Abrir la conversación en dos ventanas del navegador
Ahora corre index.html en dos ventanas paralelas del navegador, asegurándose de iniciar sesión con el nombre de usuario jamie en uno y con alice en el otro. Activa el audio en ambos y empieza a hablar. También verás cómo se registran los eventos en la consola del navegador.
Ya está. Su página debería tener ahora un aspecto similar a este.
Referencia
Habilite el audio en su aplicación
En esta guía veremos cómo añadir eventos de audio a la Conversación que hemos creado en la aplicación tutorial para crear una aplicación de chat guía. Nos ocuparemos del envío y recepción de eventos multimedia desde y hacia la conversación.
Concepts
Esta guía le introducirá en los siguientes conceptos:
- Pata de audio - Un término de la API del lado del servidor. Los tramos forman parte de una conversación. Cuando se activa el audio en una conversación, se crea un tramo
- Evento mediático - a
NexmoMediaEventque se dispara en una Conversación cuando cambia el estado de los medios de un miembro
Antes de empezar
Ejecutar a través de la tutorial para crear una aplicación de chat. Construirás sobre este proyecto.
Añadir permisos de audio
Como la activación del audio utiliza el micrófono del dispositivo, tendrás que pedir permiso al usuario.
Añadir una nueva entrada en app/src/AndroidManifest.xml (debajo del último <uses-permission tag):
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Solicitar permiso al inicio de la aplicación
Solicitar permisos dentro del onCreate método del MainActivity clase:
val callsPermissions = arrayOf(Manifest.permission.RECORD_AUDIO)
ActivityCompat.requestPermissions(this, callsPermissions, 123)
Añadir interfaz de audio
Ahora tendrás que añadir dos botones para que el usuario active y desactive el audio. Abra el botón app/src/main/res/layout/activity_main.xml y añada dos nuevos botones (enableMediaButton y disableMediaButton) justo debajo logoutButton botón:
<!--...-->
<Button
android:id="@+id/enableMediaButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/conversationEventsScrollView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="Enable Audio" />
<Button
android:id="@+id/disableMediaButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/conversationEventsScrollView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone"
android:text="Disable Audio"
tools:visibility="visible"/>
<!--...-->
private lateinit var enableMediaButton: Button
private lateinit var disableMediaButton: Button
recuperar la referencia de los botones añadiendo findViewById llamadas en el onCreate método:
enableMediaButton = view.findViewById(R.id.enableMediaButton)
disableMediaButton = view.findViewById(R.id.disableMediaButton)
Añade escuchadores de eventos de clic para los botones, dentro de la etiqueta onCreate método:
enableMediaButton.setOnClickListener {
conversation?.enableMedia()
enableMediaButton.visibility = View.GONE
disableMediaButton.visibility = View.VISIBLE
}
disableMediaButton.setOnClickListener {
conversation?.disableMedia()
enableMediaButton.visibility = View.VISIBLE
disableMediaButton.visibility = View.GONE
}
NOTA: Al habilitar el audio en una conversación se establece un tramo de audio para un miembro de la conversación. El audio solo se transmite a otros miembros de la conversación que también hayan activado el audio.
Mostrar eventos de audio
Al activar los medios de comunicación, NexmoMediaEvent se envían eventos a la conversación. Para mostrar estos eventos tendrá que añadir un botón NexmoMediaEventListener. Añada el NexmoMediaEventListener debajo de addMessageEventListener en getConversation método:
conversation.addMediaEventListener(new NexmoMediaEventListener() {
@Override
public void onMediaEnabled(@NonNull NexmoMediaEvent nexmoMediaEvent) {
conversationEvents.add(nexmoMediaEvent);
updateConversationView();
}
@Override
public void onMediaDisabled(@NonNull NexmoMediaEvent nexmoMediaEvent) {
conversationEvents.add(nexmoMediaEvent);
updateConversationView();
}
});
Añadir soporte del NexmoMediaEvent en updateConversationView añadiendo una nueva rama a when declaración:
is NexmoMediaEvent -> {
val userName = event.embeddedInfo.user.name
userName + "media state: " + event.mediaState
}
Construir y ejecutar
Pulse Cmd + R para construir y ejecutar de nuevo. Una vez iniciada la sesión, puedes activar o desactivar el audio. Para probarlo puedes ejecutar la aplicación en dos dispositivos diferentes.
Referencia
Habilite el audio en su aplicación
En esta guía veremos cómo añadir eventos de audio a la Conversación que hemos creado en la aplicación tutorial para crear una aplicación de chat guía. Nos ocuparemos del envío y recepción de eventos multimedia desde y hacia la conversación.
Concepts
Esta guía le introducirá en los siguientes conceptos:
- Pata de audio - Un término de la API del lado del servidor. Los tramos forman parte de una conversación. Cuando se activa el audio en una conversación, se crea un tramo
- Evento mediático - a
NexmoMediaEventque se dispara en una Conversación cuando cambia el estado de los medios de un miembro
Antes de empezar
Ejecutar a través de la tutorial para crear una aplicación de chat. Construirás sobre este proyecto.
Añadir permisos de audio
Como la activación del audio utiliza el micrófono del dispositivo, tendrás que pedir permiso al usuario.
Añadir una nueva entrada en app/src/AndroidManifest.xml (debajo del último <uses-permission tag):
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Solicitar permiso al inicio de la aplicación
Solicitar permisos dentro del onCreate método del MainActivity clase:
String[] callsPermissions = { Manifest.permission.RECORD_AUDIO };
ActivityCompat.requestPermissions(this, callsPermissions, 123);
Añadir interfaz de audio
Ahora tendrás que añadir dos botones para que el usuario active y desactive el audio. Abra el botón app/src/main/res/layout/activity_main.xml y añada dos nuevos botones (enableMediaButton y disableMediaButton) justo debajo logoutButton botón:
<!--...-->
<Button
android:id="@+id/enableMediaButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/conversationEventsScrollView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="Enable Audio" />
<Button
android:id="@+id/disableMediaButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/conversationEventsScrollView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone"
android:text="Disable Audio"
tools:visibility="visible"/>
<!--...-->
Ahora tienes que asegurarte de que estos botones son accesibles en el fragmento. Añade dos nuevas propiedades en el fragmento ChatFragment clase:
private Button enableMediaButton;
private Button disableMediaButton;
recuperar la referencia de los botones añadiendo findViewById llamadas en el onCreate método:
enableMediaButton = view.findViewById(R.id.enableMediaButton);
disableMediaButton = view.findViewById(R.id.disableMediaButton);
Añade escuchadores de eventos de clic para los botones, dentro de la etiqueta onCreate método:
enableMediaButton.setOnClickListener(it -> {
conversation.enableMedia();
enableMediaButton.setVisibility(View.GONE);
disableMediaButton.setVisibility(View.VISIBLE);
});
disableMediaButton.setOnClickListener(it -> {
conversation.disableMedia();
enableMediaButton.setVisibility(View.VISIBLE);
disableMediaButton.setVisibility(View.GONE);
});
NOTA: Al habilitar el audio en una conversación se establece un tramo de audio para un miembro de la conversación. El audio solo se transmite a otros miembros de la conversación que también hayan activado el audio.
Mostrar eventos de audio
Al activar los medios de comunicación, NexmoMediaEvent se envían eventos a la conversación. Para mostrar estos eventos tendrá que añadir un botón NexmoMediaEventListener. Añada el NexmoMediaEventListener debajo de addMessageEventListener en getConversation método:
conversation.addMediaEventListener(new NexmoMediaEventListener() {
@Override
public void onMediaEnabled(@NonNull NexmoMediaEvent nexmoMediaEvent) {
updateConversation(nexmoMediaEvent);
}
@Override
public void onMediaDisabled(@NonNull NexmoMediaEvent nexmoMediaEvent) {
updateConversation(nexmoMediaEvent);
}
});
Añadir soporte del NexmoMediaEvent en updateConversationView añadiendo una nueva rama a if-else declaración:
else if (event instanceof NexmoMediaEvent) {
NexmoMediaEvent nexmoMediaEvent = (NexmoMediaEvent) event;
String userName = nexmoMediaEvent.getEmbeddedInfo().getUser().getName();
line = userName + "media state: " + nexmoMediaEvent.getMediaState();
}
Construir y ejecutar
Pulse Cmd + R para construir y ejecutar de nuevo. Una vez iniciada la sesión, puedes activar o desactivar el audio. Para probarlo puedes ejecutar la aplicación en dos dispositivos diferentes.
Referencia
Habilite el audio en su aplicación
En esta guía veremos cómo añadir eventos de audio a la Conversación que hemos creado en la aplicación tutorial para crear una aplicación de chat guía. Nos ocuparemos del envío y recepción de eventos multimedia desde y hacia la conversación.
Concepts
Esta guía le introducirá en los siguientes conceptos:
- Pata de audio - Un término de la API del lado del servidor. Los tramos forman parte de una conversación. Cuando se activa el audio en una conversación, se crea un tramo
- Evento mediático - a
NXMMediaEventque se dispara en una Conversación cuando cambia el estado de los medios de un miembro
Antes de empezar
Ejecutar a través de la tutorial para crear una aplicación de chat. Construirás sobre este proyecto.
Añadir permisos de audio
Como la activación del audio utiliza el micrófono del dispositivo, tendrás que pedir permiso al usuario.
Info.plist
Cada proyecto Xcode contiene un Info.plist que contiene todos los metadatos necesarios para cada aplicación o paquete; encontrará el archivo en el directorio AppToAppChat grupo.
Una nueva entrada en el Info.plist es necesario:
Pase el ratón por encima de la última entrada de la lista y haga clic en el pequeño icono
+que aparece.En la lista desplegable, seleccione
Privacy - Microphone Usage Descriptiony añadaMicrophone access required in order to make and receive audio calls.por su valor.
Solicitar permiso al inicio de la aplicación
Abrir AppDelegate.swift e importar el AVFoundation justo después de donde UIKit está incluido.
import UIKit
import AVFoundation
A continuación, llame a requestRecordPermission: en application:didFinishLaunchingWithOptions:.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
AVAudioSession.sharedInstance().requestRecordPermission { (granted:Bool) in
NSLog("Allow microphone use. Response: %d", granted)
}
return true
}
Añadir interfaz de audio
Ahora tendrá que añadir un botón para que el usuario active y desactive el audio. En la ventana viewDidLoad en la función ChatViewController.swift clase añadir un nuevo botón de la barra.
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Start Audio", style: .plain, target: self, action: #selector(self.toggleAudio))
Activar audio
Lo siguiente sería habilitar el audio. Añada una propiedad a ChatViewController clase.
var audioEnabled = false
El botón de la barra del paso anterior llama a toggleAudio cuando se pulsa, así que añade la siguiente función a la directiva ChatViewController clase.
@objc func toggleAudio() {
if audioEnabled {
conversation?.disableMedia()
navigationItem.rightBarButtonItem?.title = "Start Audio"
audioEnabled = false
} else {
conversation?.enableMedia()
navigationItem.rightBarButtonItem?.title = "Stop Audio"
audioEnabled = true
}
}
Ten en cuenta que al activar el audio en una conversación se establece un tramo de audio para un miembro de la conversación. El audio sólo se transmite a otros miembros de la conversación que también hayan activado el audio.
Mostrar eventos de audio
Al activar los medios de comunicación, NXMMediaEvent se envían a la conversación. Para mostrarlos tendrá que añadir una función de la familia NXMConversationDelegate que añadirá los eventos multimedia a la matriz de eventos para su procesamiento.
extension ChatViewController: NXMConversationDelegate {
...
func conversation(_ conversation: NXMConversation, didReceive event: NXMMediaEvent) {
self.events?.append(event)
}
}
En la función de eventos de proceso tendrá que añadir una cláusula para un NXMMediaEventque a su vez llama a showMediaEvent para visualizar los eventos de audio.
func processEvents() {
DispatchQueue.main.async { [weak self] in
...
self.events?.forEach { event in
...
if let mediaEvent = event as? NXMMediaEvent {
self.showMediaEvent(event: mediaEvent)
}
}
}
}
func showMediaEvent(event: NXMMediaEvent) {
if event.isEnabled {
addConversationLine("\(event.embeddedInfo?.user.name ?? "A user") enabled audio")
} else {
addConversationLine("\(event.embeddedInfo?.user.name ?? "A user") disabled audio")
}
}
Construir y ejecutar
Pulse Cmd + R para construir y ejecutar de nuevo. Una vez conectado puedes activar o desactivar el audio. Para probarlo puedes ejecutar la aplicación en dos simuladores/dispositivos diferentes.

Referencia
Habilite el audio en su aplicación
En esta guía veremos cómo añadir eventos de audio a la Conversación que hemos creado en la aplicación tutorial para crear una aplicación de chat guía. Nos ocuparemos del envío y recepción de eventos multimedia desde y hacia la conversación.
Concepts
Esta guía le introducirá en los siguientes conceptos:
- Pata de audio - Un término de la API del lado del servidor. Los tramos forman parte de una conversación. Cuando se activa el audio en una conversación, se crea un tramo
- Evento mediático - a
NXMMediaEventque se dispara en una Conversación cuando cambia el estado de los medios de un miembro
Antes de empezar
Ejecutar a través de la tutorial para crear una aplicación de chat. Construirás sobre este proyecto.
Añadir permisos de audio
Como la activación del audio utiliza el micrófono del dispositivo, tendrás que pedir permiso al usuario.
Info.plist
Cada proyecto Xcode contiene un Info.plist que contiene todos los metadatos necesarios para cada aplicación o paquete; encontrará el archivo en el directorio AppToAppChat grupo.
Una nueva entrada en el Info.plist es necesario:
Pase el ratón por encima de la última entrada de la lista y haga clic en el pequeño icono
+que aparece.En la lista desplegable, seleccione
Privacy - Microphone Usage Descriptiony añadaMicrophone access required in order to make and receive audio calls.por su valor.
Solicitar permiso al inicio de la aplicación
Abrir AppDelegate.h e importar el AVFoundation justo después de donde UIKit está incluido.
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
A continuación, llame a requestRecordPermission: en application:didFinishLaunchingWithOptions: en AppDelegate.m.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[AVAudioSession.sharedInstance requestRecordPermission:^(BOOL granted) {
NSLog(@"Allow microphone use. Response: %d", granted);
}];
return YES;
}
Añadir interfaz de audio
Ahora tendrá que añadir un botón para que el usuario active y desactive el audio. En la ventana viewDidLoad en la función ChatViewController.m clase añadir un nuevo botón de la barra.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Start Audio" style:UIBarButtonItemStyleDone target:self action:@selector(toggleAudio)];
Activar audio
Lo siguiente sería habilitar el audio. Añada una propiedad a ChatViewController interfaz.
@interface ChatViewController () <UITextFieldDelegate, NXMConversationDelegate>
...
@property BOOL audioEnabled;
@end
El botón de la barra del paso anterior llama a toggleAudio cuando se pulsa, así que añade la siguiente función a la directiva ChatViewController clase.
- (void)toggleAudio {
if (self.audioEnabled) {
[self.conversation disableMedia];
self.navigationItem.rightBarButtonItem.title = @"Start Audio";
self.audioEnabled = NO;
} else {
[self.conversation enableMedia];
self.navigationItem.rightBarButtonItem.title = @"Stop Audio";
self.audioEnabled = YES;
}
}
Ten en cuenta que al activar el audio en una conversación se establece un tramo de audio para un miembro de la conversación. El audio sólo se transmite a otros miembros de la conversación que también hayan activado el audio.
Mostrar eventos de audio
Al activar los medios de comunicación, NXMMediaEvent se envían a la conversación. Para mostrarlos tendrá que añadir una función de la familia NXMConversationDelegate que añadirá los eventos multimedia a la matriz de eventos para su procesamiento.
- (void)conversation:(NXMConversation *)conversation didReceiveMediaEvent:(NXMMediaEvent *)event {
[self.events addObject:event];
[self processEvents];
}
En la función de eventos de proceso tendrá que añadir una cláusula para un NXMMediaEventque a su vez llama a showMediaEvent para visualizar los eventos de audio.
- (void)processEvents {
dispatch_async(dispatch_get_main_queue(), ^{
self.conversationTextView.text = @"";
for (NXMEvent *event in self.events) {
if ([event isMemberOfClass:[NXMMemberEvent class]]) {
[self showMemberEvent:(NXMMemberEvent *)event];
} else if ([event isMemberOfClass:[NXMTextEvent class]]) {
[self showTextEvent:(NXMTextEvent *)event];
} else if ([event isMemberOfClass:[NXMMediaEvent class]]) {
[self showMediaEvent:(NXMMediaEvent *)event];
}
}
});
}
- (void) showMediaEvent:(NXMMediaEvent *)event {
if (event.isEnabled) {
[self addConversationLine:[NSString stringWithFormat:@"%@ enabled audio", event.embeddedInfo.user.name]];
} else {
[self addConversationLine:[NSString stringWithFormat:@"%@ disabled audio", event.embeddedInfo.user.name]];
}
}
Construir y ejecutar
Pulse Cmd + R para construir y ejecutar de nuevo. Una vez conectado puedes activar o desactivar el audio. Para probarlo puedes ejecutar la aplicación en dos simuladores/dispositivos diferentes.
