Distribuir transmissões ao vivo para endpoints remotos

Nesta página, explicamos como distribuir a saída da transmissão ao vivo para endpoints remotos usando o protocolo Secure Reliable Transport (SRT) ou o Real-Time Messaging Protocol (RTMP). O SRT e o RTMP são usados no modo push para enviar o stream aos endpoints. Os formatos de contêiner compatíveis são MPEG-TS para SRT e FLV para RTMP.

Antes de começar

Esta página pressupõe que você concluiu as etapas na seção Antes de começar do Guia de início rápido para uma transmissão ao vivo HLS.

Dependendo do protocolo de distribuição escolhido, crie um endpoint SRT ou RTMP no provedor em que você quer receber a saída no modo push. O formato do URI do endpoint varia de acordo com o protocolo:

  • Para SRT: srt://SRT_SERVER_IP:SRT_SERVER_PORT?streamid=SRT_SERVER_STREAM_ID
  • Para RTMP: rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME/RTMP_STREAM_KEY ou apenas rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME

SRT_SERVER_IP e RTMP_SERVER_IP podem ser um endereço IP ou um nome de domínio.

Criar o endpoint de entrada

Para criar o endpoint de entrada, use o método projects.locations.inputs.create.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que o endpoint de entrada será criado. Use uma das regiões compatíveis.
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: um identificador definido pelo usuário para o novo endpoint de entrada a ser criado (para onde você envia seu stream de entrada). Esse valor precisa ter de 1 a 63 caracteres, começar e terminar com [a-z0-9] e pode conter traços (-) entre os caracteres. Por exemplo, my-input.

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Copie a OPERATION_ID retornada para usar na próxima seção.

Verificar o resultado

Use o método projects.locations.operations.get para verificar se o endpoint de entrada foi criado. Se a resposta contiver "done: false", repita o comando até que a resposta contenha "done: true". A criação do primeiro endpoint de entrada em uma região pode levar até 10 minutos.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que o endpoint de entrada está localizado. Use uma das regiões compatíveis.
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • OPERATION_ID: o identificador da operação

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "endTime": END_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input",
    "name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "createTime": CREATE_TIME,
    "updateTime": UPDATE_TIME,
    "type": "RTMP_PUSH",
    "uri":  INPUT_STREAM_URI, # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b",
    "tier": "HD"
  }
}

Encontre o campo uri e copie o INPUT_STREAM_URI retornado para usar mais tarde na seção Enviar o fluxo de entrada.

Criar o canal

Para criar o canal, use o método projects.locations.channels.create.

Observe o seguinte na configuração do canal:

  • A matriz distributionStreams contém as configurações de multiplexação de fluxos para distribuições.
  • Cada objeto DistributionStream precisa incluir um campo key, container e elementaryStreams.

    {
      "distributionStreams": [
        {
          "key": "ds1",
          "container": "ts", // to be used with an SRT distribution
          "elementaryStreams": [
            "es_video_720",
            "es_audio"
          ]
        },
        {
          "key": "ds2",
          "container": "flv", // to be used with an RTMP distribution
          "elementaryStreams": [
            "es_video_640",
            "es_audio"
          ]
        }
      ]
    }
    
  • A matriz distributions lista as configurações de distribuição, incluindo os endpoints remotos.

  • Defina o campo distributionStream no objeto Distribution como o key de um objeto DistributionStream.

  • Para a distribuição de SRT, defina o uri no objeto SrtPushOutputEndpoint como um endpoint de SRT que você criou. Para distribuição RTMP, defina o uri no objeto RtmpPushOutputEndpoint como um endpoint RTMP que você criou.

    {
      "distributions": [
        {
          "key": "pd1",
          "distributionStream": "ds1", // defined in a distributionStreams[] object with an MPEG-TS container
          "srtPush": {
            "uri": "srt://SRT_SERVER_IP:SRT_SERVER_PORT?streamid=SRT_SERVER_STREAM_ID"
          }
        },
        {
          "key": "pd2",
          "distributionStream": "ds2", // defined in a distributionStreams[] object with an FLV container
          "rtmpPush": {
            "uri": "rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME/",
            "streamKey": "RTMP_STREAM_KEY"
          }
        }
      ]
    }
    
  • Para distribuir legendas geradas e traduzidas com IA, consulte o guia de configuração de legendas e traduções automáticas.

