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
- Verificação dos recursos de publicação
- Verificando o acesso à câmera
- Publicação de um stream
- Impedir que uma editora transmita conteúdo
- Testando a transmissão de um emissor
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.