Konsep kerangka kerja

Sebelum menggunakan MediaPipe Framework, pahami konsep berikut.

Dasar-dasar

Paket

Unit aliran data dasar. Sebuah paket terdiri dari stempel waktu numerik dan pointer bersama ke payload yang tidak dapat diubah. Payload dapat berupa jenis C++ apa pun, dan jenis payload juga disebut sebagai jenis paket. Paket adalah class nilai dan dapat disalin dengan harga terjangkau. Setiap salinan berbagi kepemilikan payload, dengan semantik penghitungan referensi. Setiap salinan memiliki stempel waktu sendiri. Lihat juga Paket.

Grafik

Pemrosesan MediaPipe berlangsung di dalam grafik, yang menentukan jalur aliran paket antara node. Grafik dapat memiliki sejumlah input dan output, serta aliran data dapat bercabang dan digabungkan. Umumnya data mengalir ke depan, tetapi loop mundur juga dimungkinkan. Lihat Grafik untuk mengetahui detailnya.

Node

Node menghasilkan dan/atau memakai paket, dan di situlah sebagian besar pekerjaan grafik berlangsung. Mereka juga dikenal sebagai "kalkulator", karena alasan historis. Setiap antarmuka node menentukan jumlah ports input dan output, yang diidentifikasi oleh tag dan/atau indeks. Lihat Kalkulator untuk mengetahui detailnya.

Streaming

Aliran data adalah koneksi antara dua node yang membawa urutan paket, yang stempelnya harus meningkat secara monoton.

Paket samping

Koneksi paket samping antara node membawa satu paket (dengan stempel waktu yang tidak ditentukan). Ini dapat digunakan untuk menyediakan beberapa data yang akan tetap konstan, sedangkan aliran data mewakili aliran data yang berubah dari waktu ke waktu.

Port Paket

Port memiliki jenis terkait; paket yang transit melalui port harus dari jenis tersebut. Port streaming output dapat dihubungkan ke sejumlah port stream input dari jenis yang sama; setiap konsumen menerima salinan paket output yang terpisah, dan memiliki antreannya sendiri, sehingga dapat memakainya sesuai kecepatannya sendiri. Demikian pula, port output paket samping dapat dihubungkan ke port input paket samping sebanyak yang diinginkan.

Port dapat diperlukan, artinya koneksi harus dibuat agar grafik valid, atau opsional, yang berarti grafik tersebut tetap tidak terhubung.

Input dan output

Aliran data dapat berasal dari node sumber, yang tidak memiliki aliran input dan menghasilkan paket secara spontan (misalnya dengan membaca dari file); atau dari aliran input grafik, yang memungkinkan aplikasi memasukkan paket ke dalam grafik.

Demikian pula, ada node sink yang menerima data dan menulisnya ke berbagai tujuan (misalnya, file, buffer memori, dll.), dan aplikasi juga dapat menerima output dari grafik menggunakan callback.

Perilaku runtime

Masa pakai grafik

Setelah grafik diinisialisasi, grafik dapat dimulai untuk mulai memproses data, dan dapat memproses aliran paket hingga setiap aliran data ditutup atau grafik dibatalkan. Kemudian grafik dapat dihapus atau dimulai lagi.

Masa aktif node

Ada tiga metode masa aktif utama yang akan dipanggil framework pada node:

  • Open: dipanggil sekali, sebelum metode lainnya. Ketika dipanggil, semua paket sisi input yang diperlukan oleh node akan tersedia.
  • Proses: dipanggil beberapa kali, saat serangkaian input baru tersedia, sesuai dengan kebijakan input node.
  • Tutup: dipanggil sekali, di akhir.

Selain itu, setiap kalkulator dapat menentukan konstruktor dan destruktor, yang berguna untuk membuat dan mengalokasikan resource yang tidak bergantung pada data yang diproses.

Kebijakan input

Kebijakan input default adalah kolasi deterministik paket berdasarkan stempel waktu. Node menerima semua input untuk stempel waktu yang sama secara bersamaan, dalam pemanggilan metode Prosesnya; dan set input berturut-turut diterima dalam urutan stempel waktunya. Hal ini dapat mengharuskan penundaan pemrosesan beberapa paket hingga paket dengan stempel waktu yang sama diterima di semua aliran input, atau hingga dapat dijamin bahwa paket dengan stempel waktu tersebut tidak akan tiba di aliran yang belum menerimanya.

Kebijakan lain juga tersedia dan diimplementasikan menggunakan jenis komponen terpisah yang dikenal sebagai InputStreamHandler.

Lihat Sinkronisasi untuk detail selengkapnya.

Streaming real-time

Grafik kalkulator MediaPipe sering digunakan untuk memproses streaming frame video atau audio untuk aplikasi interaktif. Biasanya, setiap Kalkulator berjalan segera setelah semua paket inputnya untuk stempel waktu tertentu tersedia. Kalkulator yang digunakan dalam grafik real-time perlu menentukan batas stempel waktu output berdasarkan batas stempel waktu input agar kalkulator downstream dapat dijadwalkan dengan segera. Lihat Streaming Real-time untuk mengetahui detailnya.