Fase 2: Scrittura e analisi del codice - Amazon Kinesis Video Streams

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Fase 2: Scrittura e analisi del codice

In questa sezione viene esaminato il codice dell'applicazione di esempioKvsVideoOnlyStreamingSample.cnellasamplescartella delhttps://github.com/awslabs/amazon-kinesis-video-streams-producer-crepository suGitHub. Hai scaricato questo codice nella fase precedente. In questo esempio viene illustrato come utilizzare la C Producer Library per inviare frame video con codifica H.264 all'interno della cartellasamples/h264SampleFramessul flusso video Kinesis.

Questa applicazione di esempio ha tre sezioni:

  • Inizializzazione e configurazione:

    • Inizializzazione e configurazione della pipeline dei supporti specifici della piattaforma.

    • Inizializzazione e configurazioneKinesisVideoClient eKinesisVideoStreaming per la pipeline, impostazione dei callback, integrazione dell'autenticazione specifica dello scenario, estrazione e invio di dati codec privati e ottenimento dello stato READY per il flusso.

  • Loop principale:

    • Ottenere il frame dalla pipeline dei supporti con timestamp e flag.

    • Inoltro del frame alKinesisVideoFlusso.

  • Teardown:

    • Arresto (sincronizzazione)KinesisVideoStreaming, liberazioneKinesisVideoStreaming, liberazioneKinesisVideoIl client.

Questa applicazione di esempio completa le attività seguenti:

  • Chiama l'API createDefaultDeviceInfo per creare l'oggetto deviceInfo che contiene informazioni sul dispositivo o sulla configurazione dello storage.

    // 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;
  • Chiama l'API createRealtimeVideoStreamInfoProvider per creare l'oggetto StreamInfo.

    CHK_STATUS(createRealtimeVideoStreamInfoProvider(streamName, DEFAULT_RETENTION_PERIOD, DEFAULT_BUFFER_DURATION, &pStreamInfo)); // adjust members of pStreamInfo here if needed
  • Chiama l'API createDefaultCallbacksProviderWithAwsCredentials per creare il provider di callback predefinito in base alle credenziali AWS statiche.

    CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, FALSE, &pClientCallbacks));
  • Chiama ilcreateKinesisVideoClientAPI per creareKinesisVideoClientUn oggetto che contiene informazioni sul dispositivo di storage e mantiene i callback per riportare sugli eventi Kinesis Video Streams.

    CHK_STATUS(createKinesisVideoClient(pDeviceInfo, pClientCallbacks, &clientHandle));
  • Chiama l'API createKinesisVideoStreamSync per creare l'oggetto KinesisVideoStream.

    CHK_STATUS(createKinesisVideoStreamSync(clientHandle, pStreamInfo, &streamHandle));
  • Configura un frame di esempio e chiama l'API PutKinesisVideoFrame per l'invio di frame all'oggetto KinesisVideoStream.

    // 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; }
  • Teardown:

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

Fase successiva

Fase 3: Esecuzione e verifica del codice