Tutorial sobre compartilhamento de tela (iOS)
Visão geral
Este tutorial mostra como usar o SDK do OpenTok para iOS para publicar um vídeo de compartilhamento de tela, utilizando a tela do dispositivo como fonte do vídeo da transmissão.
Configurando seu projeto
O código desta seção está no Compartilhamento de tela pasta do exemplos-do-opentok-ios-sdk projeto no GitHub. 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
O aplicativo Screen-Sharing mostra como capturar a tela (uma UIView) usando um capturador de vídeo personalizado. Abra o projeto no Xcode para acompanhar o passo a passo.
Explorando o código
O capturador de vídeo personalizado, o TBScreenCapture, é inicialmente inicializado com um objeto de ligação de tela. Esse objeto chama a função captureView método a 30 quadros por segundo.
. O createPixelBuffer e createCGContextFromPixelBuffer Os métodos auxiliares preparam o terreno para armazenar o instantâneo da tela principal. Esse buffer é então enviado para o videoCaptureConsumer no captureView método.
- (instancetype)initWithView:(UIView *)view
{
self = [super init];
if (self) {
_view = view;
_queue = dispatch_queue_create("SCREEN_CAPTURE", NULL);
_screenScale = [[UIScreen mainScreen] scale];
_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(captureView)];
_displayLink.preferredFramesPerSecond = 30.0;
_capturingSemaphore = dispatch_semaphore_create(1);
[self createPixelBuffer];
[self createCGContextFromPixelBuffer];
}
return self;
}
-(void)captureView
{
if (!(_capturing && self.videoCaptureConsumer)) {
return;
}
// Wait until consumeImageBuffer is done.
if (dispatch_semaphore_wait(_capturingSemaphore, DISPATCH_TIME_NOW) != 0) {
return;
}
dispatch_async(dispatch_get_main_queue(), ^{
[self.view.layer renderInContext:self->_bitmapContext];
// Don't block the UI thread
dispatch_async(self->_queue, ^{
CMTime time = [self getTimeStamp];
[self.videoCaptureConsumer consumeImageBuffer:self->_pixelBuffer
orientation:OTVideoOrientationUp
timestamp:time
metadata:nil];
// Signal for more frames
dispatch_semaphore_signal(self->_capturingSemaphore);
});
});
}
O instantâneo é capturado usando [self.view.layer renderInContext:self->_bitmapContext].
O aplicativo de exemplo utiliza os métodos de protocolo do OTVideoCapture para gerenciar o objeto de ligação de exibição, juntamente com um _capturing bandeira. A captureSettings O método define o videoFormat como OTPixelFormatARGB.
- (int32_t)captureSettings:(OTVideoFormat*)videoFormat
{
videoFormat.pixelFormat = OTPixelFormatARGB;
return 0;
}
A classe ViewController cria uma sessão, instancia os assinantes e configura o editor.
O publisher é o principal motor do aplicativo, e suas propriedades e métodos — videoType, audioFallbackEnabled, videoContentHint, e setVideoCapture — se passam no doPublish método:
- (void)doPublish
{
...
[_publisher setVideoType:OTPublisherKitVideoTypeScreen];
// This disables the audio fallback feature when using routed sessions.
_publisher.audioFallbackEnabled = NO;
// Finally, wire up the video source.
TBScreenCapture* videoCapture =
[[TBScreenCapture alloc] initWithView:self.view];
[_publisher setVideoCapture:videoCapture];
_publisher.videoCapture.videoContentHint = OTVideoContentHintText;
...
}
Por fim, o aplicativo exibe um texto com o cronômetro em andamento. O aplicativo captura essa exibição e a compartilha com os assinantes:
dispatch_source_set_event_handler(_timer, ^{
double timestamp = [[NSDate date] timeIntervalSince1970];
int64_t timeInMilisInt64 = (int64_t)(timestamp*1000);
NSString *mills = [NSString stringWithFormat:@"%lld", timeInMilisInt64];
dispatch_sync(dispatch_get_main_queue(), ^{
[self.timeDisplay setText:mills];
});
});
Parabéns! Você concluiu o tutorial sobre compartilhamento de tela no iOS.
Você pode continuar experimentando e ajustando o código que desenvolveu aqui, ou conferir o Próximos passos abaixo. Para obter mais informações sobre o compartilhamento de tela com o OpenTok, consulte o Guia do desenvolvedor do OpenTok para compartilhamento de tela no iOS.
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