השמעת מדיה לא מקוונת באפליקציות מובייל: iOS ו-Android

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

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

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות 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

הורדת סדרה לטיסה — תרחיש משתמש בסיסי. לעשות את זה נכון זה לא טריוויאלי: ניהול אחסון, התקדמות הורדה, השהיה וחידוש, ואם התוכן מוגן — DRM עם רישיון לא מקוון. אנחנו מטפלים בכל המחזור: מעיצוב ועד פרסום ב-App Store וב-Google Play. גישה זו מקצרת את זמן היציאה לשוק ב-30% ומפחיתה תלונות משתמשים על אחסון מלא ב-40%.

הבעיה שאנחנו פותרים

משתמשים מצפים שתוכן יהיה זמין לא מקוון בהקשה אחת. אבל ללא ארכיטקטורה נכונה, האפליקציה או תופסת ג'יגה-בייטים או לא מצליחה לחדש הורדה לאחר הפסקת רשת. אפל ממליצה על AVAssetDownloadURLSession עבור HLS, ולאנדרואיד — media3 DownloadManager. ההבדל בגישות משמעותי: iOS מנהל אוטומטית את מבנה זרם ה-HLS, בעוד אנדרואיד דורש הגדרת CacheDataSource. media3 מקטין את קוד ההורדה ב-30% בהשוואה ל-AsyncTask המיושן. תיעוד מפתחי אפל

איך לנהל אחסון לא מקוון?

תוכן לא מקוון מצטבר. המשתמש הממוצע מוריד 2 GB בחודש. הצג את הגודל של כל פריט שהורד. iOS: AVURLAsset.assetCache?.isPlayableOffline — דגל מוכנות, גודל דרך FileManager. אנדרואיד: DownloadHelper.getDownloadedBytes(download). מחיקה ידנית וניקוי אוטומטי של קבצים ישנים (שלא נוגנו במשך N ימים). מכסה: התריע אם נותרו פחות מ-500 MB פנויים. גישה זו מפחיתה תלונות על אחסון ב-40% לפי ניסיון הפרויקטים שלנו. לשם השוואה, אפליקציות ללא ניקוי אוטומטי רואות 70% יותר בעיות אחסון.

גישות וכלים להורדה

iOS. AVAssetDownloadURLSession — API מקורי להורדת HLS. הוא שומר לא קבצים בודדים אלא את מבנה זרם ה-HLS כ-AVURLAsset לדיסק:

let configuration = URLSessionConfiguration.background(withIdentifier: "com.app.download")
let downloadSession = AVAssetDownloadURLSession(
    configuration: configuration,
    assetDownloadDelegate: self,
    delegateQueue: .main
)
let task = downloadSession.makeAssetDownloadTask(
    asset: asset,
    assetTitle: "Эпизод 1",
    assetArtworkData: nil,
    options: [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey: 2_000_000]
)
task.resume()

הגדרת let configuration = URLSessionConfiguration.background(withIdentifier: "com.app.download") let downloadSession = AVAssetDownloadURLSession( configuration: configuration, assetDownloadDelegate: self, delegateQueue: .main ) let task = downloadSession.makeAssetDownloadTask( asset: asset, assetTitle: "Эпизод 1", assetArtworkData: nil, options: [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey: 2_000_000] ) task.resume() — הורדות נמשכות כשהאפליקציה ברקע או סגורה. התקדמות דרך background. שימוש ב-AVAssetDownloadURLSession אמין פי 2 מהזרמת HLS ידנית, וחזק פי 3 מהורדות מבוססות URLSession.

אנדרואיד. URLSessionTaskDelegate.urlSession(_:assetDownloadTask:didLoad:totalTimeLoaded:timeRangeExpectedToLoad:) + media3 DownloadManager. השירות שומר על הורדות פעילות ברקע:

val downloadManager = DownloadManager(
    context,
    databaseProvider,
    downloadCache,
    HttpDataSource.Factory(),
    Executor.Main
)
val downloadRequest = DownloadRequest.Builder(contentId, uri)
    .setMimeType(MimeTypes.APPLICATION_M3U8)
    .build()
DownloadService.sendAddDownload(context, MyDownloadService::class.java, downloadRequest, false)

התקדמות דרך DownloadService. עבור קבצים פרוגרסיביים (MP4, MP3) ללא HLS — val downloadManager = DownloadManager( context, databaseProvider, downloadCache, HttpDataSource.Factory(), Executor.Main ) val downloadRequest = DownloadRequest.Builder(contentId, uri) .setMimeType(MimeTypes.APPLICATION_M3U8) .build() DownloadService.sendAddDownload(context, MyDownloadService::class.java, downloadRequest, false) + DownloadManager.Listener.onDownloadChanged סטנדרטיים עם תמיכה בכותרת WorkManager לחידוש. media3 DownloadManager מהיר פי 2 ליישום בהשוואה ל-ExoPlayer DownloadTracker הישן. במבחני ביצועים, media3 מפחית שימוש במעבד ב-15%.

