Driver de áudio personalizado (iOS)
Visão geral
O SDK do OpenTok para iOS permite que você configure um driver de áudio personalizado para emissores e assinantes. Você pode usar um driver de áudio personalizado para personalizar o áudio dos fluxos dos emissores e assinantes. Você utilizará o driver de áudio personalizado quando quiser iniciar e interromper o áudio, bem como reproduzir seu próprio arquivo de áudio. Quando quiser fazer “qualquer coisa” com o áudio, além do comportamento padrão do SDK para bate-papo por vídeo ao vivo, você deverá usar drivers de áudio personalizados.
Configurando seu projeto
O código desta seção está no Toques amostra no repositório opentok-ios-sdk-samples. Caso ainda não tenha feito isso, você precisará clonar o repositório em um diretório local — isso pode ser feito usando a linha de comando:
git clone https://github.com/opentok/opentok-ios-sdk-samples.git
Abra o projeto no XCode para acompanhar o passo a passo
Explorando o código
Este aplicativo de exemplo utiliza o driver de áudio personalizado — definido pelo OTDefaultAudioDevice incluído no SDK do OpenTok para iOS. O driver de áudio é utilizado tanto pelos emissores quanto pelos assinantes. Neste aplicativo, o fluxo do assinante é o mesmo que o do emissor (um fluxo de autoassinatura). Primeiro, publicamos e, em seguida, interrompemos a captura do áudio do emissor, para que possamos reproduzir um toque exclusivamente em um AVAudioPlayer da Apple. Quando o assinante entra na chamada (10 segundos após o aplicativo publicar o fluxo), o reprodutor de toque interrompe a reprodução. O driver de áudio personalizado então volta a capturar e reproduzir o áudio.
A classe OTAudioDeviceRingtone herda de OTDefaultAudioDevice. A maior parte do processamento de áudio de baixo nível é realizada na classe OTDefaultAudioDevice. Ela utiliza o Apple Audio Units para processar, gravar e reproduzir áudio. A OTDefaultAudioDevice também oferece suporte a Bluetooth, lida com mudanças de rota, etc. Este tutorial não aborda esses recursos avançados; ele apenas mostra um uso simples do protocolo de ciclo de vida da OTAudioDevice para iniciar e parar o áudio.
Se você quiser realizar qualquer processamento de áudio relacionado ao dispositivo (iPhone), como habilitar o CallKit, reproduzir arquivos MP3, toques de celular, processamento de quadros de áudio etc., deve usar drivers de áudio personalizados. Consulte o projeto Custom-Audio-Driver no repositório opentok-ios-sdk-samples para obter mais detalhes.
Se você deseja apenas capturar, processar e reproduzir áudio quadro a quadro, pode usar os transformadores de áudio do WebRTC, que são mais fáceis de usar. Consulte o projeto Media-Transformers no repositório opentok-ios-sdk-samples para obter mais detalhes.
Aplicativo de toques
Um toque é um áudio externo reproduzido por meio da API AVAudioPlayer da Apple. Como o sistema de áudio do iPhone é um objeto singleton global, reproduzir o toque nele sem interromper nosso fluxo de áudio leva à sobreposição de sons. Portanto, o aplicativo precisa primeiro interromper a captura do áudio do publisher, depois reproduzir o toque e, por fim, reativar a captura e a reprodução de áudio quando um subscriber se conectar. Inicializamos o aplicativo Ringtone da seguinte maneira:
- (instancetype)initWithRingtone:(NSURL *)url {
self = [super init];
if (self) {
ringtoneURL = url;
}
return self;
}
O toque (representado por uma URL) será reproduzido indefinidamente usando as APIs do AVAudioPlayer. O código a seguir mostra o fluxo de paragem, reprodução e início:
- (void)playRingtoneFromURL:(NSURL*)url
{
[self stopCapture];
[self stopRendering];
// Stop & replace existing audio player
if (_audioPlayer) {
[_audioPlayer stop];
_audioPlayer = nil;
}
NSError* error = nil;
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
if (error) {
NSLog(@"Ringtone audio player initialization failure %@", error);
_audioPlayer = nil;
return;
}
[_audioPlayer setDelegate:self];
// Tell player to loop indefinitely
[_audioPlayer setNumberOfLoops:-1];
// setup timer to vibrate device with some frequency
if (_vibratesWithRingtone) {
_vibrateTimer =
[NSTimer scheduledTimerWithTimeInterval:VIBRATE_FREQUENCY_SECONDS
target:self
selector:@selector(buzz:)
userInfo:nil
repeats:YES];
}
// finally, begin playback
[_audioPlayer play];
}
Métodos do ciclo de vida do OTAudioDevice
O [self startCapture] O método inicia a captura de áudio do editor, e o [self startRendering] O método inicia a reprodução de áudio do assinante.
Da mesma forma, o [self stopCapture] O método impede que o editor capture, e o [self stopRendering] O método impede que o assinante reproduza seu áudio. Esses métodos sobrescritos não fazem muita coisa no aplicativo de exemplo, exceto chamar o método pai.
Nosso código de áudio personalizado disponibiliza três métodos auxiliares relacionados a toques, conforme segue:
#pragma mark - Exposed interface methods
- (void)startRingtone {
if (_audioPlayer == nil) {
[self playRingtoneFromURL:ringtoneURL];
}
}
- (void)stopRingtone {
// Stop Audio
[_audioPlayer stop];
_audioPlayer = nil;
// Stop vibration
[_vibrateTimer invalidate];
_vibrateTimer = nil;
[self startCapture];
[self startRendering];
}
- (BOOL)isRingTonePlaying {
return _audioPlayer != nil;
}
Esses métodos são utilizados na ViewController. Após publicar o vídeo, o doPublish O método inicia o toque. Quando o fluxo de autoinscrição se conecta, o subscriberDidConnectToStream O método interrompe o toque.
Parabéns! Você concluiu o tutorial sobre drivers de áudio personalizados para iOS.
Você pode continuar experimentando e ajustando o código que desenvolveu aqui, ou conferir o Próximos passos abaixo.
Próximos passos
Quando terminar esta seção, continue desenvolvendo e aprimorando seu aplicativo OpenTok com estes recursos úteis:
- Noções básicas sobre a Video API — Se ainda não o fez, reserve alguns minutos para aprender exatamente como o OpenTok funciona
- Exemplos de código — uma coleção de aplicativos de exemplo que exploram diversos recursos e casos de uso do OpenTok
- Guias para desenvolvedores — documentação detalhada sobre todos os recursos e funcionalidades do OpenTok
- Tutoriais adicionais — guias passo a passo para a implementação de outros recursos e casos de uso do OpenTok
- Referência do SDK do iOS — explore os métodos e eventos específicos associados ao SDK do OpenTok para iOS