שיתוף מסך באפליקציות מובייל: iOS ו-Android

שיתוף מסך באפליקציה ניידת הוא משימה מורכבת, שכן iOS ו-Android מגבילות גישה ל-buffer של המסך. אנחנו בונים שיתוף מסך turnkey, תוך ניצול מנגנוני מערכת כמו ReplayKit ו-MediaProjection, ומטפלים בכל המחזור מאודיט ועד הטמעה. צוות המומחים שלנו מבטיח פעולה אמינה ותמיכה מתמשכת, כך שהפתרון שלכם עובר moderation וגדל עם העסק שלכם.

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
שיתוף מסך באפליקציות מובייל: iOS ו-Android
מורכב
~3-5 ימים

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

שאלות נפוצות

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

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

אנו משלבים שיתוף מסך באפליקציות iOS ו-Android באמצעות ממשקי ReplayKit ו-MediaProjection. עם יותר מ-50 פרויקטים שנמסרו ומהנדסי Apple ו-Google מוסמכים, אנו מבטיחים פתרונות יציבים ומוכנים לייצור. מאמר זה מכסה ארכיטקטורה, העברת פריימים ומלכודות נפוצות.

כיצד פועל ReplayKit ב-iOS?

ב-iOS, לכידת מסך אפשרית רק דרך ReplayKit. לא ניתן לקבל את תוכן המסך ישירות מתהליך האפליקציה הראשי—זוהי מגבלת sandbox. לשידור בזמן אמת, אנו משתמשים ב-RPSystemBroadcastPickerView, שמציג בורר מערכת להפעלת השידור. השידור פועל דרך Broadcast Upload Extension—יעד נפרד בפרויקט שפועל בתהליך משלו (com.apple.broadcast-services-upload). להרחבה ולאפליקציה הראשית אין זיכרון משותף—התקשורת היא רק דרך App Group (UserDefaults משותף, FileManager משותף, או Darwin notify לאותות).

מבנה ההרחבה:

class SampleHandler: RPBroadcastSampleHandler {
    override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
        switch sampleBufferType {
        case .video:
            // Передаём CMSampleBuffer в WebRTC/Agora/Livekit
            videoSource?.capturer(capturer, didCapture: toRTCVideoFrame(sampleBuffer))
        case .audioApp:
            // Системное аудио
        case .audioMic:
            // Микрофон (доступен только при явном разрешении в Info.plist)
        }
    }
}

