Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Rédiger et examiner le code
Dans cette section, vous allez examiner le code de l'exemple d'application KvsVideoOnlyStreamingSample.c dans le samples dossier du dépôt https://github.com/awslabs/amazon-kinesis-video-streams-producer-csamples/h264SampleFrames votre flux vidéo Kinesis.
Cet exemple d'application contient trois sections :
-
Initialisation et configuration :
-
Initialisation et configuration du pipeline de médias spécifique à la pateforme.
-
Initialisation et configuration KinesisVideoClient et KinesisVideoStream pour le pipeline, définition des rappels, intégration de l'authentification spécifique au scénario, extraction et soumission des données privées du codec et mise du flux à l'état READY.
-
-
Boucle principale :
-
Obtention de l’image de la part du pipeline multimédias avec les horodatages et les balises.
-
Soumission du cadre au KinesisVideoStream.
-
-
Démontage :
-
Arrêt (synchronisation) KinesisVideoStream, libération KinesisVideoStream, libération KinesisVideoClient.
-
Cet exemple d'application exécute les tâches suivantes :
-
Appelez l'API
createDefaultDeviceInfopour créer l'objetdeviceInfoqui contient des informations sur le périphérique ou la configuration du stockage.// 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; -
Appelez l'API
createRealtimeVideoStreamInfoProviderpour créer l' objetStreamInfo.CHK_STATUS(createRealtimeVideoStreamInfoProvider(streamName, DEFAULT_RETENTION_PERIOD, DEFAULT_BUFFER_DURATION, &pStreamInfo)); // adjust members of pStreamInfo here if needed -
Appelez l'
createDefaultCallbacksProviderWithAwsCredentialsAPI pour créer le fournisseur de rappels par défaut sur la base d' AWS informations d'identification statiques.CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, FALSE, &pClientCallbacks)); -
Appelez l'
createKinesisVideoClientAPI pour créer l'KinesisVideoClientobjet qui contient des informations sur le stockage de votre appareil et gère les rappels pour signaler les événements Kinesis Video Streams.CHK_STATUS(createKinesisVideoClient(pDeviceInfo, pClientCallbacks, &clientHandle)); -
Appelez l'API
createKinesisVideoStreamSyncpour créer l' objetKinesisVideoStream.CHK_STATUS(createKinesisVideoStreamSync(clientHandle, pStreamInfo, &streamHandle)); -
Configurez un exemple d’image et appelez l’API
PutKinesisVideoFramepour envoyer cette image à l’objetKinesisVideoStream.// 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; } -
Démontage :
CHK_STATUS(stopKinesisVideoStreamSync(streamHandle)); CHK_STATUS(freeKinesisVideoStream(&streamHandle)); CHK_STATUS(freeKinesisVideoClient(&clientHandle));