Esta página mostra como gerar imagens de sobreposição estáticas sobre uma stream em direto. Uma imagem de sobreposição estática persiste durante toda a stream em direto. Pode configurar a resolução e a posição de uma imagem de sobreposição estática.
Configure o seu Google Cloud projeto e autenticação
Se não tiver criado um Google Cloud projeto e credenciais, consulte a secção Antes de começar.Carregue uma imagem para o seu contentor do Cloud Storage
- Na Google Cloud consola, aceda à página do navegador do Cloud Storage.
Aceda à página do navegador do armazenamento na nuvem - Clique no nome do seu contentor para o abrir.
- Clique em Carregar ficheiros.
- Selecione um ficheiro de imagem (JPEG ou PNG) para carregar a partir do seu computador local. Pode usar esta imagem de sobreposição de exemplo.
A imagem está agora guardada no contentor do Cloud Storage.
Crie um recurso
Os recursos são vídeos ou imagens que podem ser usados com a API Live Stream. Crie um recurso de imagem para usar como uma sobreposição estática.
Para criar um recurso, use o método
projects.locations.assets.create.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_NUMBER: o número do seu Google Cloud projeto. Este encontra-se no campo Número do projeto na página Definições do IAMLOCATION: a localização na qual criar o recurso; use uma das regiões suportadasMostrar localizaçõesus-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
ASSET_ID: um identificador definido pelo utilizador para o novo recurso a criar. Este valor tem de ter entre 1 e 63 carateres, começar e terminar com[a-z0-9]e pode conter travessões (-) entre carateres. Por exemplo,my-asset.ASSET_URI: o URI da imagem no seu contentor do Cloud Storage a usar, comogs://my-bucket/my-image.png
Corpo JSON do pedido:
{
"image": {
"uri": "ASSET_URI"
}
}
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
"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/assets/ASSET_ID",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Copie o OPERATION_ID devolvido para usar na secção seguinte.
Verifique o resultado
Use o método projects.locations.operations.get para verificar se o recurso foi criado. Se a resposta contiver "done: false", repita o comando até que a resposta contenha "done: true".
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_NUMBER: o número do seu Google Cloud projeto. Este encontra-se no campo Número do projeto na página Definições do IAMLOCATION: a localização onde o recurso está localizado; use uma das regiões suportadasMostrar localizaçõesus-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
OPERATION_ID: o identificador da operação
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
"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/assets/ASSET_ID",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.Asset",
"name": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
"createTime": CREATE_TIME,
"updateTime": UPDATE_TIME,
"image": {
"uri": "ASSET_URI"
},
"crc32c": "ae1EJg==",
"state": "ACTIVE"
}
}
Crie o ponto final de entrada
Para criar o ponto final de entrada, use o método
projects.locations.inputs.create.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_NUMBER: o número do seu Google Cloud projeto. Este encontra-se no campo Número do projeto na página Definições do IAMLOCATION: a localização na qual criar o ponto final de entrada; use uma das regiões suportadasMostrar localizaçõesus-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
INPUT_ID: um identificador definido pelo utilizador para o novo ponto final de entrada a criar (para o qual envia a sua stream de entrada). Este valor tem de ter entre 1 e 63 carateres, começar e terminar com[a-z0-9]e pode conter travessões (-) entre carateres. Por exemplo,my-input.
Corpo JSON do pedido:
{
"type": "RTMP_PUSH"
}
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
"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
}
Pode verificar o resultado da operação de criação de entrada através do novo ID da operação.
Obtenha detalhes do ponto final de entrada
Para obter os detalhes do ponto final de entrada, use o método projects.locations.inputs.get.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_NUMBER: o número do seu Google Cloud projeto. Este encontra-se no campo Número do projeto na página Definições do IAMLOCATION: a localização onde o seu ponto final de entrada está localizado; use uma das regiões suportadasMostrar localizaçõesus-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
INPUT_ID: o identificador definido pelo utilizador para o ponto final de entrada
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
"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 valor devolvido
INPUT_STREAM_URI
para usar mais tarde na secção Envie o fluxo de entrada.
Crie o canal
Para criar o canal, use o método
projects.locations.channels.create.
Tenha em atenção a matriz staticOverlays na configuração do canal:
"staticOverlays": [
{
"asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
"position": {
"x": 0.5,
"y": 0.5
},
"resolution": {
"w": 0.1
},
"opacity": 0.8
}
],
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_NUMBER: o número do seu Google Cloud projeto. Este encontra-se no campo Número do projeto na página Definições do IAMLOCATION: a localização na qual criar o canal; use uma das regiões suportadasMostrar localizaçõesus-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: um identificador definido pelo utilizador para o canal a criar; este valor tem de ter entre 1 e 63 carateres, começar e terminar com[a-z0-9]e pode conter traços (-) entre carateresINPUT_ID: o identificador definido pelo utilizador para o ponto final de entradaBUCKET_NAME: o nome do contentor do Cloud Storage que criou para conter o manifesto da stream em direto e os ficheiros de segmentosASSET_ID: o identificador definido pelo utilizador para o recurso
Corpo JSON do pedido:
{
"inputAttachments": [
{
"key": "my-input",
"input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
}
],
"output": {
"uri": "gs://BUCKET_NAME"
},
"staticOverlays": [
{
"asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
"position": {
"x": 0.5,
"y": 0.5
},
"resolution": {
"w": 0.1
},
"opacity": 0.8
},
],
"elementaryStreams": [
{
"key": "es_video",
"videoStream": {
"h264": {
"profile": "high",
"widthPixels": 1280,
"heightPixels": 720,
"bitrateBps": 3000000,
"frameRate": 30
}
}
},
{
"key": "es_audio",
"audioStream": {
"codec": "aac",
"channelCount": 2,
"bitrateBps": 160000
}
}
],
"muxStreams": [
{
"key": "mux_video_ts",
"container": "ts",
"elementaryStreams": ["es_video", "es_audio"],
"segmentSettings": { "segmentDuration": "2s" }
}
],
"manifests": [
{
"key": "manifest_hls",
"fileName": "main.m3u8",
"type": "HLS",
"muxStreams": [
"mux_video_ts"
],
"maxSegmentCount": 5
}
]
}
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
"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
}
Pode verificar o resultado da operação de criação do canal através do novo ID da operação.
Inicie o canal
Para iniciar um canal, use o método
projects.locations.channels.start.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_NUMBER: o número do seu Google Cloud projeto. Este encontra-se no campo Número do projeto na página Definições do IAMLOCATION: a localização onde o seu canal está localizado; use uma das regiões suportadasMostrar localizaçõesus-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: um identificador definido pelo utilizador para o canal
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
"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
}
Pode verificar o resultado da operação de início do canal com o novo ID da operação.
Envie a stream de entrada
Abra uma nova janela de terminal. Execute o seguinte comando, usando
INPUT_STREAM_URI
da secção
Obtenha detalhes do ponto final de entrada:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
Veja a stream em direto gerada
Para reproduzir o ficheiro multimédia gerado no Shaka Player, conclua os seguintes passos:
- Torne o contentor do Cloud Storage que criou publicamente legível.
- Para ativar a partilha de recursos de origem cruzada (CORS) num contentor do Cloud Storage, faça o seguinte:
- Crie um ficheiro JSON que contenha o seguinte:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ] -
Execute o seguinte comando depois de substituir
JSON_FILE_NAMEpelo nome do ficheiro JSON que criou no passo anterior:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crie um ficheiro JSON que contenha o seguinte:
- No contentor do Cloud Storage, encontre o ficheiro
main.m3u8gerado. Clique em Copiar URL na coluna Acesso público do ficheiro. - Navegue para Shaka Player, um leitor de streams em direto online.
- Clique em Conteúdo personalizado na barra de navegação superior.
- Clique no botão +.
Cole o URL público do ficheiro na caixa URL do manifesto.

Introduza um nome na caixa Nome.
Clique em Guardar.
Clique em Jogar.
Deve ver a sobreposição aparecer na stream em direto.