בעת פיתוח אפליקציה לנייד למעקב וידאו במצלמות IP, האתגר המרכזי הוא בחירת פרוטוקול זרם הווידאו: RTSP למצלמות מקומיות, HLS/DASH לענן, WebRTC לשהייה מינימלית. בחירה שגויה מובילה לחוסר סנכרון שמע, צריכת נתונים גבוהה או התראות push שבורות. נפרק כל פרוטוקול ונראה כיצד ליישם אותם ב-iOS ו-Android, כולל זיהוי תנועה והקלטת וידאו.
אפליקציית מעקב וידאו לנייד היא אינטגרציה מורכבת של פרוטוקולי רשת, מצלמות ויכולות ניידות. הגדרת זרם RTSP נכונה קובעת אם המשתמש יראה וידאו בזמן אמת. לצוות שלנו ניסיון רב בתחום זה, עם למעלה מ-50 פרויקטים שהושלמו. ערימת הטכנולוגיה שלנו כוללת ExoPlayer, VLCKit, FFmpegKit, יחד עם אינטגרציית ONVIF ופתרונות גילוי מצלמות מותאמים אישית. ציינו את המקרה שלכם לפתרון מותאם.
בחירת פרוטוקול סטרימינג
| פרוטוקול | שהייה | תמיכה בנייד | מקרה שימוש |
|---|---|---|---|
| RTSP | <1 שנייה | ExoPlayer (Android), VLCKit/iOS | מצלמות מקומיות |
| HLS | 5-30 שניות | AVPlayer מקורי | מצלמות ענן |
| WebRTC | <500 אלפיות שנייה | ספריות WebRTC | נדרשת שהייה נמוכה במיוחד |
עבור מצלמות מקומיות, RTSP הוא הבחירה האופיינית — שהייה נמוכה ותאימות רחבה. עם זאת, יישום בנייד דורש ספריות נוספות.
RTSP: פענוח וידאו בנייד
זרמי RTSP ממצלמות מכילים וידאו H.264/H.265 עטוף בחבילות RTP. גם iOS וגם Android אין נגן RTSP מקורי. אפשרויות:
Android: ExoPlayer עם extension-rtsp (Media3 1.0+) מהיר בערך פי 2 בפענוח מ-VLC עבור Android SDK (libvlc-android). ExoPlayer מתמודד עם רוב מצלמות H.264, אך עם H.265 חלק משרתי RTSP עלולים לזרוק SOURCE_ERROR עקב מאפייני SDP לא סטנדרטיים.
iOS: AVPlayer אינו תומך ב-RTSP. פתרונות חלופיים: VLCKit (פונקציונלי אך בינארי ~20 MB), FFmpegKit עם קומפילציית FFmpeg מקורית (כבד יותר אך גמיש), או לקוח RTSP מותאם אישית על RTP/UDP באמצעות Network.framework. האחרון דורש עבודה רבה אך נותן שליטה מלאה על ביטול השהייה והשהייה.
| ספרייה | פלטפורמה | תמיכת RTSP | גודל | רישיון |
|---|---|---|---|---|
| ExoPlayer Media3 | Android | כן (הרחבה) | ~2 MB | Apache 2.0 |
| VLCKit | iOS | כן | ~20 MB | LGPL |
| FFmpegKit | iOS/Android | כן (בנייה) | ~30 MB | LGPL/GPL |
למה ONVIF הוא התקן למצלמות IP?
ONVIF הוא תקן בינלאומי למצלמות IP (Hikvision, Dahua, Axis, Reolink). פרופיל S מגדיר GetStreamUri, GetSnapshotUri, בקרת PTZ. WS-Discovery לגילוי מכשירים ברשת המקומית. לפי ONVIF Profile S, GetStreamUri מחזיר את כתובת ה-RTSP עבור כל מצלמה.
דוגמת WS-Discovery ב-Android (Kotlin)
// Android: WS-Discovery multicast class ONVIFDiscovery {
private val MULTICAST_ADDRESS = "239.255.255.250"
private val MULTICAST_PORT = 3702
suspend fun discoverDevices(timeout: Long = 3000): List<ONVIFDevice> {
val socket = MulticastSocket(MULTICAST_PORT)
socket.joinGroup(InetAddress.getByName(MULTICAST_ADDRESS))
socket.soTimeout = timeout.toInt()
val probeMessage = buildWSDiscoveryProbe()
val packet = DatagramPacket(
probeMessage.toByteArray(),
probeMessage.length,
InetAddress.getByName(MULTICAST_ADDRESS),
MULTICAST_PORT
)
socket.send(packet)
val devices = mutableListOf<ONVIFDevice>()
val buffer = ByteArray(4096)
try {
while (true) {
val response = DatagramPacket(buffer, buffer.size)
socket.receive(response)
parseWSDiscoveryResponse(String(response.data, 0, response.length))
?.let { devices.add(it) }
}
} catch (e: SocketTimeoutException) {
/* нормальное завершение */
}
socket.close()
return devices
}
}כדי לקבל את כתובת ה-RTSP: בקשת SOAP // Android: WS-Discovery multicast class ONVIFDiscovery { private val MULTICAST_ADDRESS = "239.255.255.250" private val MULTICAST_PORT = 3702 suspend fun discoverDevices(timeout: Long = 3000): List<ONVIFDevice> { val socket = MulticastSocket(MULTICAST_PORT) socket.joinGroup(InetAddress.getByName(MULTICAST_ADDRESS)) socket.soTimeout = timeout.toInt() val probeMessage = buildWSDiscoveryProbe() val packet = DatagramPacket( probeMessage.toByteArray(), probeMessage.length, InetAddress.getByName(MULTICAST_ADDRESS), MULTICAST_PORT ) socket.send(packet) val devices = mutableListOf<ONVIFDevice>() val buffer = ByteArray(4096) try { while (true) { val response = DatagramPacket(buffer, buffer.size) socket.receive(response) parseWSDiscoveryResponse(String(response.data, 0, response.length)) ?.let { devices.add(it) } } } catch (e: SocketTimeoutException) { /* нормальное завершение */ } socket.close() return devices } } עם WS-Security (אימות Digest). הספרייה GetStreamUri מפשטת, אך לעיתים קרובות מפגרת אחרי קושחת המצלמות העדכנית — אנו מעדיפים לכתוב לקוח SOAP מותאם אישית על Retrofit עם ממיר מותאם.
צפייה בריבוי מצלמות
רשת של 4 או 9 מצלמות בו-זמנית היא משימה כבדה. כל זרם RTSP דורש מפענח נפרד. ב-Android עם 9 מצלמות Full HD, אנו מסתכנים במיצוי מפענחי החומרה (בדרך כלל 4–8 לכל שבב); השאר נופלים לפענוח תוכנה, מה שמוריד את קצב הפריימים ל-5–10.
פתרון: עבור הרשת, השתמשו בתמונות MJPEG דרך ONVIF onvif4java, המתעדכנות כל 2–3 שניות במקום זרמי וידאו מלאים. RTSP מלא מופעל רק בעת לחיצה על מצלמה למעבר למסך מלא. זה מאזן בין עומס לאינפורמטיביות.
הקלטה והיסטוריה: אחסון מקומי וענן
הקלטת קטעים מהמצלמה לטלפון: הורדה דרך ONVIF GetSnapshotUri או ISAPI (Hikvision). אחסון מקומי ב-GetRecordings (Android 10+) או MediaStore (iOS). עבור מצלמות ענן, קישורי MP4 ישירים מענן היצרן.
זיהוי תנועה: או מבוסס חומרה (במצלמה, אירועים דרך ONVIF Event Service) או מבוסס תוכנה בנייד על ידי השוואת הבדלי YUV בין פריימים. זיהוי חומרה אמין יותר — פחות התראות שווא.
מה כלול בפיתוח
- ניתוח דגמי מצלמות ותאימות ONVIF
- בחירת פרוטוקול והגדרת זרם RTSP
- רשת ריבוי מצלמות עם תמונות MJPEG
- אינטגרציה של הקלטה וזיהוי תנועה
- פרסום ל-App Store ו-Google Play
- תיעוד טכני והדרכת צוות
- תמיכה לאחר השחרור (אופציונלי)
יישום צפיית RTSP שלב אחר שלב
- בדקו אילו פרוטוקולים המצלמות שלכם תומכות (RTSP, ONVIF, HLS).
- בחרו נגן: עבור Android — ExoPlayer עם הרחבת RTSP, עבור iOS — VLCKit או FFmpegKit.
- הגדירו ביטול השהייה לשהייה מינימלית (יעד מתחת ל-500 אלפיות שנייה).
- בדקו על מצלמות שונות ותנאי רשת שונים.
- עבור מצבי ריבוי מצלמות, יישמו תמונות MJPEG לחיסכון במשאבים.
לוחות זמנים ועלויות
פיתוח אפליקציה לנייד עם צפיית RTSP למצלמה אחת ובקרת ONVIF בסיסית: 4–5 שבועות (החל מ-$5,000). מערכת ריבוי מצלמות עם WS-Discovery, בקרת PTZ, היסטוריית הקלטות והתראות push לתנועה: 8–12 שבועות ($15,000-$25,000). העלויות מחושבות בנפרד לאחר ניתוח דגמי המצלמות ודרישות האחסון שלכם. שימוש בספריות מוכנות חוסך עד 40% מזמן הפיתוח בהשוואה לבניית לקוח RTSP מותאם אישית. קבלו ייעוץ לפרויקט שלכם — נעריך לוחות זמנים ועלויות.
הניסיון שלנו בפיתוח אפליקציות מעקב וידאו כולל למעלה מ-50 פרויקטים מוצלחים עבור מצלמות Hikvision, Dahua, Axis, Reolink. אנו מבטיחים עמידה בהנחיות סקירת ה-App Store (סעיפים 4.2/5.1) ואבטחת מידע.







