

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

# Gunakan pustaka produser C \$1\$1
<a name="producer-sdk-cpp"></a>

Anda dapat menggunakan Amazon Kinesis Video Streams yang disediakan perpustakaan produser C\$1\$1 untuk menulis kode aplikasi untuk mengirim data media dari perangkat ke aliran video Kinesis. 

## Model objek
<a name="producer-sdk-cpp-objectmodel"></a>

Pustaka C\$1\$1 menyediakan objek berikut untuk mengelola pengiriman data ke aliran video Kinesis:
+ **KinesisVideoProducer:** Berisi informasi tentang sumber media dan AWS kredensialnya, serta mempertahankan callback untuk melaporkan peristiwa Kinesis Video Streams.
+ **KinesisVideoStream:** Merupakan aliran video Kinesis. Berisi informasi tentang parameter aliran video, seperti nama, periode retensi data, dan jenis konten media.

## Masukkan media ke dalam aliran
<a name="producer-sdk-cpp-putframe"></a>

Anda dapat menggunakan metode yang disediakan pustaka C \$1\$1 (misalnya,`PutFrame`) untuk memasukkan data ke dalam `KinesisVideoStream` objek. Pustaka kemudian mengelola status internal data, yang dapat mencakup tugas-tugas berikut: 
+ Melakukan otentikasi.
+ Menonton latensi jaringan. Jika latensi terlalu tinggi, perpustakaan mungkin memilih untuk menjatuhkan bingkai.
+ Melacak status streaming yang sedang berlangsung.

## Antarmuka panggilan balik
<a name="producer-sdk-cpp-callbacks"></a>

Lapisan ini mengekspos satu set antarmuka callback, yang memungkinkannya untuk berbicara dengan lapisan aplikasi. Antarmuka callback ini meliputi:


+ **Antarmuka panggilan balik layanan (`CallbackProvider`):** Pustaka memanggil peristiwa yang diperoleh melalui antarmuka ini saat membuat aliran, memperoleh deskripsi aliran, dan menghapus aliran.
+ **Status siap klien atau antarmuka peristiwa penyimpanan rendah (`ClientCallbackProvider`):** Pustaka memanggil peristiwa pada antarmuka ini saat klien siap, atau ketika mendeteksi bahwa mungkin kehabisan penyimpanan atau memori yang tersedia.
+ **Antarmuka panggilan balik peristiwa streaming (`StreamCallbackProvider`):** Pustaka memanggil peristiwa pada antarmuka ini saat peristiwa streaming terjadi, seperti aliran yang memasuki status siap, bingkai terputus, atau kesalahan aliran.

Kinesis Video Streams menyediakan implementasi default untuk antarmuka ini. Anda juga dapat menyediakan implementasi kustom Anda sendiri—misalnya, jika Anda memerlukan logika jaringan khusus atau Anda ingin mengekspos kondisi penyimpanan rendah ke antarmuka pengguna.

Untuk informasi selengkapnya tentang callback di pustaka produser, lihat. [Callback SDK produsen](producer-reference-callbacks.md)

## Prosedur: Gunakan SDK produsen C \$1\$1
<a name="producer-sdk-cpp-using"></a>

Prosedur ini menunjukkan cara menggunakan klien Kinesis Video Streams dan sumber media dalam aplikasi C\$1\$1 untuk mengirim data ke aliran video Kinesis Anda.

Prosedur ini mencakup langkah-langkah berikut:

**Topics**

# Prasyarat
<a name="producer-sdk-cpp-prerequisites"></a>

