Các khái niệm khung

Trước khi sử dụng MediaPipe Framework, hãy làm quen với các khái niệm sau.

Thông tin cơ bản

Gói

Đơn vị luồng dữ liệu cơ bản. Một gói bao gồm một dấu thời gian dạng số và một con trỏ dùng chung đến một tải trọng không thể thay đổi. Tải trọng có thể thuộc bất kỳ loại C++ nào và loại tải trọng còn được gọi là loại gói. Các gói là lớp giá trị và có thể được sao chép với giá rẻ. Mỗi bản sao đều chia sẻ quyền sở hữu tải trọng, với ngữ nghĩa tính tham chiếu. Mỗi bản sao có dấu thời gian riêng. Hãy xem thêm phần Gói.

Biểu đồ

Quá trình xử lý MediaPipe diễn ra bên trong một biểu đồ giúp xác định đường dẫn luồng gói tin giữa các nút. Một biểu đồ có thể có số lượng đầu vào và đầu ra bất kỳ, đồng thời luồng dữ liệu có thể phân nhánh và hợp nhất. Nhìn chung, dữ liệu sẽ di chuyển theo hướng tiến, nhưng thì có thể có vòng lặp ngược. Xem phần Biểu đồ để biết thông tin chi tiết.

Nút

Các nút tạo và/hoặc sử dụng các gói, đồng thời đây là nơi diễn ra phần lớn công việc của biểu đồ. Chúng còn được gọi là "máy tính" vì lý do lịch sử. Giao diện của mỗi nút xác định một số ports đầu vào và đầu ra, được xác định bằng một thẻ và/hoặc một chỉ mục. Xem Máy tính để biết chi tiết.

Lượt phát trực tuyến

Luồng là kết nối giữa hai nút mang một chuỗi các gói, trong đó dấu thời gian phải tăng đơn điệu.

Gói bên

Kết nối gói phụ giữa các nút mang một gói duy nhất (có dấu thời gian không xác định). Bạn có thể dùng phương thức này để cung cấp một số dữ liệu không thay đổi, trong khi luồng đại diện cho luồng dữ liệu thay đổi theo thời gian.

Cổng gói tin

Một cổng có một loại liên kết; các gói truyền tải qua cổng phải thuộc loại đó. Cổng luồng đầu ra có thể được kết nối với số lượng cổng luồng đầu vào cùng loại bất kỳ; mỗi người tiêu dùng sẽ nhận được một bản sao riêng của các gói đầu ra và có hàng đợi riêng để có thể sử dụng các gói đó theo tốc độ riêng. Tương tự, cổng đầu ra của gói bên có thể kết nối với nhiều cổng đầu vào gói dữ liệu bên tuỳ ý.

Cần có cổng, nghĩa là phải thực hiện kết nối để biểu đồ hợp lệ hoặc không bắt buộc, nghĩa là biểu đồ có thể vẫn chưa được kết nối.

Đầu vào và đầu ra

Luồng dữ liệu có thể bắt nguồn từ nút nguồn không có luồng đầu vào và tạo ra các gói một cách tự động (ví dụ: bằng cách đọc từ tệp); hoặc từ luồng dữ liệu đầu vào biểu đồ, cho phép các gói nguồn cấp dữ liệu ứng dụng xuất hiện trong biểu đồ.

Tương tự như vậy, có các nút bồn lưu trữ dữ liệu nhận dữ liệu và ghi dữ liệu vào nhiều đích đến khác nhau (ví dụ: tệp, vùng đệm bộ nhớ, v.v.) và một ứng dụng cũng có thể nhận được kết quả từ biểu đồ bằng cách sử dụng lệnh gọi lại.

Hành vi trong thời gian chạy

Tuổi thọ của biểu đồ

Sau khi khởi tạo biểu đồ, biểu đồ có thể bắt đầu để bắt đầu xử lý dữ liệu và có thể xử lý một luồng các gói cho đến khi từng luồng bị đóng hoặc biểu đồ bị huỷ. Sau đó, biểu đồ có thể bị huỷ hoặc bắt đầu lại.

Thời gian tồn tại của nút

Có 3 phương thức vòng đời chính mà khung sẽ gọi trên một nút:

  • Mở: được gọi một lần, trước các phương thức khác. Khi phương thức này được gọi, tất cả các gói phía đầu vào mà nút yêu cầu sẽ có sẵn.
  • Quy trình: được gọi nhiều lần khi có một nhóm đầu vào mới, theo chính sách đầu vào của nút.
  • Đóng: được gọi một lần, vào cuối.

Ngoài ra, mỗi trình tính toán có thể xác định hàm khởi tạo và hàm khởi tạo. Các hàm này rất hữu ích trong việc tạo và phân bổ các tài nguyên độc lập với dữ liệu được xử lý.

Chính sách nhập

Chính sách đầu vào mặc định là việc tổng hợp tất định các gói theo dấu thời gian. Một nút nhận tất cả dữ liệu đầu vào cho cùng một dấu thời gian cùng lúc, trong một lệnh gọi phương thức Xử lý; và các tập dữ liệu đầu vào liên tiếp được nhận theo thứ tự dấu thời gian. Điều này có thể yêu cầu trì hoãn quá trình xử lý một số gói cho đến khi nhận được gói có cùng dấu thời gian trên tất cả luồng đầu vào, hoặc cho đến khi có thể đảm bảo rằng một gói có dấu thời gian đó sẽ không đến trên luồng chưa nhận được gói đó.

Các chính sách khác cũng có sẵn, được triển khai bằng cách sử dụng một loại thành phần riêng được gọi là InputStreamHandler.

Xem phần Đồng bộ hoá để biết thêm chi tiết.

Truyền trực tuyến theo thời gian thực

Biểu đồ tính toán MediaPipe thường dùng để xử lý luồng khung hình video hoặc âm thanh cho các ứng dụng tương tác. Thông thường, mỗi Máy tính sẽ chạy ngay khi có sẵn tất cả các gói đầu vào cho một dấu thời gian nhất định. Máy tính dùng trong biểu đồ theo thời gian thực cần xác định giới hạn dấu thời gian đầu ra dựa trên giới hạn dấu thời gian đầu vào để cho phép lên lịch nhanh chóng cho công cụ tính. Xem Luồng thời gian thực để biết chi tiết.