Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tulis dan periksa kodenya
Di bagian ini, Anda memeriksa kode aplikasi sampel KvsVideoOnlyStreamingSample.c di samples folder repo https://github.com/awslabs/amazon-kinesis-video-streams-producer-csamples/h264SampleFrames
Aplikasi sampel ini memiliki tiga bagian:
-
Inisialisasi dan konfigurasi:
-
Menginisialisasi dan mengonfigurasi saluran media khusus platform.
-
Menginisialisasi dan mengonfigurasi KinesisVideoClient dan KinesisVideoStream untuk pipeline, menyetel panggilan balik, mengintegrasikan otentikasi khusus skenario, mengekstrak dan mengirimkan data pribadi codec, dan mendapatkan aliran ke status READY.
-
-
Loop utama:
-
Mendapatkan bingkai dari pipa media dengan stempel waktu dan bendera.
-
Mengirimkan bingkai ke. KinesisVideoStream
-
-
Pembongkaran:
-
Berhenti (sinkronisasi) KinesisVideoStream, membebaskan KinesisVideoStream, membebaskan KinesisVideoClient.
-
Contoh aplikasi ini menyelesaikan tugas-tugas berikut:
-
Panggil
createDefaultDeviceInfoAPI untuk membuatdeviceInfoobjek yang berisi informasi tentang perangkat atau konfigurasi penyimpanan.// 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; -
Panggil
createRealtimeVideoStreamInfoProviderAPI untuk membuatStreamInfoobjek.CHK_STATUS(createRealtimeVideoStreamInfoProvider(streamName, DEFAULT_RETENTION_PERIOD, DEFAULT_BUFFER_DURATION, &pStreamInfo)); // adjust members of pStreamInfo here if needed -
Panggil
createDefaultCallbacksProviderWithAwsCredentialsAPI untuk membuat penyedia callback default berdasarkan AWS kredenal statis.CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, FALSE, &pClientCallbacks)); -
Panggil
createKinesisVideoClientAPI untuk membuatKinesisVideoClientobjek yang berisi informasi tentang penyimpanan perangkat Anda dan mempertahankan callback untuk melaporkan peristiwa Kinesis Video Streams.CHK_STATUS(createKinesisVideoClient(pDeviceInfo, pClientCallbacks, &clientHandle)); -
Panggil
createKinesisVideoStreamSyncAPI untuk membuatKinesisVideoStreamobjek.CHK_STATUS(createKinesisVideoStreamSync(clientHandle, pStreamInfo, &streamHandle)); -
Siapkan bingkai sampel dan panggil
PutKinesisVideoFrameAPI untuk mengirim bingkai itu keKinesisVideoStreamobjek.// 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; } -
Pembongkaran:
CHK_STATUS(stopKinesisVideoStreamSync(streamHandle)); CHK_STATUS(freeKinesisVideoStream(&streamHandle)); CHK_STATUS(freeKinesisVideoClient(&clientHandle));