להרחבה יש מגבלת זיכרון של 50 MB—ב-90% מהמקרים, קריסות נובעות מחריגה ממגבלה זו. Agora ו-Livekit מספקות גרסאות קלות משקל של ה-SDK שלהן במיוחד עבור Broadcast Extension. התקשורת מההרחבה לאפליקציה הראשית היא דרך class SampleHandler: RPBroadcastSampleHandler { override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) { switch sampleBufferType { case .video: // Передаём CMSampleBuffer в WebRTC/Agora/Livekit videoSource?.capturer(capturer, didCapture: toRTCVideoFrame(sampleBuffer)) case .audioApp: // Системное аудио case .audioMic: // Микрофон (доступен только при явном разрешении в Info.plist) } } } (הודעות Darwin). הרזולוציה וה-FPS מוגבלים על ידי ReplayKit: מקסימום 1080p, עד 60 FPS. בפועל, 720p ב-15 FPS מספיק לשיתוף מסך—מסכי מכשירים ניידים קטנים, וקצב הסיביות יורד ב-40% ללא אובדן קריאות טקסט.

תיעוד מפתחי Apple: ReplayKit

מהו ממשק MediaProjection ב-Android?

ב-Android, לכידת מסך משתמשת בממשק MediaProjection. המשתמש חייב לאפשר הקלטה במפורש:

val mediaProjectionManager = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
startActivityForResult(
    mediaProjectionManager.createScreenCaptureIntent(),
    REQUEST_MEDIA_PROJECTION
)

ב-CFNotificationCenter, אתה מקבל val mediaProjectionManager = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager startActivityForResult( mediaProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION ) עם הרשאה—ממנו אתה יוצר onActivityResult. Intent עם MediaProjection מספק VirtualDisplay שעליו המערכת מציירת את תוכן המסך.

לשידור דרך WebRTC, אנו משתמשים ב-MediaProjection.createVirtualDisplay() (מ-Surface): הוא עוטף את ScreenCapturerAndroid ומעביר פריימים ל-org.webrtc. מאז Android 10, בעת התחלת לכידת מסך דרך MediaProjection, יש צורך ב-VideoSource ב-manifest. ב-Android 14, בנוסף יש לציין במפורש ForegroundService בעת הפעלת השירות דרך android:foregroundServiceType="mediaProjection". ללא זה—ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION. כאשר החיבור נשבר, נקרא startForeground()—יש לטפל בכך ולהודיע למשתמש.

מפתחי Android: MediaProjection

כיצד מועברים פריימים בזמן אמת?

גם ב-iOS וגם ב-Android, פריימי מסך שנתפסו הם SecurityException (iOS) או MediaProjection.Callback.onStop()/CMSampleBuffer דרך Bitmap (Android). לשידור רשת דרך WebRTC, אנו ממירים ל-Image עם ImageReader (iOS) או RTCVideoFrame (Android). המרת YUV מ-BGRA היא פעולה יקרה—אנו מבצעים אותה בקוד native (C++) או דרך ממיר חומרה. עבור Agora, YUV420PlanarBuffer מקבל תצורה עם JavaI420Buffer כדי לייעל את ה-codec לתוכן טקסטואלי (פחות תנועה, חדות גבוהה). WebRTC גמיש יותר מ-Agora בתצורת קצב סיביות, אך Agora קלה יותר לשילוב עם Broadcast Extension. לפרויקטים בעומס גבוה (1000+ זרמים בו-זמנית), WebRTC מציע עלויות תשתית נמוכות ב-30% בהשוואה ל-Agora.

השוואה בין iOS ל-Android

פרמטר iOS (ReplayKit) Android (MediaProjection)
גרסה מינימלית iOS 12+ Android 5.0 (API 21)
לכידת מסך Broadcast Extension (תהליך נפרד) גישה ישירה דרך Intent
מגבלת זיכרון 50 MB על ההרחבה אין מגבלה קשיחה
רזולוציה מקסימלית 1080p תלוי במכשיר, לעיתים קרובות 1080p+
FPS עד 60 עד 30 (בדרך כלל)
לכידת שמע מערכת + מיקרופון מיקרופון דרך AudioRecord
שירות בחזית לא נדרש חובה (Android 10+)

בעיות נפוצות בשיתוף מסך

בעיה פתרון
קריסת Broadcast Extension ב-iOS השתמש ב-SDK קל משקל (Agora/Livekit) ועקוב אחר מגבלת ה-50 MB
SecurityException ב-Android 14 הגדר במפורש AgoraRtcKit.startScreenCapture() וקרא ל-contentHint: .text עם הסוג הנכון
המשתמש עוצר את הלכידה דרך צל ההודעות של Android טפל ב-foregroundServiceType="mediaProjection" והחלף את ממשק המשתמש כראוי ללא שגיאות
עיכוב במהלך המרת YUV השתמש בממיר חומרה או בקוד C++ native
פרטים טכניים של Broadcast Extension

Broadcast Extension פועל בתהליך נפרד עם מגבלת 50 MB. אם ה-SDK שוקל יותר—ההרחבה קורסת ללא הודעה ברורה. Agora ו-Livekit מספקות גרסאות "lite" להרחבות. להחלפת נתונים בין ההרחבה לאפליקציה הראשית, אנו משתמשים בהודעות Darwin דרך startForeground(). ההרחבה לא יכולה ליצור חיבורי רשת ישירות—היא רק מעבירה פריימים, בעוד האפליקציה הראשית מנהלת את עמית ה-WebRTC.

מה כלול ביישום שיתוף מסך?

התפוקות שלנו כוללות:

  • ארכיטקטורה ועיצוב: בחירת מחסנית (WebRTC/Agora/Livekit), תוכנית החלפת פריימים, טיפול במחזור חיים.
  • פיתוח Broadcast Extension (iOS) ו-MediaProjection Service (Android): מחזור לכידה ושידור מלא.
  • אינטגרציה עם signaling ו-WebRTC: תצורת peer connection, ICE, הגדרת relay.
  • ניהול הרשאות: בקשות הקלטת מסך, ATT, שירות בחזית.
  • טיפול בשגיאות ומקרי קצה: קריסת הרחבה, המשתמש מבטל את הלכידה, אובדן רשת.
  • תיעוד והדרכה: תיאור אינטגרציה, העברת קוד מקור עם הערות, מפגש הדרכה אחד.
  • בדיקות: על מכשירים אמיתיים עם 10+ גרסאות מערכת הפעלה שונות.
  • תמיכה: 3 חודשים של תמיכה ותחזוקה לאחר השקה.

כיצד לבחור את המחסנית לשיתוף מסך?

הבחירה בין WebRTC, Agora ו-Livekit תלויה בצרכי התאמה אישית ובזמן לשוק. WebRTC נותן שליטה מלאה על קצב סיביות ו-codec אך דורש יותר זמן אינטגרציה—בממוצע 1.5 שבועות לשתי הפלטפורמות. Agora ו-Livekit מצמצמות זאת ל-5 ימים בזכות מודולים מוכנים, אך מגבילות את גמישות התצורה. לפרויקטים בעומס גבוה (1000+ שידורים בו-זמנית), WebRTC זול ב-30% בעלויות תשתית.

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

iOS (ReplayKit + Broadcast Extension + WebRTC) — בין 3 ל-5 ימים אם ה-signaling מוכן. Android (MediaProjection + WebRTC) — בין 2 ל-3 ימים. שתי הפלטפורמות עם מחזור חיים נכון, מצב רקע והתראות UX — בין שבוע ל-1.5 שבועות. עלות פרויקט טיפוסית נעה בין $5,000 ל-$15,000 בהתאם למורכבות ולמחסנית. צור קשר להצעת מחיר מפורטת—המהנדסים המוסמכים שלנו מבטיחים אינטגרציה חלקה ומעבר 100% בבדיקות חנות האפליקציות.