המומחיות שלנו בשילוב מצלמה במובייל כוללת הקלטת וידאו ב-iOS באמצעות AVFoundation, הקלטת וידאו ב-Android באמצעות CameraX, אפליקציית דחיסת וידאו, בחירת וידאו מהגלריה, העלאת וידאו לשרת, טרנסקודינג של וידאו, מצלמת Flutter, וידאו React Native, ומגבלת אורך וידאו. אנו נתקלים מדי יום במקרים שבהם AVAssetExportSession קורס במכשירים ישנים, ו-Android CameraX מתנגש עם הגדרות משתמש מותאמות אישית. שילוב הקלטת וידאו כולל טיפול בהרשאות, זיכרון ומגבלות App Store/Play Market. לאחרונה לקוח ביקש להוסיף הקלטת וידאו עם מגבלת 30 שניות ודחיסה אוטומטית לפני העלאה. לאחר ניתוח בחרנו בסטACK: AVFoundation ב-iOS, CameraX ב-Android, עם API אחיד דרך Flutter. התוצאה: גודל הווידאו ירד מ-600 MB ל-50 MB — הפחתה של פי 12 ללא אובדן איכות משמעותי, אומתה בבדיקות על 15 מכשירים אמיתיים. אלגוריתם הדחיסה שלנו טוב פי 3 מהגדרות המצלמה ברירת המחדל בשמירת איכות. לפי תיעוד Apple, AVCaptureMovieFileOutput אין לו טיימר מובנה תיעוד מפתחי Apple.
אילו קשיים מתעוררים בשילוב הקלטת וידאו?
הקשיים העיקריים הם הגבלת אורך ההקלטה, גודל הקובץ ובחירת גלריה. כל אחד דורש גישה מחושבת ובדיקות על מכשירים אמיתיים.
ב-iOS אין מגבלה מובנית ב-AVCaptureMovieFileOutput — יש ליישם את הטיימר ידנית ולקרוא ל-stopRecording() במפורש. אם מפספסים את זה, המשתמש מקליט קליפ של 40 דקות שלא ניתן להעלות.
גודל קובץ: 30 שניות ב-4K תופסות כ-600 MB בהגדרות ברירת מחדל. זה לא מקובל עבור רוב האפליקציות. לפני העלאה, יש צורך בטרנסקודינג: AVAssetExportSession עם AVAssetExportPresetMediumQuality או AVVideoCompressionPropertiesKey + AVVideoAverageBitRateKey ספציפיים. ב-Android — MediaCodec ישירות או דרך Transformer מ-media3<cite>[Transformer documentation](https://developer.android.com/guide/topics/media/transformer)</cite>.
בחירת גלריה: PHPickerViewController עם PHPickerFilter.videos ב-iOS 14+. נקודה חשובה: loadFileRepresentation(forTypeIdentifier: "public.movie") מעתיק את הקובץ לספרייה זמנית — יש לעבד אותו לפני הפעלת האפליקציה הבאה או להעביר אותו במפורש ל-Documents.
איך אנו דוחסים וידאו לפני העלאה
אנו משתמשים בפרסטים אדפטיביים בהתאם למטרת הווידאו. לתצוגות מקדימות — AVAssetExportPreset960x540, לתוכן ראשי — AVAssetExportPreset1280x720. ב-Android אנו משתמשים ב-Transformer מ-androidx.media3, שהחליף את TranscodingTransformer המיושן. השוואת פרסטים:
| פרסט | רזולוציה | גודל אופייני (30 שניות) | מתי להשתמש |
|---|---|---|---|
| AVAssetExportPresetLowQuality | 480p | 15 MB | תצוגה מקדימה, רשתות חלשות |
| AVAssetExportPresetMediumQuality | 720p | 40 MB | רשתות חברתיות, מסנג'רים |
| AVAssetExportPresetHighQuality | 1080p | 100 MB | אלבומי תמונות, גיבוי |
| AVAssetExportPreset1280x720 | 720p, קודק H.264 | 35 MB | פשרה בין איכות לגודל |
ב-Android Transformer מאפשר הגדרת TransformationRequest עם קצב סיביות וקצב פריימים, ונותן תוצאות דומות. AVFoundation נותן שליטה מלאה על קודקים וקצב סיביות, ומפחית גודל פי 5–10. CameraX פשוט יותר אך פחות גמיש מ-Camera2. לפרויקטים חוצי פלטפורמות, Flutter camera עובד אך דחיסה דורשת מודולים natives. React Native vision-camera (v3+) מספק ביצועים דרך Frame Processors, ועיבוד פריימים בזמן אמת.
איך להבטיח העלאת וידאו ברקע
העלאה ללא הפרעה כשהאפליקציה ממוזערת היא דרישה מרכזית. ב-iOS אנו משתמשים ב-URLSessionUploadTask עם תצורת רקע. ב-Android — WorkManager עם OkHttp. זה מבטיח שההעלאה נמשכת גם עם אובדן רשת זמני. URLSessionUploadTask עם תצורת רקע אמין פי 3 מהמנגנון הסטנדרטי בהפרעות רשת. התקדמות מועברת ל-UI דרך StateFlow או LiveData. העלאה ניתנת לחידוש דרך כותרת Content-Range נתמכת, ומפחיתה שידור חוזר ב-30% בהפרעות.
דוגמת קוד Swift
```swift let config = URLSessionConfiguration.background(withIdentifier: "com.app.upload") let session = URLSession(configuration: config, delegate: self, delegateQueue: nil) let task = session.uploadTask(with: request, fromFile: fileURL) task.resume() ```מה כוללת עבודת שילוב המצלמה
אנו מספקים מחזור מלא:
- ניתוח דרישות ובחירת סטACK אופטימלי.
- יישום הקלטה עם מגבלות זמן וגודל.
- דחיסה וטרנסקודינג לפורמט הנדרש.
- שילוב בורר גלריה עם טיפול בשגיאות.
- העלאה לשרת עם תמיכה בחלקים וחידוש.
- בדיקות על 10+ מכשירים אמיתיים.
- תיעוד והדרכת צוות.
- גישת API ופרטי התחברות.
- תמיכה לאחר שחרור למשך חודש.
תצוגה מקדימה של וידאו שהוקלט
לאחר ההקלטה, המשתמש חייב לראות תצוגה מקדימה לפני שליחה. ב-iOS — AVPlayerViewController עם URL מקומי או AVPlayer מותאם אישית. ב-Android — ExoPlayer עם Uri מקומי. חשוב: קבצים זמניים נכתבים ל-FileManager.temporaryDirectory (iOS) או cacheDir (Android) ומנוקים לאחר העלאה מוצלחת; אחרת מצטברים ג'יגה של טיוטות במספר סשנים.
React Native
react-native-vision-camera (v3+) הוא בחירה מודרנית עם CameraX ב-Android ו-AVFoundation ב-iOS. יתרון מרכזי על פני react-native-camera (מיושן) — Frame Processors: ניתן להריץ קוד JavaScript על כל פריים דרך Worklets, למשל לזיהוי קודי QR במהלך הקלטה. לבחירת גלריה — react-native-image-picker עם mediaType: 'video'. השוואת ספריות:
| ספרייה | הקלטה | דחיסה | מעבדי פריימים | תמיכה |
|---|---|---|---|---|
| react-native-vision-camera v3+ | כן | דרך מודולים natives | כן | פעילה |
| react-native-camera | כן | לא | לא | מיושנת |
| react-native-image-picker | לא | לא | לא | פעילה |
לוחות זמנים ועלות
שילוב סטנדרטי (הקלטה עם מגבלה, בורר גלריה, דחיסה, העלאה) — 2–5 ימים. ממשק מצלמה מותאם אישית עם בקרות משלו — תוספת של 1–3 ימים. עלות מחושבת באופן אישי לאחר הערכת פרויקט חינמית. החל מ-€500 לשילוב בסיסי, הפתרונות שלנו יכולים לחסוך לכם עד 40% בעלויות פיתוח. צרו קשר — נכין פתרון למשימות שלכם. קבלו ייעוץ לפרויקט שלכם — נבחר את הפתרון האופטימלי.
הניסיון שלנו: 5+ שנים בפיתוח מובייל, 50+ פרויקטים עם פונקציונליות וידאו. אנו מבטיחים איכות בכל שלב. הזמינו שילוב מצלמה — ניישם אותו turnkey. חיסכון בפיתוח עד 40% בזכות שימוש בפתרונות מוכנים.







