Transmissões — iOS

Depois de conectado a uma sessão, você pode publicar um stream que outros clientes conectados à sessão possam visualizar.

Este tópico inclui as seguintes seções:

Inicializando um objeto OTPublisher

O OTPublisher O objeto é usado para capturar um fluxo de áudio e vídeo do microfone e da câmera do dispositivo para uso em uma sessão do OpenTok. O view A propriedade do objeto contém a visualização do vídeo que você publica:

OTPublisher publisher = [[OTPublisher alloc]
                      initWithDelegate:self
                      settings:[[OTPublisherSettings alloc] init]];
[self.view addSubview:publisher.view];
[publisher.view setFrame:CGRectMake(0, 0, 200, 150)];

Implemente os métodos do protocolo OTPublisherDelegate no objeto que você especificar como objeto delegado. Esses métodos são chamados quando ocorrem eventos relacionados ao editor.

Passe o objeto Publisher para o [OTSession publish:error] método para publicar um fluxo em uma sessão. Consulte Publicação de um stream.

É possível definir outras propriedades do objeto OTPublisherSettings para configurar opções personalizadas para o editor:

OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.name = @"Bob's video";
_publisherSettings.audioTrack = NO;
_publisherSettings.videoTrack = YES;
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
              initWithDelegate:self
              settings:_publisherSettings];

Observe que, nas sessões que utilizam o OpenTok Media Router (sessões com o modo de mídia (configurado como “routed”), reduzir a taxa de quadros diminui proporcionalmente a largura de banda utilizada pela transmissão. No entanto, em sessões em que o modo de mídia está configurado como “relayed”, reduzir a taxa de quadros não diminui a largura de banda da transmissão.

Você pode usar um capturador de vídeo personalizado para publicar uma transmissão com uma fonte de vídeo personalizada — consulte Utilizando um capturador de vídeo personalizado. Você também pode usar o capturador de vídeo personalizado para publicar uma transmissão de compartilhamento de tela — consulte Compartilhamento de tela.

Você também pode usar uma fonte de áudio personalizada para a transmissão publicada — consulte Utilização de um driver de áudio personalizado.

Definindo a taxa de bits máxima para uma transmissão

É possível definir a taxa de bits máxima para uma transmissão publicada. Definir a taxa de bits máxima pode ajudar a reduzir o consumo de largura de banda quando um usuário se conecta por meio de uma conexão com limite de tráfego. Consulte esta documentação.

Verificar se um cliente possui recursos de publicação

Depois de se conectar a uma sessão, você pode verificar se o cliente consegue publicar. Verifique o valor do [OTSession.capablilites.canPublish:] propriedade. Se estiver definida como YES, o cliente pode publicar:

if (session.capabilities.canPublish) {
    // The client can publish.
} else {
    // The client cannot publish.
    // You may want to notify the user.
}

Para publicar, o cliente deve se conectar à sessão com um token ao qual tenha sido atribuída uma função que permita a publicação. Consulte o Visão geral da criação de tokens.

Verificando o acesso à câmera

Recomendamos que você verifique as permissões de acesso à câmera do aplicativo antes da publicação e, caso o acesso seja negado, forneça orientações ao usuário final sobre como configurar as permissões de acesso do aplicativo. (O usuário final pode habilitar o acesso à câmera nas Configurações do iOS: Privacidade > Câmera.)

O usuário final é solicitado a conceder acesso à câmera para qualquer aplicativo que o solicite. Você pode controlar quando essa solicitação é exibida chamando [AVCaptureDevice requestAccessForMediaType:completionHandler:] com AVMediaTypeVideo, o que exibirá o prompt na primeira execução. Nas chamadas subsequentes, o manipulador de autocompletar será executado com a preferência armazenada do usuário.

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        if(granted){
            // Access to the camera is granted. You can publish.
        } else {
           // Access to the camera is not granted.
        }
    }];

Publicação de um stream

Depois de criar um objeto Publisher (Veja Inicializando um objeto OTPublisher), você pode passá-lo para o [OTSession publish:error] método de um objeto OTSession para publicar o fluxo na sessão:

OTError* error = nil;
[session publish:publisher error:&error];
if (error) {
  NSLog(@"publishing failed with error: (%@)", error);
}

Este código pressupõe que session é um objeto Session e que o cliente se conectou à sessão. Para obter mais informações, consulte Participar de uma sessão.

O [OTPublisherDelegate publisher:streamCreated:] A mensagem é enviada quando o editor começa a transmitir para a sessão.

Impedir que uma editora transmita conteúdo

Você pode impedir que o editor transmita para a sessão chamando a função [OTSession unpublish:error:] método do objeto OTSession:

OTError* error = nil;
[session unpublish:publisher error:&error];
if (error) {
  NSLog(@"publishing failed with error: (%@)", error);
}

O [OTPublisherDelegate publisher:streamDestroyed:] A mensagem é enviada quando o editor interrompe a transmissão para a sessão. Quando essa mensagem for enviada, remova a visualização do editor de sua supervisualização:

[publisher.view removeFromSuperview:];

Como obter estatísticas sobre o stream de um editor

Defina o networkStatsDelegate propriedade de um OTPublisherKit para um objeto que implemente a OTPublisherKitNetworkStatsDelegate protocolo. Esse protocolo inclui um [OTPublisherKitNetworkStatsDelegate publisher: audioNetworkStatsUpdated:] mensagem e um [OTPublisherKitNetworkStatsDelegate publisher: videoNetworkStatsUpdated:] mensagens, que são enviadas periodicamente para relatar estatísticas sobre a qualidade de áudio e vídeo do editor.

Para obter estatísticas de conexão entre pares em nível de baixo, use o [OTPublisherKit getRtcStatsReport:] método. Isso fornece relatórios de estatísticas de RTC para o fluxo de mídia.

Consulte Guia do desenvolvedor sobre observabilidade do cliente para obter informações detalhadas.

Testando a transmissão de um emissor

Você pode publicar uma transmissão de teste e verificar suas estatísticas de áudio e vídeo para determinar o tipo de transmissão (como alta resolução ou somente áudio) compatível com a sua conexão.

Para obter estatísticas de um stream publicado pelo cliente local, é necessário usar uma sessão que utilize o OpenTok Media Router (sessões com o modo de mídia (definido como “roteado”). Em seguida, você pode usar o networkStatsDelegate método do objeto OTSubscriberKit para obter estatísticas de áudio e vídeo da transmissão que você publica. Consulte esse assunto para mais informações.

O teste-da-rede-opentok O repositório inclui um código de exemplo que mostra como utilizar as estatísticas de um fluxo de teste antes de publicá-lo em uma sessão.