Nesta página, mostramos como gerar imagens de sobreposição estáticas em uma transmissão ao vivo. Uma imagem de sobreposição estática permanece durante toda a transmissão ao vivo. É possível configurar a resolução e a posição de uma imagem de sobreposição estática.
Configurar o projeto e a autenticação do Google Cloud
Se você ainda não criou um projeto do Google Cloud e credenciais, consulte Antes de começar.Faça upload de uma imagem para o bucket do Cloud Storage
- No console do Google Cloud, acesse a página "Navegador do Cloud Storage".
Acesse a página "Navegador do Cloud Storage" - Clique no nome do bucket para abri-lo.
- Clique em Fazer o upload dos arquivos.
- Selecione um arquivo de imagem (JPEG ou PNG) para fazer o upload da sua máquina local. Use esta imagem de sobreposição de amostra.
Sua imagem agora está salva no bucket do Cloud Storage.
Criar 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_NUMBER
: o número do projeto do Google Cloud, localizado no campo Número do projeto na página Configurações do IAM.LOCATION
: o local em que o recurso será criado. Use uma das regiões com suporte.Mostrar locaisus-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 usuário para o novo recurso 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. Por exemplo,my-asset
.ASSET_URI
: o URI da imagem no bucket do Cloud Storage a ser usada, comogs://my-bucket/my-image.png
.
Corpo JSON da solicitação:
{ "image": { "uri": "ASSET_URI" } }
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/assets/ASSET_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Copie o OPERATION_ID
retornado para usar na
próxima seção.
Verificar 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_NUMBER
: o número do projeto do Google Cloud, localizado no campo Número do projeto na página Configurações do IAM.LOCATION
: o local em que o recurso está localizado. Use uma das regiões compatíveis.Mostrar locaisus-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/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" } }
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 projeto do Google Cloud, 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 com suporte.Mostrar locaisus-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 o qual você envia o 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
.
Corpo JSON da solicitação:
{ "type": "RTMP_PUSH" }
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 }
É possível verificar o resultado da operação de criação de entrada usando o novo ID da operação.
Receber detalhes do endpoint de entrada
Para conferir os detalhes do endpoint de entrada, use o método
projects.locations.inputs.get
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_NUMBER
: o número do projeto do Google Cloud, 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 com suporte.Mostrar locaisus-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/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 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_NUMBER
: o número do projeto do Google Cloud, 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 com suporte.Mostrar locaisus-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 entradaBUCKET_NAME
: o nome do bucket do Cloud Storage criado para armazenar o manifesto e os arquivos de segmento da transmissão ao vivoASSET_ID
: o identificador definido pelo usuário para o recurso
Corpo JSON da solicitação:
{ "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 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 de criação do canal usando o novo ID.
Iniciar o canal
Para iniciar um canal, use o método
projects.locations.channels.start
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_NUMBER
: o número do projeto do Google Cloud, 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 com suporte.Mostrar locaisus-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 }
É possível verificar o resultado da operação de início do canal usando o novo ID da operação.
Enviar o stream de entrada
Abra uma nova janela do terminal. Execute o comando a seguir usando
INPUT_STREAM_URI
da seção
Receber detalhes do endpoint de entrada:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
Assistir a transmissão ao vivo gerada
Para reproduzir o arquivo de mídia gerado no Shaka Player (em inglês), conclua as seguintes etapas:
- Torne o bucket do Cloud Storage criado publicamente legível.
- Para ativar o compartilhamento de recursos entre origens
(CORS, na sigla em inglês) em um bucket do Cloud Storage, faça o seguinte:
- Crie um arquivo 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 arquivo JSON criado na etapa anterior:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crie um arquivo JSON que contenha o seguinte:
- No bucket do Cloud Storage, encontre o arquivo
main.m3u8
gerado. Clique em Copiar URL na coluna Acesso público do arquivo. - Acesse o Shaka Player, um player de transmissão ao vivo on-line.
- Clique em Conteúdo personalizado na barra de navegação superior.
- Clique no botão +.
Cole o URL público do arquivo na caixa URL do manifesto.
Digite um nome na caixa Nome.
Clique em Salvar.
Clique em Jogar
A sobreposição vai aparecer sobre a transmissão ao vivo.