Langkah 2: Tulis dan periksa kodenya - Amazon Kinesis Video Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Langkah 2: Tulis dan periksa kodenya

Di bagian ini, Anda memeriksa kode aplikasi sampel KvsVideoOnlyStreamingSample.c di samples folder https://github.com/awslabs/ amazon-kinesis-video-streams -producer-c repo on. GitHub Anda mengunduh kode ini di langkah sebelumnya. Contoh ini menunjukkan cara menggunakan C Producer Library untuk mengirim frame video yang dikodekan H.264 di dalam folder ke aliran video Kinesis Anda. samples/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 createDefaultDeviceInfo API untuk membuat deviceInfo objek 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 createRealtimeVideoStreamInfoProvider API untuk membuat StreamInfo objek.

    CHK_STATUS(createRealtimeVideoStreamInfoProvider(streamName, DEFAULT_RETENTION_PERIOD, DEFAULT_BUFFER_DURATION, &pStreamInfo)); // adjust members of pStreamInfo here if needed
  • Panggil createDefaultCallbacksProviderWithAwsCredentials API untuk membuat penyedia callback default berdasarkan AWS kredenal statis.

    CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, FALSE, &pClientCallbacks));
  • Panggil createKinesisVideoClient API untuk membuat KinesisVideoClient objek yang berisi informasi tentang penyimpanan perangkat Anda dan mempertahankan callback untuk melaporkan peristiwa Kinesis Video Streams.

    CHK_STATUS(createKinesisVideoClient(pDeviceInfo, pClientCallbacks, &clientHandle));
  • Panggil createKinesisVideoStreamSync API untuk membuat KinesisVideoStream objek.

    CHK_STATUS(createKinesisVideoStreamSync(clientHandle, pStreamInfo, &streamHandle));
  • Siapkan bingkai sampel dan panggil PutKinesisVideoFrame API untuk mengirim bingkai itu ke KinesisVideoStream objek.

    // 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));

Langkah berikutnya

Langkah 3: Jalankan dan verifikasi kode