Esta página descreve como pré-visualizar as suas streams de entrada, com uma latência muito baixa, para detetar potenciais problemas ou eventos em tempo quase real. Isto permite-lhe tomar medidas corretivas, como pausar streams, inserir anúncios ou apresentar anúncios de serviço, para manter uma experiência de visualização de alta qualidade para os visitantes.
O conteúdo de pré-visualização está disponível no seguinte formato:
- Formato: MPEG-TS
- Vídeo:
- Resolução: 640 x 480
- Codec: H.264
- Velocidade de frames: 25 frames por segundo (FPS)
- Áudio
- Codec: AAC
- Taxa de amostragem: 48 kHz
- Protocolo: HTTPS
Antes de começar
Esta página pressupõe que concluiu os passos na secção Antes de começar do Início rápido para uma stream em direto HLS.
Crie um ponto final de entrada
Para criar um 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 }
Este comando cria uma operação de longa duração (LRO) que pode usar para acompanhar o progresso do seu pedido. Consulte o artigo Faça a gestão de operações de longa duração para mais informações.
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 INPUT_STREAM_URI devolvido para usar mais tarde na secção Envie o fluxo de entrada.
Crie um canal
Para criar um canal, use o método
projects.locations.channels.create
. Os seguintes exemplos criam um canal que gera uma stream em direto HLS. A stream em direto
consiste numa única renderização de alta definição (1280 x 720).
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 segmentos
Corpo JSON do pedido:
{ "inputAttachments": [ { "key": "my-input", "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID" } ], "output": { "uri": "gs://BUCKET_NAME" }, "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 }
Este comando cria uma operação de longa duração (LRO) que pode usar para acompanhar o progresso do seu pedido. Consulte o artigo Faça a gestão de operações de longa duração para mais informações.
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 }
Este comando cria uma operação de longa duração (LRO) que pode usar para acompanhar o progresso do seu pedido. Consulte o artigo Faça a gestão de operações de longa duração para mais informações.
Instale um codificador
Para usar a API, precisa de um codificador para gerar streams de entrada que a API processa.
Instale o ffmpeg
, uma vez que esta página aborda a forma de usar o ffmpeg
para gerar streams de entrada. Pode instalá-lo no Cloud Shell através do seguinte comando.
sudo apt install ffmpeg
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. Este comando gera uma stream de teste.
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
Obtenha o URL do ponto final e o token de autorização
Para obter o URL do ponto final do conteúdo de pré-visualização e o token de autorização necessário para a autenticação, use o método projects.locations.inputs.preview
.
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:
{ "uri": ENDPOINT_URL, # For example, "preview.k3fhpvei3vvf.us-central1.livestream.goog/inputs/my-preview-input", "bearerToken": "BEARER_TOKEN" }
Vai usar os valores dos campos uri
e bearerToken
na secção seguinte.
Apresentar conteúdo de pré-visualização
Tem as seguintes opções principais para apresentar o conteúdo de pré-visualização:
mpegts.js
O mpegts.js é uma biblioteca disponível no GitHub para ver streams MPEG-TS num navegador de Internet.
Copie os valores dos campos bearerToken
e uri
que recebeu num
passo anterior para o seguinte HTML. Crie um ficheiro HTML a partir do seguinte HTML e abra-o num navegador.
<html>
<head>
<script src="https://xqq.im/mpegts.js/dist/mpegts.js"></script>
<video id="video" autoplay controls muted></video>
<script>
function main() {
if (!mpegts.getFeatureList().mseLivePlayback) {
console.log("MSE live playback is not supported by the browswer!")
return;
}
var videoElement = document.getElementById("video");
player = mpegts.createPlayer(
{
type: "mse",
isLive: true,
<!-- Placeholder: Replace ENDPOINT_URL with the actual endpoint URL -->
url: "ENDPOINT_URL",
},
{
headers: {
<!-- Placeholder: Replace BEARER_TOKEN with the actual bearer token -->
Authorization: "BEARER_TOKEN",
},
}
);
player.attachMediaElement(videoElement);
player.load();
player.play();
}
main();
</script>
</body>
</html>
Deve ver um padrão de teste com uma latência inferior à da stream em direto associada. Este leitor de stream só pode tocar a primeira faixa de áudio numa stream.
FFplay
O FFplay é um leitor multimédia de linha de comandos versátil que usa as bibliotecas FFmpeg. Pode encontrar transferências do FFplay na página Transferir FFmpeg.
Abra uma nova janela de terminal. Copie os valores dos campos bearerToken
e uri
que recebeu num passo anterior para o comando seguinte e, de seguida, execute-o.
ffplay -headers "Authorization: Bearer BEARER_TOKEN" \ -fflags nobuffer -flags low_delay -probesize 32 -analyzeduration 0 \ ENDPOINT_URL
Deve ver um padrão de teste com uma latência inferior à da stream em direto associada. O ffplay
suporta a alternância entre faixas de áudio premindo a tecla "A".
Limpar
Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.
Pare o canal
Use o método projects.locations.channels.stop
para parar o canal. Tem de parar o canal antes de o poder eliminar.
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": "stop", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Este comando cria uma operação de longa duração (LRO) que pode usar para acompanhar o progresso do seu pedido. Consulte o artigo Faça a gestão de operações de longa duração para mais informações.
Pare a stream de entrada
Se usou ffmpeg
para enviar a stream de entrada, a ligação é automaticamente
interrompida depois de parar o canal.
Eliminar o canal
Use o método projects.locations.channels.delete
para eliminar o canal. Tem de eliminar o canal antes de poder eliminar o ponto final de entrada usado pelo canal.
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": "delete", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Este comando cria uma operação de longa duração (LRO) que pode usar para acompanhar o progresso do seu pedido. Consulte o artigo Faça a gestão de operações de longa duração para mais informações.
Elimine o ponto final de entrada
Use o método projects.locations.inputs.delete
para eliminar o ponto final de entrada.
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/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 }
Este comando cria uma operação de longa duração (LRO) que pode usar para acompanhar o progresso do seu pedido. Consulte o artigo Faça a gestão de operações de longa duração para mais informações.
Elimine o contentor do Cloud Storage
Na Google Cloud consola, aceda à página do navegador do Cloud Storage.
Selecione a caixa de verificação junto ao grupo criado.
Clique em Eliminar.
Na janela de diálogo apresentada, clique em Eliminar para eliminar o contentor e o respetivo conteúdo.