הטמעת סטרימינג מרובה מצלמות לאפליקציות מובייל

כשאתם צריכים להזרים וידאו משתי מצלמות של מכשיר נייד בו-זמנית, ערכות SDK סטנדרטיות אינן מספיקות — נדרשים פתרונות מותאמים אישית. אנחנו מיישמים ריבוי מצלמות סטרימינג במפתח מלא, ומבטיחים פעולה אמינה ותמיכה מתמשכת בכל שלב בפרויקט.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
הטמעת סטרימינג מרובה מצלמות לאפליקציות מובייל
מורכב
מ- 2 שבועות עד 3 חודשים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

יישום סטרימינג מרובה מצלמות ממכשיר נייד

יישמנו מספר פרויקטים של סטרימינג מרובה מצלמות עבור iOS ו-Android. אחד האתגרים המרכזיים הוא לכידה בו-זמנית מהמצלמה הקדמית והאחורית. זה הפך לטכנית אפשרי ב-iOS עם הצגת AVCaptureMultiCamSession ב-iOS 13. לפני כן, כל סטרימינג "מרובה מצלמות" היה סימולציה: מעבר עם עיכוב או מקור שני מוקלט מראש. כעת, ב-iPhone XS וחדשים יותר, ניתן ללכוד את שני הזרמים בו-זמנית — עם מגבלות שיפורטו להלן. הניסיון שלנו של 8 שנים בפיתוח מובייל ויותר מ-30 פרויקטי סטרימינג מבטיח פתרון יציב תחת עומס.

נדרשת הטמעה מותאמת אישית לסטרימינג מרובה מצלמות

SDKs מוכנים (למשל, Wowza GoCoder או HaishinKit) מספקים יכולות מרובות מצלמות בסיסיות אך אינם מייעלים התנהגות תרמית או מציעים PiP גמיש. בהטמעה שלנו באמצעות Metal, אנו שולטים בכל שלב: מלכידה ועד קומפוזיציה. זה מאפשר התאמה למגוון תרחישים — מוובינרים ועד בדיקות מרחוק. ארכיטקטורה מותאמת אישית מספקת עד 40% יותר FPS יציב במהלך שידורים ארוכים בהשוואה לפתרונות קופסא. להתייחסות סמכותית, ראה תיעוד מפתחי Apple: AVCaptureMultiCamSession.

בדיקת תמיכה במכשיר

פלטפורמה תנאי תמיכה מכשירים מומלצים
iOS AVCaptureMultiCamSession.isMultiCamSupported iPhone XS, 11, 12, 13, 14, SE (דור 2+)
Android CameraManager.getCameraCharacteristics + LOGICAL_MULTI_CAMERA Samsung Galaxy S22+, Google Pixel 6+, OnePlus 9+

ב-Android, התמיכה תלויה ב-OEM: לדוגמה, Xiaomi Redmi Note 10 אינו מספק שני זרמים ללא שגיאות. בדיקות על 5–10 מכשירי יעד הן חובה. ראה גם מדריך מפתחי Android: Camera2 API.

הבטחת סנכרון זרמים

סנכרון הוא המפתח. בלעדיו, חלון ה-PiP "רועד" ביחס לוידאו הראשי. אנו משתמשים ב-AVCaptureDataOutputSynchronizer ב-iOS ובחותמות זמן מתאימות ב-Android. זה מבטיח חוסר סנכרון של לא יותר מפריים אחד (33 אלפיות השנייה ב-30 fps).

import AVFoundation
let backOutput = AVCaptureVideoDataOutput()
let frontOutput = AVCaptureVideoDataOutput()
let synchronizer = AVCaptureDataOutputSynchronizer(dataOutputs: [backOutput, frontOutput])
synchronizer.setDelegate(self, queue: syncQueue)

מגבלות ארכיטקטוניות שיש להכיר לפני התחלה

import AVFoundation let backOutput = AVCaptureVideoDataOutput() let frontOutput = AVCaptureVideoDataOutput() let synchronizer = AVCaptureDataOutputSynchronizer(dataOutputs: [backOutput, frontOutput]) synchronizer.setDelegate(self, queue: syncQueue) אינו נתמך בכל המכשירים. לפני אתחול, בדיקה חובה:

import AVFoundation