Os exemplos a seguir usam apenas um objeto DistributionStream e um objeto Distribution.

REST

SRT

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que o canal será criado. Use uma das regiões compatíveis.
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal a ser criado. Esse valor precisa ter de 1 a 63 caracteres, começar e terminar com [a-z0-9] e pode conter traços (-) entre os caracteres.
  • INPUT_ID: o identificador definido pelo usuário para o endpoint de entrada
  • BUCKET_NAME: o nome do bucket do Cloud Storage criado para armazenar o manifesto e os arquivos de segmento da transmissão ao vivo.
  • SRT_SERVER_IP: o endereço IP ou nome de domínio do endpoint remoto
  • SRT_SERVER_PORT: o número da porta do endpoint remoto
  • SRT_SERVER_STREAM_ID: o ID do fluxo do endpoint remoto

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

RTMP

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que o canal será criado. Use uma das regiões compatíveis.
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal a ser criado. Esse valor precisa ter de 1 a 63 caracteres, começar e terminar com [a-z0-9] e pode conter traços (-) entre os caracteres.
  • INPUT_ID: o identificador definido pelo usuário para o endpoint de entrada
  • BUCKET_NAME: o nome do bucket do Cloud Storage criado para armazenar o manifesto e os arquivos de segmento da transmissão ao vivo.
  • RTMP_SERVER_IP: o endereço IP ou nome de domínio do endpoint remoto
  • RTMP_SERVER_PORT: o número da porta do endpoint remoto
  • RTMP_APP_NAME: o prefixo do caminho para o nome do fluxo
  • RTMP_STREAM_KEY: a chave de stream do endpoint remoto.

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

Acessar o canal

Depois de criar o canal, use o método projects.locations.channels.get para consultar o estado do canal.

REST

SRT

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "inputAttachments": [
    {
      "key": "INPUT_ID",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "activeInput": "INPUT_ID",
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "elementaryStreams": [
    {
      "videoStream": {
        "h264": {
          "widthPixels": 1280,
          "heightPixels": 720,
          "frameRate": 30,
          "bitrateBps": 3000000,
          "gopDuration": "2s",
          "vbvSizeBits": 3000000,
          "vbvFullnessBits": 2700000,
          "entropyCoder": "cabac",
          "profile": "high"
        }
      },
      "key": "es_video"
    },
    {
      "audioStream": {
        "codec": "aac",
        "bitrateBps": 160000,
        "channelCount": 2,
        "sampleRateHertz": 48000
      },
      "key": "es_audio"
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    }
  ],
  "manifests": [
    {
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5,
      "segmentKeepDuration": "60s",
      "key": "manifest_hls"
    }
  ],
  "streamingState": "STOPPED",
  "distributionStreams": [
    {
      "key": "ds1",
      "container": "ts",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ]
    }
  ],
  "distributions": [
    {
      "key": "pd1",
      "distributionStream": "ds1",
      "state": "NOT_READY",
      "srtPush": {
        "uri": "srt://SRT_SERVER_IP:SRT_SERVER_PORT?streamid=SRT_SERVER_STREAM_ID"
      }
    }
  ]
}

