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-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
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-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 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-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 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-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 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-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 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-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 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_NAME
pelo 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.m3u8
gerado. 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.