Escreva e examine o código - Amazon Kinesis Video Streams

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Escreva e examine o código

Nesta seção, você examina o código do aplicativo de amostra KvsVideoOnlyStreamingSample.c na samples pasta do repositório https://github.com/awslabs/amazon-kinesis-video-streams-producer-c em. GitHub Você fez download desse código na etapa anterior. Este exemplo demonstra como usar a biblioteca do produtor C para enviar quadros de vídeo codificados em H.264 dentro da pasta para samples/h264SampleFrames seu stream de vídeo do Kinesis.

Este aplicativo de exemplo tem três seções:

  • Inicialização e configuração:

    • Como inicializar e configurar o pipeline de mídia específicos da plataforma.

    • Inicializando e configurando KinesisVideoClient o pipeline, definindo KinesisVideoStream os retornos de chamada, integrando a autenticação específica do cenário, extraindo e enviando dados privados do codec e fazendo com que o fluxo chegue ao estado. READY

  • Loop principal:

    • Obter o quadro do pipeline de mídia com os timestamps e os sinalizadores.

    • Enviando o quadro para o. KinesisVideoStream

  • Desgaste:

    • Parando (sincronizando) KinesisVideoStream, liberando KinesisVideoStream, KinesisVideoClient liberando.

Este aplicativo de exemplo executa as seguintes tarefas:

  • Chame o createDefaultDeviceInfo API para criar o deviceInfo objeto que contém informações sobre a configuração do dispositivo ou do armazenamento.

    // default storage size is 128MB. Use setDeviceInfoStorageSize after create to change storage size. CHK_STATUS(createDefaultDeviceInfo(&pDeviceInfo)); // adjust members of pDeviceInfo here if needed pDeviceInfo->clientInfo.loggerLogLevel = LOG_LEVEL_DEBUG;
  • Chame o createRealtimeVideoStreamInfoProvider API para criar o StreamInfo objeto.

    CHK_STATUS(createRealtimeVideoStreamInfoProvider(streamName, DEFAULT_RETENTION_PERIOD, DEFAULT_BUFFER_DURATION, &pStreamInfo)); // adjust members of pStreamInfo here if needed
  • Chame o createDefaultCallbacksProviderWithAwsCredentials API para criar o provedor de retornos de chamada padrão com base em AWS credenciais estáticas.

    CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, FALSE, &pClientCallbacks));
  • Chame o createKinesisVideoClient API para criar o KinesisVideoClient objeto que contém informações sobre o armazenamento do seu dispositivo e mantém retornos de chamada para relatar eventos do Kinesis Video Streams.

    CHK_STATUS(createKinesisVideoClient(pDeviceInfo, pClientCallbacks, &clientHandle));
  • Chame o createKinesisVideoStreamSync API para criar o KinesisVideoStream objeto.

    CHK_STATUS(createKinesisVideoStreamSync(clientHandle, pStreamInfo, &streamHandle));
  • Configure um quadro de amostra e ligue PutKinesisVideoFrame API para enviar esse quadro para o KinesisVideoStream objeto.

    // setup sample frame MEMSET(frameBuffer, 0x00, frameSize); frame.frameData = frameBuffer; frame.version = FRAME_CURRENT_VERSION; frame.trackId = DEFAULT_VIDEO_TRACK_ID; frame.duration = HUNDREDS_OF_NANOS_IN_A_SECOND / DEFAULT_FPS_VALUE; frame.decodingTs = defaultGetTime(); // current time frame.presentationTs = frame.decodingTs; while(defaultGetTime() > streamStopTime) { frame.index = frameIndex; frame.flags = fileIndex % DEFAULT_KEY_FRAME_INTERVAL == 0 ? FRAME_FLAG_KEY_FRAME : FRAME_FLAG_NONE; frame.size = SIZEOF(frameBuffer); CHK_STATUS(readFrameData(&frame, frameFilePath)); CHK_STATUS(putKinesisVideoFrame(streamHandle, &frame)); defaultThreadSleep(frame.duration); frame.decodingTs += frame.duration; frame.presentationTs = frame.decodingTs; frameIndex++; fileIndex++; fileIndex = fileIndex % NUMBER_OF_FRAME_FILES; }
  • Desgaste:

    CHK_STATUS(stopKinesisVideoStreamSync(streamHandle)); CHK_STATUS(freeKinesisVideoStream(&streamHandle)); CHK_STATUS(freeKinesisVideoClient(&clientHandle));