let multiCamSession = AVCaptureMultiCamSession()
guard AVCaptureMultiCamSession.isMultiCamSupported else {
    // fallback на AVCaptureSession с одной камерой
    return
}

כאשר סשן מרובה מצלמות פעיל, הרזולוציה המקסימלית של כל מצלמה מופחתת — ב-iPhone 13 Pro ניתן לקבל לכל היותר 1920×1440 מהאחורית ו-1280×960 מהקדמית בו-זמנית. ניסיון להגדיר 4K בשתיהן גורם ל-AVCaptureMultiCamSession עם קוד import AVFoundation let multiCamSession = AVCaptureMultiCamSession() guard AVCaptureMultiCamSession.isMultiCamSupported else { // fallback на AVCaptureSession с одной камерой return } . בייצור — אנו קובעים 1280×720 לשתיהן, וזה מספיק לסטרימינג.

מצב תרמי. פעולה בו-זמנית של שני ISP (מעבדי אות תמונה) וקומפוזיציית GPU מחממת את המכשיר במהירות. דוגמה ב-iPhone 12 mini: לאחר 30 דקות של סטרימינג עם שתי מצלמות, מופעלת האטה תרמית, והמערכת מפחיתה בכוח את קצב הפריימים ל-20fps. פתרון — ניטור AVCaptureSessionRuntimeErrorNotification וב-AVError.outOfMemory מעבר למצלמה אחת או הפחתת קצב הביטים.

Android עם ProcessInfo.ThermalState: לכידה בו-זמנית נתמכת דרך .serious + Camera2 API או פתיחה מפורשת של שתי מצלמות פיזיות. בפועל, התמיכה תלויה ב-OEM — Samsung Galaxy S22+ מספק שני זרמים, Xiaomi זולה עשויה להחזיר CameraManager.getCameraCharacteristics. בדיקות טרום-שחרור על מערך מכשירי יעד הן חובה.

במהלך שידורים ארוכים, האיכות עלולה להתדרדר; אנו משתמשים בדרך כלל ב-720p לשתי המצלמות כדי לאזן בין ביצועים ונאמנות חזותית.

קומפוזיציית Metal עדיפה על CIFilter

CIFilter נוח אך איטי: כל יישום לוקח ~3-5 אלפיות השנייה לפריים ב-iPhone 12. ב-30 FPS, זה 90-150 אלפיות השנייה על GPU, ומשאיר מעט משאבים למקודד. Shader של Metal מבצע קומפוזיציה ב-~0.5 אלפיות השנייה לפריים — מהיר פי 6-10. טבלת השוואה:

גישה זמן לפריים FPS בסטרימינג של 2 מצלמות
CIFilter 3-5 אלפיות השנייה ~20-24 FPS
Metal shader 0.5 אלפיות השנייה ~30 FPS

קומפוזיציית Metal יעילה פי 2 מ-CIFilter במהלך שידורים ארוכים.

כיצד אנו בונים את הצינור

שלבי ההטמעה:

  1. בדיקת תמיכה במכשיר — אימות LOGICAL_MULTI_CAMERA ב-iOS או ריבוי מצלמות לוגי ב-Android.
  2. הגדרת סשן — הוספת שני מופעי ERROR_CAMERA_IN_USE ושתי תורי AVCaptureMultiCamSession.
  3. הקמת קומפוזר Metal — יצירת shader מותאם אישית שמציג את המצלמה האחורית במסך מלא ואת הקדמית כמלבן PiP.
  4. הטמעת מסנכרן — שימוש ב-AVCaptureDeviceInput ליישור חותמות זמן של פריימים.
  5. קידוד וסטרימינג — הזנת פריימים מורכבים ל-AVCaptureVideoDataOutput (H.264/H.265) ושידור דרך SRT/RTMP באמצעות Metal או HaishinKit.

נקודת מפתח — קומפוזיציה. לא ניתן להזין שני זרמי וידאו ישירות למקודד אחד. יש לערבב פריימים דרך VideoToolbox או MTKView. אנו משתמשים ב-Metal עם shader מותאם אישית: המצלמה האחורית תופסת מסך מלא, והקדמית מוצגת כמלבן PiP בפינה.

import Metal
import AVFoundation

// Получаем CMSampleBuffer от каждой камеры в разных очередях
let backQueue = DispatchQueue(label: "back.camera")
let frontQueue = DispatchQueue(label: "front.camera")
backOutput.setSampleBufferDelegate(self, queue: backQueue)
frontOutput.setSampleBufferDelegate(self, queue: frontQueue)

// Синхронизируем через AVCaptureDataOutputSynchronizer
let synchronizer = AVCaptureDataOutputSynchronizer(
    dataOutputs: [backOutput, frontOutput]
)
synchronizer.setDelegate(self, queue: syncQueue)

CIFilter הוא חובה. בלעדיו, פריימים משתי המצלמות מגיעים עם חוסר סנכרון של עד 33 אלפיות השנייה (פריים אחד ב-30fps), וחלון ה-PiP נראה רועד ביחס לזרם הראשי.

לסטרימינג SRT (כחלופה יציבה יותר ל-RTMP במובייל) — אנו משתמשים ב-import Metal import AVFoundation // Получаем CMSampleBuffer от каждой камеры в разных очередях let backQueue = DispatchQueue(label: "back.camera") let frontQueue = DispatchQueue(label: "front.camera") backOutput.setSampleBufferDelegate(self, queue: backQueue) frontOutput.setSampleBufferDelegate(self, queue: frontQueue) // Синхронизируем через AVCaptureDataOutputSynchronizer let synchronizer = AVCaptureDataOutputSynchronizer( dataOutputs: [backOutput, frontOutput] ) synchronizer.setDelegate(self, queue: syncQueue) מהודר עבור iOS/Android, או ב-AVCaptureDataOutputSynchronizer עם תמיכת SRT מובנית.

מידע נוסף על בדיקת תמיכה
  • iOS: קריאה ל-libsrt לפני יצירת הסשן.
  • Android: בדיקת HaishinKit 2.x עבור AVCaptureMultiCamSession.isMultiCamSupported.
  • בדיקות על 5-10 מכשירים אמיתיים ממערך היעד.

ניהול מיקום PiP במהלך סטרימינג

אנו הופכים את חלון ה-PiP לגריר באמצעות CameraManager.getCameraCharacteristics עם אנימציית הצמדה לפינות. הקואורדינטות נשמרות ב-UserDefaults — המשתמש לא צריך למקם מחדש בכל פעם.

בשינוי כיוון, ה-Metal shader מקבל קואורדינטות PiP חדשות אוטומטית דרך LOGICAL_MULTI_CAMERA, שמחשב מחדש את הפריסה בכל פריים.

טעויות אופייניות

  • אי הוספת UIPanGestureRecognizer למצב רקע (CADisplayLink) — כשהאפליקציה ממוזערת, iOS תהרוג את הסשן לאחר 30 שניות.
  • התעלמות מ-AVCaptureMultiCamSession בשיחה נכנסת — יש להשהות את הסטרימינג ולחדש ב-UIBackgroundModes: audio.
  • שימוש ב-sessionWasInterrupted לעיבוד sessionInterruptionEnded — פענוח ועיבוד Metal על ה-thread הראשי מורידים את ה-UI ב-8–12 אלפיות השנייה לפריים.
  • הגדרת רזולוציה גבוהה מדי ללא התחשבות בהאטה תרמית ובמשא ומתן על קצב ביטים.

מה כלול בעבודה

  • תיעוד ארכיטקטוני המתאר זרימות וטריגרים תרמיים.
  • קוד מקור עם הערות ב-Swift/Kotlin.
  • אינטגרציה עם ה-backend שלך (REST/WebSocket/GraphQL).
  • הנחיות לפרסום ב-App Store וב-Google Play.
  • חודש תמיכה לאחר מסירת הפרויקט.

אנו מבטיחים פעולה יציבה תחת עומס ועמידה בהנחיות Apple ו-Google.

לוחות זמנים ועלות

הטמעת iOS עם קומפוזר Metal, PiP, סטרימינג SRT/RTMP ובדיקות תרמיות: 4–6 שבועות. Android עם Camera2 API — בתוספת 2–3 שבועות בשל פיצול מכשירים. העלות נעה בין $15,000 עבור iOS ל-$25,000 עבור שתי הפלטפורמות, ללא הוצאות נסיעה. תמחור מדויק מחושב באופן אישי לאחר ניתוח דרישות.

קבלו ייעוץ לפרויקט שלכם — נעריך כדאיות ונספק הערכה מפורטת. צרו קשר כדי לדון במפרט הטכני ובלוח הזמנים של ההשקה.