Publicação de streams — iOS (Swift)

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:

let publisher = OTPublisher(delegate: self, settings: OTPublisherSettings())!
if let publisherView = publisher.view {
	self.view.addSubview(publisherView)
	publisherView.frame = CGRect(x: 0, y: 0, width: 200, height: 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:

let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Bob's video"
publisherSettings.audioTrack = false
publisherSettings.videoTrack = true
publisherSettings.cameraResolution = .high
publisherSettings.cameraFrameRate = .rate30FPS
let publisher = OTPublisher(delegate: 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.

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 true, o cliente pode publicar:

if let capabilities = session.capabilities, 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 requestAccess(for:completionHandler:) com AVMediaType.Video, 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.requestAccess(for: .video) { granted in
	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:

var error: OTError?
session.publish(publisher, error: &error)

if let error = error {
	print("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:

var error: OTError?
session.unpublish(publisher, error: &error)

if let error = error {
	print("unpublishing 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();

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.