Sebelum Anda mengatur SDK produsen C \$1\$1, pastikan Anda memiliki prasyarat berikut: 
+ **Kredensial:** Dalam kode contoh, Anda memberikan kredensil dengan menentukan profil yang Anda atur dalam file profil kredensial Anda. AWS Jika Anda belum melakukannya, pertama-tama siapkan profil kredensil Anda. 

  Untuk informasi selengkapnya, lihat [Menyiapkan AWS Kredensial dan Wilayah untuk Pengembangan](https://docs.aws.amazon.com//sdk-for-java/v1/developer-guide/setup-credentials.html).
+ **Integrasi penyimpanan sertifikat:** Pustaka produser Kinesis Video Streams harus membangun kepercayaan dengan layanan yang dipanggilnya. Hal ini dilakukan dengan memvalidasi otoritas sertifikat (CAs) di toko sertifikat publik. Pada model berbasis Linux, toko ini terletak di direktori/. `/etc/ssl` 

  Unduh sertifikat dari lokasi berikut ke toko sertifikat Anda:

  [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem)
+ Instal dependensi build berikut untuk macOS:
  + [Autoconf 2.69](http://www.gnu.org/software/autoconf/autoconf.html) (Lisensi GPLv3 \$1/ Autoconf: GNU GPL versi 3 atau yang lebih baru) 
  + [CMake 3.7 atau 3.8](https://cmake.org/)
  + [Konfigurasi Pkg](https://www.freedesktop.org/wiki/Software/pkg-config/)
  + XCode (macOS) /dentang/gcc (xcode-pilih versi 2347)
  + Java Development Kit (JDK) (untuk kompilasi Java JNI)
  + [Lib-Pkg](https://github.com/freebsd/pkg/tree/master/libpkg)
+ Instal dependensi build berikut untuk Ubuntu:
  + Git: `sudo apt install git`
  + [CMake](http://kitware.com/cmake): `sudo apt install cmake`
  + G\$1\$1: `sudo apt install g++`
  + pkg-config: `sudo apt install pkg-config`
  + OpenJDK: `sudo apt install openjdk-8-jdk`
**catatan**  
Ini hanya diperlukan jika Anda sedang membangun Java Native Interface (JNI).
  + Mengatur variabel `JAVA_HOME` lingkungan: `export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/`

# Unduh dan konfigurasikan kode pustaka produser C\$1\$1
<a name="producersdk-cpp-download"></a>

Untuk informasi tentang cara mengunduh dan mengonfigurasi pustaka produser C\$1\$1, lihat [Amazon Kinesis Video Streams CPP](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp) Producer, Plugin, dan JNI. GStreamer 

Untuk prasyarat dan informasi lebih lanjut tentang contoh ini, lihat. [Gunakan pustaka produser C \$1\$1](producer-sdk-cpp.md)

## CMake argumen
<a name="cmake-arguments"></a>

Di bawah ini adalah tabel referensi untuk argumen spesifik C\$1\$1 Producer SDK CMake . Anda juga dapat meneruskan [ CMake opsi standar](https://cmake.org/cmake/help/latest/manual/cmake-env-variables.7.html) ke CMake juga.

**penting**  
Ini semua opsional.

**Bendera untuk menyertakan atau mengecualikan fitur tertentu**


| CMake argumen | Tipe | Default | Penjelasan | 
| --- | --- | --- | --- | 
| `BUILD_DEPENDENCIES` |  Boolean  |  PADA  | Membangun dependensi dari sumber. Jika tidak, gunakan dependensi yang sudah diinstal pada sistem. Jika salah satu dependensi yang diperlukan tidak dapat ditemukan, kesalahan akan dikembalikan. | 
| `BUILD_GSTREAMER_PLUGIN` | Boolean |  MATI  | Membangun kvssink GStreamer plugin. | 
|  `BUILD_JNI`  | Boolean |  MATI  | Membangun Java Native Interface (JNI) untuk dapat memanggil kode ini dari lingkungan runtime Java. | 
|  `ALIGNED_MEMORY_MODEL`  | Boolean |  MATI  | Jika alokasi memori harus disejajarkan dengan batas 8-byte. Beberapa arsitektur tidak mengizinkan akses memori yang tidak selaras. | 
| `CONSTRAINED_DEVICE` | Boolean |  MATI  | Non-Windows saja. Saat ON, atur ukuran tumpukan utas ke0.5 MiB. Diperlukan untuk build [Alpine Linux](https://wiki.alpinelinux.org/wiki/Main_Page). Jika tidak, default sistem operasi digunakan. | 
|  `BUILD_STATIC`  | Boolean |  MATI  | Bangun pustaka dan executable sebagai [shared](https://en.wikipedia.org/wiki/Shared_library) (OFF), atau [static](https://en.wikipedia.org/wiki/Static_library) (ON). | 
|  `ADD_MUCLIBC`  | Boolean |  MATI  | Tautkan ke [UCLibc](https://en.wikipedia.org/wiki/UClibc) bukan pustaka C standar, yang merupakan pustaka standar C yang lebih kecil yang dirancang untuk sistem tertanam. | 
|  `OPEN_SRC_INSTALL_PREFIX`  |  String  | .. /sumber terbuka/lokal | Lokasi untuk menginstal dependensi sumber terbuka, jika membangun dari sumber. | 

**Bendera untuk kompilasi silang**

**penting**  
Tetapkan ini jika arsitektur CPU mesin target dan host Anda berbeda.


| CMake argumen | Tipe | Default | Penjelasan | 
| --- | --- | --- | --- | 
| `BUILD_LOG4CPLUS_HOST` |  String  |  ""  | Bangun log4cplus ketergantungan untuk arsitektur CPU yang ditentukan. Jika tidak diatur, log4cplus akan otomatis mendeteksi dan menggunakan arsitektur CPU mesin host. | 
| `BUILD_OPENSSL_PLATFORM`  |  String  |  ""  | Bangun OpenSSL ketergantungan untuk arsitektur CPU yang ditentukan. Jika tidak diatur, OpenSSL akan otomatis mendeteksi dan menggunakan arsitektur CPU mesin host. | 

**Bendera yang terkait dengan pengujian**


| CMake argumen | Tipe | Default | Penjelasan | 
| --- | --- | --- | --- | 
| `BUILD_TEST` |  Boolean  |  MATI  | Bangun unit dan tes integrasi. Untuk menjalankan semua pengujian, jalankan ./tst/producerTest dari direktori build. AWS Kredensi diperlukan untuk menjalankan tes. | 
| `CODE_COVERAGE` | Boolean | MATI | Hanya tersedia untuk GNU/Clang kompiler. Aktifkan pengumpulan cakupan kode dengan [gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html) dan pembuatan laporan. | 
| `COMPILER_WARNINGS` | Boolean | MATI | Hanya tersedia untuk GNU/Clang kompiler. Aktifkan semua peringatan kompiler. | 
| `ADDRESS_SANITIZER` | Boolean | MATI | Hanya tersedia untuk GNU/Clang kompiler. Membangun dengan [AddressSanitizer](https://compiler-rt.llvm.org/). | 
| `MEMORY_SANITIZER` | Boolean | MATI | Hanya tersedia untuk GNU/Clang kompiler. Membangun dengan [MemorySanitizer](https://compiler-rt.llvm.org/). | 
| `THREAD_SANITIZER` | Boolean | MATI | Hanya tersedia untuk GNU/Clang kompiler. Membangun dengan [ThreadSanitizer](https://compiler-rt.llvm.org/). | 
| `UNDEFINED_BEHAVIOR_SANITIZER` | Boolean | MATI | Hanya tersedia untuk GNU/Clang kompiler. Membangun dengan [UndefinedBehaviorSanitizer](https://compiler-rt.llvm.org/). | 

Untuk menggunakan CMake argumen ini, berikan mereka sebagai daftar `-Dkey=value` pasangan yang dipisahkan spasi mengikuti perintah. `cmake ..` Contoh:

```
cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_DEPENDENCIES=OFF -DALIGNED_MEMORY_MODEL=ON 
```

CMake akan mencari toolchain compiler dengan mengikuti variabel. `$PATH` Sebelum menjalankan CMake, atur variabel `CC` dan `CXX` lingkungan untuk secara eksplisit mengatur rantai alat yang akan digunakan untuk kompilasi silang.

# Tulis dan periksa kodenya
<a name="producersdk-cpp-write"></a>

Di bagian ini[Gunakan pustaka produser C \$1\$1](producer-sdk-cpp.md), Anda memeriksa kode di C\$1\$1 test harness (`tst/ProducerTestFixture.h`dan file lainnya). Anda mengunduh kode ini di bagian sebelumnya.

Contoh **Platform Independent** C\$1\$1 menunjukkan pola pengkodean berikut:
+ Buat instance `KinesisVideoProducer` untuk mengakses Kinesis Video Streams.
+ Buat instans `KinesisVideoStream`. Ini membuat aliran video Kinesis di Anda Akun AWS jika aliran dengan nama yang sama belum ada.
+ Panggil `putFrame` `KinesisVideoStream` untuk setiap frame data, karena tersedia, untuk mengirimkannya ke aliran.

Bagian berikut memberikan informasi lebih lanjut tentang pola pengkodean ini.



## Buat sebuah instance dari KinesisVideoProducer
<a name="producersdk-cpp-write-create-producer"></a>

Anda membuat `KinesisVideoProducer` objek dengan memanggil `KinesisVideoProducer::createSync` metode. Contoh berikut membuat `KinesisVideoProducer` dalam `ProducerTestFixture.h` file:

```
kinesis_video_producer_ = KinesisVideoProducer::createSync(move(device_provider_),
    move(client_callback_provider_),
    move(stream_callback_provider_),
    move(credential_provider_),
    defaultRegion_);
```

`createSync`Metode ini mengambil parameter berikut:
+ `DeviceInfoProvider`Objek, yang mengembalikan `DeviceInfo` objek yang berisi informasi tentang perangkat atau konfigurasi penyimpanan.
**catatan**  
Anda mengonfigurasi ukuran toko konten Anda menggunakan `deviceInfo.storageInfo.storageSize` parameter. Aliran konten Anda berbagi toko konten. Untuk menentukan kebutuhan ukuran penyimpanan Anda, kalikan ukuran bingkai rata-rata dengan jumlah frame yang disimpan untuk durasi maksimal untuk semua aliran. Kemudian kalikan dengan 1,2 untuk memperhitungkan defragmentasi. Misalnya, misalkan aplikasi Anda memiliki konfigurasi berikut:  
Tiga aliran
Durasi maksimum 3 menit
Setiap aliran adalah 30 frame per detik (FPS)
Setiap frame berukuran 10.000 KB
Persyaratan penyimpanan konten untuk aplikasi ini adalah **3 (aliran) \$1 3 (menit) \$1 60 (detik dalam satu menit) \$1 10000 (kb) \$1 1.2 (tunjangan defragmentasi) = 194,4** Mb \$1 200 Mb.
+ `ClientCallbackProvider`Objek, yang mengembalikan pointer fungsi yang melaporkan peristiwa khusus klien.
+ Sebuah `StreamCallbackProvider` objek, yang mengembalikan pointer fungsi yang dipanggil kembali ketika peristiwa khusus aliran terjadi.
+ Sebuah `CredentialProvider` objek, yang menyediakan akses ke variabel lingkungan AWS kredensi.
+  Wilayah AWS (“us-barat-2"). Titik akhir layanan ditentukan dari Wilayah.

## Buat sebuah instance dari KinesisVideoStream
<a name="producersdk-cpp-write-create-stream"></a>

Anda membuat `KinesisVideoStream` objek dengan memanggil `KinesisVideoProducer::CreateStream` metode dengan `StreamDefinition` parameter. Contoh membuat `ProducerTestFixture.h` file `KinesisVideoStream` dalam dengan jenis trek sebagai video, dan dengan track id sebagai 1:

```
auto stream_definition = make_unique<StreamDefinition>(stream_name,
                                               hours(2),
                                               tags,
                                               "",
                                               STREAMING_TYPE_REALTIME,
                                               "video/h264",
                                               milliseconds::zero(),
                                               seconds(2),
                                               milliseconds(1),
                                               true,
                                               true,
                                               true);
return kinesis_video_producer_->createStream(move(stream_definition));
```

`StreamDefinition`Objek memiliki bidang berikut:
+ Nama aliran.
+ Periode retensi data.
+ Tag untuk aliran. Tag ini dapat digunakan oleh aplikasi konsumen untuk menemukan aliran yang benar, atau untuk mendapatkan informasi lebih lanjut tentang aliran. Tag juga dapat dilihat di Konsol Manajemen AWS.
+ AWS KMS kunci enkripsi untuk aliran. Untuk informasi selengkapnya, lihat [Perlindungan data di Kinesis Video Streams](how-kms.md).
+ Jenis streaming. Saat ini, satu-satunya nilai yang valid adalah`STREAMING_TYPE_REALTIME`.
+ Jenis konten media.
+ Latensi media. Nilai ini saat ini tidak digunakan, dan harus disetel ke 0.
+ Durasi pemutaran setiap fragmen.
+ Skala kode waktu media.
+ Apakah media menggunakan fragmentasi bingkai kunci.
+ Apakah media menggunakan kode waktu.
+ Apakah media menggunakan waktu fragmen absolut.

## Tambahkan trek audio ke aliran video Kinesis
<a name="producersdk-cpp-write-add-audiotrack-to-stream"></a>

Anda dapat menambahkan detail trek audio ke definisi aliran trek video dengan menggunakan `addTrack` metode`StreamDefinition`:

```
stream_definition->addTrack(DEFAULT_AUDIO_TRACKID, DEFAULT_AUDIO_TRACK_NAME, DEFAULT_AUDIO_CODEC_ID, MKV_TRACK_INFO_TYPE_AUDIO);
```

`addTrack`Metode ini membutuhkan parameter berikut:
+ Track id (sebagai satu untuk audio). Ini harus unik dan nilai bukan nol.
+ Nama trek yang ditentukan pengguna (misalnya, “audio” untuk trek audio). 
+ Codec id untuk trek ini (misalnya, untuk trek audio “A\$1AAC”).
+ Jenis trek (misalnya, gunakan nilai enum MKV\$1TRACK\$1INFO\$1TYPE\$1AUDIO untuk audio). 

Jika Anda memiliki data pribadi codec untuk trek audio, maka Anda dapat meneruskannya saat memanggil fungsi addTrack. Anda juga dapat mengirim data pribadi codec setelah membuat KinesisVideoStream objek sambil memanggil metode awal di KinesisVideoStream.

## Masukkan bingkai ke dalam aliran video Kinesis
<a name="producersdk-cpp-write-putframe"></a>

Anda menempatkan media ke dalam aliran video Kinesis menggunakan`KinesisVideoStream::putFrame`, meneruskan `Frame` objek yang berisi header dan data media. Contoh panggilan `putFrame` dalam `ProducerApiTest.cpp` file:

```
frame.duration = FRAME_DURATION_IN_MICROS * HUNDREDS_OF_NANOS_IN_A_MICROSECOND;
    frame.size = SIZEOF(frameBuffer_);
    frame.frameData = frameBuffer_;
    MEMSET(frame.frameData, 0x55, frame.size);

    while (!stop_producer_) {
        // Produce frames
        timestamp = std::chrono::duration_cast<std::chrono::nanoseconds>(
                std::chrono::system_clock::now().time_since_epoch()).count() / DEFAULT_TIME_UNIT_IN_NANOS;
        frame.index = index++;
        frame.decodingTs = timestamp;
        frame.presentationTs = timestamp;

        // Key frame every 50th
        frame.flags = (frame.index % 50 == 0) ? FRAME_FLAG_KEY_FRAME : FRAME_FLAG_NONE;
    ...

    EXPECT_TRUE(kinesis_video_stream->putFrame(frame));
```

**catatan**  
Contoh produsen C\$1\$1 sebelumnya mengirimkan buffer data uji. Dalam aplikasi dunia nyata, Anda harus mendapatkan buffer bingkai dan ukuran dari data bingkai dari sumber media (seperti kamera).

`Frame`Objek memiliki bidang berikut:
+ Indeks bingkai. Ini harus menjadi nilai yang meningkat secara monoton.
+ Bendera yang terkait dengan bingkai. Misalnya, jika encoder dikonfigurasi untuk menghasilkan bingkai kunci, bingkai ini akan diberi tanda. `FRAME_FLAG_KEY_FRAME`
+ Stempel waktu decoding.
+ Stempel waktu presentasi.
+ Durasi frame (untuk 100 ns unit).
+ Ukuran frame dalam byte.
+ Data bingkai.

Untuk informasi lebih lanjut tentang format bingkai, lihat[Model data Kinesis Video Streams](how-data.md).

## Masukkan KinesisVideoFrame ke dalam jalur tertentu dari KinesisVideoStream
<a name="producersdk-cpp-write-putframeintospecifictrack"></a>

Anda dapat menggunakan `PutFrameHelper` kelas untuk menempatkan data frame ke trek tertentu. Pertama, panggil `getFrameDataBuffer` untuk mendapatkan pointer ke salah satu buffer yang telah dialokasikan sebelumnya untuk mengisi data. `KinesisVideoFrame` Kemudian, Anda dapat memanggil `putFrameMultiTrack` untuk mengirim `KinesisVideoFrame` bersama dengan nilai Boolean untuk menunjukkan jenis data bingkai. Gunakan true jika itu adalah data video atau false jika frame berisi data audio. `putFrameMultiTrack`Metode ini menggunakan mekanisme antrian untuk memastikan bahwa Fragmen MKV mempertahankan stempel waktu bingkai yang meningkat secara monoton dan dua fragmen tidak tumpang tindih. Misalnya, stempel waktu MKV dari frame pertama fragmen harus selalu lebih besar dari stempel waktu MKV dari frame terakhir dari fragmen sebelumnya. 

Ini `PutFrameHelper` memiliki bidang-bidang berikut:
+ Jumlah maksimum bingkai audio dalam antrian. 
+ Jumlah maksimum bingkai video dalam antrian.
+ Ukuran untuk mengalokasikan untuk satu bingkai audio.
+ Ukuran untuk mengalokasikan untuk satu bingkai video.

## Akses metrik dan pencatatan metrik
<a name="producersdk-cpp-write-metrics"></a>

SDK produsen C \$1\$1 mencakup fungsionalitas untuk metrik dan pencatatan metrik. 

Anda dapat menggunakan operasi `getKinesisVideoMetrics` dan `getKinesisVideoStreamMetrics` API untuk mengambil informasi tentang Kinesis Video Streams dan aliran aktif Anda.

Kode berikut adalah dari `kinesis-video-pic/src/client/include/com/amazonaws/kinesis/video/client/Include.h` file.

```
/**
* Gets information about the storage availability.
*
* @param 1 CLIENT_HANDLE - the client object handle.
* @param 2 PKinesisVideoMetrics - OUT - Kinesis Video metrics to be filled.
*
* @return Status of the function call.
*/
PUBLIC_API STATUS getKinesisVideoMetrics(CLIENT_HANDLE, PKinesisVideoMetrics);

/**
* Gets information about the stream content view.
*
* @param 1 STREAM_HANDLE - the stream object handle.
* @param 2 PStreamMetrics - Stream metrics to fill.
*
* @return Status of the function call.
*/
PUBLIC_API STATUS getKinesisVideoStreamMetrics(STREAM_HANDLE, PStreamMetrics);
```

`PClientMetrics`Objek yang diisi oleh `getKinesisVideoMetrics` berisi informasi berikut:
+ **contentStoreSize:** Ukuran keseluruhan dalam byte penyimpanan konten (memori yang digunakan untuk menyimpan data streaming).
+ **contentStoreAvailableUkuran:** Memori yang tersedia di toko konten, dalam byte.
+ **contentStoreAllocatedUkuran:** Memori yang dialokasikan di toko konten.
+ **totalContentViewsUkuran:** Total memori yang digunakan untuk tampilan konten. Tampilan konten adalah serangkaian indeks informasi di toko konten.
+ **totalFrameRate:** Jumlah agregat frame per detik di semua aliran aktif.
+ **totalTransferRate:** Total bit per detik (bps) dikirim di semua aliran.

`PStreamMetrics`Objek yang diisi oleh `getKinesisVideoStreamMetrics` berisi informasi berikut:
+ **currentViewDuration:** Perbedaan unit 100 ns antara kepala tampilan konten (ketika frame dikodekan) dan posisi saat ini (ketika data frame dikirim ke Kinesis Video Streams).
+ **overallViewDuration:** Perbedaan unit 100 ns antara kepala tampilan konten (saat bingkai dikodekan) ke ekor (ketika bingkai dikeluarkan dari memori, baik karena total ruang yang dialokasikan untuk tampilan konten terlampaui, atau karena `PersistedAck` pesan diterima dari Kinesis Video Streams, dan bingkai yang diketahui bertahan dibilas).
+ **currentViewSize:** Ukuran dalam byte tampilan konten dari kepala (ketika frame dikodekan) ke posisi saat ini (ketika frame dikirim ke Kinesis Video Streams).
+ **overallViewSize:** Ukuran total dalam byte tampilan konten.
+ **currentFrameRate:** Laju aliran terukur terakhir, dalam bingkai per detik.
+ **currentTransferRate:** Laju aliran terukur terakhir, dalam byte per detik.

## Pembongkaran
<a name="producersdk-cpp-write-teardown"></a>

Jika Anda ingin mengirim byte yang tersisa dalam buffer dan menunggu`ACK`, Anda dapat menggunakan: `stopSync`

```
kinesis_video_stream->stopSync();            
```

Atau Anda dapat menelepon `stop` untuk mengakhiri streaming: 

```
kinesis_video_stream->stop();            
```

Setelah menghentikan streaming, Anda dapat membebaskan streaming dengan menjalankan API berikut:

```
kinesis_video_producer_->freeStream(kinesis_video_stream);            
```

# Jalankan dan verifikasi kode
<a name="producersdk-cpp-test"></a>

Untuk menjalankan dan memverifikasi kode untuk[Gunakan pustaka produser C \$1\$1](producer-sdk-cpp.md), lihat petunjuk khusus OS berikut:
+ [Linux](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/linux.md)
+ [macOS](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/macos.md)
+ [Windows](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/windows.md)
+ [OS Raspberry Pi](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/raspberry-pi.md)

Anda dapat memantau lalu lintas di streaming Anda dengan menonton metrik yang terkait dengan streaming Anda di CloudWatch konsol Amazon, seperti`PutMedia.IncomingBytes`.

# Gunakan SDK produsen C \$1\$1 sebagai plugin GStreamer
<a name="producer-sdk-cpp-gstreamer"></a>

[GStreamer](https://gstreamer.freedesktop.org/)adalah kerangka media populer yang digunakan oleh beberapa kamera dan sumber video untuk membuat saluran media khusus dengan menggabungkan plugin modular. Plugin Kinesis GStreamer Video Streams merampingkan integrasi pipeline media yang ada dengan Kinesis Video Streams. GStreamer 

Untuk informasi tentang menggunakan C\$1\$1 producer SDK sebagai GStreamer plugin, lihat. [Contoh: Plugin SDK GStreamer produsen Kinesis Video Streams - kvssink](examples-gstreamer-plugin.md)

# Gunakan SDK produsen C \$1\$1 sebagai GStreamer plugin dalam wadah Docker
<a name="producer-sdk-cpp-gstreamer-docker"></a>

[GStreamer](https://gstreamer.freedesktop.org/)adalah kerangka media populer yang digunakan oleh beberapa kamera dan sumber video untuk membuat saluran media khusus dengan menggabungkan plugin modular. Plugin Kinesis GStreamer Video Streams merampingkan integrasi pipeline media yang ada dengan Kinesis Video Streams. GStreamer 

Selain itu, menggunakan [Docker]() untuk membuat GStreamer pipeline menstandarisasi lingkungan operasi untuk Kinesis Video Streams, yang merampingkan pembuatan dan menjalankan aplikasi.

Untuk informasi tentang menggunakan SDK produsen C \$1\$1 sebagai GStreamer plugin dalam wadah Docker, lihat. [Jalankan GStreamer elemen dalam wadah Docker](examples-gstreamer-plugin.md#examples-gstreamer-plugin-docker)

# Menggunakan logging dengan C\$1\$1 producer SDK
<a name="producer-sdk-cpp-logging"></a>

Anda mengonfigurasi logging untuk aplikasi SDK produsen C \$1\$1 dalam `kvs_log_configuration` file di folder. `kinesis-video-native-build`

Contoh berikut menunjukkan baris pertama dari file konfigurasi default, yang mengkonfigurasi aplikasi untuk menulis entri log `DEBUG` -level ke: Konsol Manajemen AWS

```
log4cplus.rootLogger=DEBUG, KvsConsoleAppender
```

Anda dapat menyetel level logging ke `INFO` untuk logging yang kurang bertele-tele.

Untuk mengonfigurasi aplikasi untuk menulis entri log ke file log, perbarui baris pertama dalam file menjadi berikut:

```
log4cplus.rootLogger=DEBUG, KvsConsoleAppender, KvsFileAppender
```

Ini mengkonfigurasi aplikasi untuk menulis entri log ke `kvs.log` dalam folder. `kinesis-video-native-build/log`

Untuk mengubah lokasi file log, perbarui baris berikut dengan jalur baru:

```
log4cplus.appender.KvsFileAppender.File=./log/kvs.log
```

**catatan**  
Jika `DEBUG` -level logging ditulis ke file, file log dapat menggunakan ruang penyimpanan yang tersedia pada perangkat dengan cepat.