RTMP

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "inputAttachments": [
    {
      "key": "INPUT_ID",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "activeInput": "INPUT_ID",
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "elementaryStreams": [
    {
      "videoStream": {
        "h264": {
          "widthPixels": 1280,
          "heightPixels": 720,
          "frameRate": 30,
          "bitrateBps": 3000000,
          "gopDuration": "2s",
          "vbvSizeBits": 3000000,
          "vbvFullnessBits": 2700000,
          "entropyCoder": "cabac",
          "profile": "high"
        }
      },
      "key": "es_video"
    },
    {
      "audioStream": {
        "codec": "aac",
        "bitrateBps": 160000,
        "channelCount": 2,
        "sampleRateHertz": 48000
      },
      "key": "es_audio"
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    }
  ],
  "manifests": [
    {
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5,
      "segmentKeepDuration": "60s",
      "key": "manifest_hls"
    }
  ],
  "streamingState": "STOPPED",
  "distributionStreams": [
    {
      "key": "ds1",
      "container": "flv",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ]
    }
  ],
  "distributions": [
    {
      "key": "pd1",
      "distributionStream": "ds1",
      "state": "NOT_READY",
      "rtmpPush": {
        "uri": "rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME",
        "streamKey": "RTMP_STREAM_KEY"
      }
    }
  ]
}

A resposta completa contém os seguintes campos:

{
  ...
  "streamingState": "STOPPED",
  "distributions": [
    {
      ...
      "state": "NOT_READY"
      ...
    }
  ]
  ...
}

Essa resposta indica o estado de streaming do canal e as distribuições dele.

Se a distribuição estiver em um estado NOT_READY, ela não poderá ser iniciada. Aguarde até que o estado mude para READY para começar a distribuir sua transmissão.

A criação do primeiro fluxo de distribuição pode levar até 10 minutos. O estado da distribuição é independente do estado do canal. Você pode iniciar o canal e esperar que a distribuição se torne READY para depois iniciar a distribuição.

Agora você pode iniciar o canal.

Iniciar o canal

Use o método projects.locations.channels.start para iniciar o canal. Um canal precisa ser iniciado antes de aceitar fluxos de entrada ou gerar um fluxo de saída.

Iniciar o primeiro canal em uma região leva cerca de 10 minutos.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "start",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Para determinar se o canal foi iniciado, receba as informações do canal como feito anteriormente. A resposta precisa conter o seguinte:

{
  ...
  "streamingState": "AWAITING_INPUT"
  ...
}

Enviar o stream de entrada

Abra uma nova janela do terminal. Execute o comando a seguir usando INPUT_STREAM_URI da seção Verificar o resultado:

ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
  -acodec aac -vcodec h264 -f flv INPUT_STREAM_URI

O canal está transmitindo, mas as distribuições ainda estão paradas.

Iniciar as distribuições

As distribuições precisam estar no estado READY para serem iniciadas. Para começar a distribuir a saída da transmissão ao vivo para todos os endpoints remotos, use o método projects.locations.channels.startdistribution.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "startdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID. Depois de iniciar uma distribuição, ela pode estar no estado AWAITING_INPUT se o fluxo de entrada não for iniciado ou no estado DISTRIBUTING se o fluxo de entrada estiver sendo distribuído para os endpoints especificados.

(Opcional) Iniciar um conjunto de distribuições

Você pode iniciar um conjunto de distribuições em vez de todas de uma só vez. Liste as distribuições que você quer iniciar adicionando as chaves delas à lista de matriz distributionKeys.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal
  • DISTRIBUTION_KEYS: uma lista separada por vírgulas de chaves de string (por exemplo, "pd1")

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "startdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

Verificar se as distribuições estão em execução

Para verificar se as distribuições foram iniciadas, receba as informações do canal como feito anteriormente. A resposta precisa conter o seguinte:

{
  "distributions": [
    {
      ...
      "state": "DISTRIBUTING"
      ...
    },
    ...
  ]
}

No servidor SRT ou RTMP remoto, verifique se o endpoint criado está recebendo dados.

Parar as distribuições

Para interromper a distribuição da saída da transmissão ao vivo para todos os endpoints remotos, use o método projects.locations.channels.stopdistribution.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "stopdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