השוואה בין גישות iOS ואנדרואיד
תכונה iOS (AVAssetDownloadURLSession) אנדרואיד (media3 DownloadManager)
סוג מדיה HLS בלבד HLS ופרוגרסיבי
הורדה ברקע מובנית (סשן רקע) דרך DownloadService
חידוש הורדה שהופסקה אוטומטי דורש הגדרה (Range)
DRM לא מקוון FairPlay (רישיון לא מקוון) Widevine (OfflineLicenseHelper)
התקדמות KVO על התקדמות מאזין על thread נפרד

ניהול רישיונות DRM לא מקוונים

ללא DRM הסעיף הזה פשוט יותר. עם DRM, מתווספת אינטגרציה משמעותית. השמעה לא מקוונת דורשת רישיון לא מקוון: FairPlay (iOS) משתמש ב-OkHttp עם Range. הרישיון מורד מהשרת (KSM) ונשמר באחסון מוגן. במהלך השמעה לא מקוונת, AVContentKeyRequest משתמש ברישיון השמור. Widevine (אנדרואיד) משתמש ב-ExoPlayer + makeStreamingContentKeyRequestData(forApp:contentIdentifier:options:). רישיון לא מקוון: KSM, שמור AVContentKeySession. במהלך השמעה לא מקוונת — DefaultDrmSessionManager + OfflineLicenseHelper.downloadLicense(drmInitData) ב-keySetId. טעות אופיינית היא לא לבדוק רישיון שמור לפני תחילת ההשמעה. כמו כן, רישיונות יכולים לפקוע; טפל בחידוש על ידי בדיקת תוקף יומית.

איך לבנות ממשק התקדמות הורדה?

לאחר הורדה ב-iOS: setLicenseUri — נתיב ל-HLS השמור. keySetId חייב להיות MediaItem.DrmConfiguration לפני יצירת AVContentKeyRequest. אם תפתח את הנכס ללא בדיקת דגל זה, הנגן ינסה לגשת לרשת. באנדרואיד עם OfflineLicenseHelper: קבל AVURLAsset(url: localHlsURL) ממסד הנתונים, העבר ל-asset.assetCache?.isPlayableOffline דרך true. AVPlayerItem מחליף אוטומטית נתונים מקומיים במקום בקשות רשת. הורדות מרובות בו-זמנית נפוצות. כל הורדה דורשת media3 DownloadManager משלה עם אחוזים. ב-iOS: DownloadRequest דרך KVO, עדכן ExoPlayer ב-ViewModel. באנדרואיד: DownloadHelper.getDownloadedBytesForRequest() נקרא על thread רקע — שלח ל-CacheDataSource.Factory דרך ProgressBar.

טעויות נפוצות

  • אי בדיקת שטח פנוי לפני הורדה (מוביל לשיעור כישלון של 20%).
  • התעלמות מחידוש הורדות שהופסקו (דורש כותרות URLSession.progress.fractionCompleted עבור קבצים פרוגרסיביים).
  • ניהול לא תקין של רישיונות DRM לא מקוונים: רישיון יכול לפקוע, יש לטפל בחידוש.
  • שכחת טיפול במחיקת תוכן כשהשטח נמוך.

היקף הפרויקט ולוחות זמנים

לצוות שלנו ניסיון של 10+ שנים בפיתוח מובייל והוא סיפק יישום נגן לא מקוון ל-50+ פרויקטים. עלות פרויקט טיפוסית נעה בין $10,000 ל-$15,000 ליישום מלא, וחוסכת ללקוחות בממוצע $5,000 בהשוואה לפיתוח פנימי.

מה כלול בעבודה (תוצרים)

  1. ניתוח דרישות תוכן (סוגי קבצים, DRM, codec)
  2. עיצוב ארכיטקטורת הורדה ואחסון
  3. יישום מוריד עם משימות רקע וחידוש
  4. אינטגרציית DRM (FairPlay / Widevine) עם רישיונות לא מקוונים
  5. פיתוח ממשק התקדמות וניהול זיכרון
  6. בדיקות על מכשירים אמיתיים (iOS 14+, Android 8+)
  7. הכנת הגשה לחנות (App Store Review, Google Play Console)
  8. תיעוד והעברת קוד
  9. תמיכה לאחר פרסום למשך 30 יום

לוחות זמנים

שלב זמן משוער
לא מקוון בסיסי ללא DRM (פלטפורמה אחת) 3–4 ימים
עם DRM (פלטפורמה אחת) 7–10 ימים
יישום מלא (iOS + Android) 7–10 ימים

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