Envio de conteúdo ao vivo do YouTube via RTMPS

Este documento explica como usar o RTMPS para transmitir dados ao vivo no YouTube de um codificador. O RTMPS é um stream de vídeo normal do RTMP (Protocolo de mensagens em tempo real) encapsulado por uma conexão SSL. Este documento é destinado a fornecedores de codificadores que querem oferecer compatibilidade com RTMPS a codificadores que já oferecem suporte ao RTMP.

O RTMPS é uma boa opção para a maioria do conteúdo comum do usuário, especialmente se ele exige baixa latência. Consulte a Comparação do protocolo de processamento para ter uma visão geral dos diferentes protocolos de ingestão compatíveis com a transmissão ao vivo do YouTube.

Requisitos

O envio de RTMPS para o YouTube ao vivo tem alguns pré-requisitos:

  • Cada parte do URL de conexão (<protocol>://<server>/<path>) precisa estar correta:
    • O protocolo precisa ser rtmps.
    • O servidor precisa ser um endpoint de processamento de RTMPS válido do YouTube.
    • O caminho precisa ser um nome válido de aplicativo de RTMP do YouTube ao vivo.
  • A conexão precisa ser feita com a porta 443 no servidor de ingestão.
  • O stream multimídia precisa ser enviado com o RTMPS, ou seja, usando o RTMP em uma conexão SSL.

Como conseguir o URL de conexão

Se seu codificador já usa a API YouTube Live, o processo para conseguir um URL de processamento de RTMPS é semelhante ao do RTMP. Envie uma solicitação LiveStreams insert (POST) para criar um novo stream de ingestão. Na resposta, o campo cdn.ingestionInfo.rtmpsIngestionAddress especifica o URL do RTMPS. Se você aceitar a ingestão dupla, o endereço de backup será cdn.ingestionInfo.rtmpsBackupIngestionAddress.

Como criar a conexão

Use sua biblioteca de soquetes preferencial para criar uma conexão SSL/TLS para a porta 443 no servidor especificado pelo URL de ingestão. Como o TLS funciona apenas com a camada de transporte, o nome do host do servidor não é estritamente necessário para iniciar a conexão. No entanto, ele é necessário para a autenticação com nossos servidores. Portanto, adicione a extensão SNI (Indicação de nome do servidor) ao handshake de SSL e defina o nome do servidor como o nome do host do servidor ao qual você está se conectando.

Depois que a conexão SSL for estabelecida, use-a como a conexão para sua biblioteca de cliente RTMP. Uma conexão SSL inicializada tem a mesma API que uma conexão TCP padrão, portanto, a biblioteca RTMP deve ser compatível com ambas.

Solução de problemas

Erros de SSL

Se você tentar criar uma conexão SSL, mas receber um certificado inválido, provavelmente está se conectando a um servidor do YouTube que espera RTMP. Verifique se o nome do servidor que você usa tem "rtmps" nele. Observe o "s".

Se o URL parece correto, mas você continua recebendo um erro de SSL, talvez esteja se conectando à porta errada. Confirme que você está se conectando à porta 443.

Se o URL e a porta estiverem corretos, sua biblioteca SSL pode não estar manipulando o certificado corretamente. Procure mensagens de diagnóstico de baixo nível sobre falhas de SSL e verifique se você está usando o SNI no handshake.

Tempo limite de conexão esgotado

Se você conseguir se conectar ao servidor, mas sua biblioteca de RTMP expirar sem receber uma resposta sensata, talvez você tenha configurado uma conexão RTMP de texto não criptografado com um servidor do YouTube que espera RTMPS. Verifique se você está criando uma conexão SSL, não uma conexão TCP simples.