(Opcional) Parar um conjunto de distribuições

Você pode interromper um conjunto de distribuições em vez de todas de uma só vez. Liste as distribuições que você quer interromper adicionando as chaves delas à lista de matriz distributionKeys.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal
  • DISTRIBUTION_KEYS: uma lista separada por vírgulas de chaves de string (por exemplo, "pd1")

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "stopdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

Suporte à criptografia SRT

Se você usar o protocolo SRT para distribuir a saída da transmissão ao vivo para o endpoint remoto, a API Live Stream vai proteger o conteúdo com criptografia AES.

Criar a senha e preparar o servidor SRT remoto

Antes de começar, crie uma senha do SRT que esteja em conformidade com o servidor SRT remoto. Normalmente, a senha precisa ter entre 10 e 79 caracteres.

Para garantir que o processo de descriptografia funcione, defina a mesma senha no servidor SRT remoto. Consulte o guia do usuário do servidor SRT remoto para saber como fazer isso.

Adicionar a senha ao Secret Manager

A API Live Stream não aceita nem gerencia a senha diretamente. Você precisa compartilhar a senha com a API Live Stream usando o Google Secret Manager.

Conclua todas estas etapas antes de configurar o canal:

  1. Crie um secret com o Secret Manager.
  2. Configure as permissões do Identity and Access Management no seu secret para que a API Live Stream possa acessar o conteúdo dele. Para fazer isso, conceda o papel secretmanager.secretAccessor à conta de serviço service-PROJECT_NUMBER@gcp-sa-livestream.iam.gserviceaccount.com. Isso é semelhante a como a conta de serviço tem acesso aos seus buckets do Cloud Storage.
  3. Encontre o nome do recurso da versão do secret que você criou (por exemplo, projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/VERSION_ID). Você precisa desse nome para configurar o canal.

Configurar o canal

A versão secreta da senha é especificada no SrtPushOutputEndpoint:

{
  "distributions": [
    {
      "key": "pd1",
      "distributionStream": "ds1", // defined in a distributionStreams[] object with an MPEG-TS container
      "srtPush": {
        "uri": "srt://{SRT_SERVER_IP}:{SRT_SERVER_PORT}?streamid={SRT_SERVER_STREAM_ID}",
        "passphrase_secret_version": "projects/PROJECT_NUMBER/secrets/key1/versions/1"
      }
    }
  ]
}

Limpar

Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.

Interromper o canal

Use o método projects.locations.channels.stop para interromper o canal. É necessário interromper o canal antes de excluí-lo.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "stop",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

Parar o stream de entrada

Se você usou ffmpeg para enviar o fluxo de entrada, a conexão será interrompida automaticamente depois que você parar o canal.

Excluir o canal

Use o método projects.locations.channels.delete para excluir o canal. É preciso excluir o canal antes de excluir o endpoint de entrada usado por ele.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que seu canal está localizado. Use uma das regiões compatíveis
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: um identificador definido pelo usuário para o canal

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

Excluir o endpoint de entrada

Use o método projects.locations.inputs.delete para excluir o endpoint de entrada.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_NUMBER: o número do seu projeto Google Cloud , que está localizado no campo Número do projeto na página Configurações do IAM
  • LOCATION: o local em que o endpoint de entrada está localizado. Use uma das regiões compatíveis.
    Mostrar locais
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: o identificador definido pelo usuário para o endpoint de entrada

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

É possível verificar o resultado da operação usando o novo ID.

Excluir o bucket do Cloud Storage

  1. No console Google Cloud , acesse a página "Navegador do Cloud Storage".

    Acessar a página "Navegador do Cloud Storage"

  2. Marque a caixa de seleção ao lado do bucket criado.

  3. Clique em Excluir.

  4. Na caixa de diálogo exibida, clique em Excluir para excluir o bucket e o conteúdo dele.