הטמעת סטרימינג ב-RTMP ממכשיר נייד

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

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

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

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

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

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

שאלות נפוצות

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

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

הטמעת שידור RTMP ממכשיר נייד

בעת פיתוח אפליקציה ניידת עם תכונת שידור חי ל-YouTube, Twitch או Facebook Live, נתקלים במהרה במגבלה: לא iOS ולא Android מספקות API מובנה ל-RTMP. יש לשלב ספריות צד שלישי, מה שמח inneב קונפיגורציה של קידוד חומרה דרך VideoToolbox או MediaCodec, ניהול סשן לכידה, טיפול בניתוקי חיבור והתאמת קצב סיביות לרשת. הצוות שלנו ביצע עשרות אינטגרציות של שידור RTMP — מאפליקציות כושר ועד פלטפורמות למידה מקוונת. בקשה טיפוסית מלקוח: המשתמש צריך לשדר מסך או מצלמה בזמן אמת עם חביון מינימלי, בעוד שהשידור צריך לעבוד כראוי ברקע ולהתאושש לאחר אובדן רשת.

פרוטוקול RTMP פועל על TCP, מה שמבטיח אספקת נתונים אמינה, אך דורש הגדרות timeout ו-reconnection מתאימות. לחביון נמוך במיוחד (<500 אלפיות שנייה), משתמשים ב-WebRTC, אך פלטפורמות פופולריות לא מקבלות אותו ישירות — יש צורך ב-re-streamer בצד השרת. לכן RTMP נשאר הבחירה המעשית ביותר לשידור נייד.

למה RTMP נשאר התקן לשידור נייד

RTMP משתמש ב-TCP, מספק אספקת נתונים אמינה ועובד דרך רוב חומות האש הארגוניות (פורט 1935). החביון הוא 1-3 שניות, מקובל לשידור לפלטפורמות. WebRTC נותן חביון <500 אלפיות שנייה, אבל YouTube ו-Twitch לא מקבלות אותו ישירות — נדרש re-streamer בשרת. SRT פועל על UDP אבל גם דורש תוכנת שרת נוספת. השוואת פרוטוקולים:

פרוטוקול חביון TCP/UDP תמיכת פלטפורמות מטרה
RTMP 1-3 שניות TCP YouTube, Twitch, Facebook שידור חי לפלטפורמות מרכזיות
WebRTC <500 אלפיות שנייה UDP (ו-TCP) לא נתמך ישירות על ידי YouTube/Twitch שיחות וידאו, חביון נמוך
SRT 0.5-2 שניות UDP דורש re-streamer בשרת שידור אמין ברשתות חלשות

איך להימנע ממסך שחור ואובדן חיבור

שלוש בעיות טיפוסיות של שידור RTMP נייד והפתרונות שלהן:

עיכוב התחלה. השניות הראשונות אינן יציבות — יחידות SPS/PPS NAL אינן נשמרות במטמון בשרת עדיין. ב-iOS פתרון: הגדר kVTCompressionPropertyKey_AllowFrameReordering: false — פריימים מסוג B מושבתים, החביון יורד ב-50%.

אובדן חיבור. בהפרעת רשת, יש צורך ב-reconnection אוטומטי. ב-iOS, ל-HaishinKit יש מנגנון reconnect מובנה. ב-Android, טפל ב-onConnectionFailedRtmp עם קריאות חוזרות ל-startStream() תוך שימוש ב-exponential backoff (מרווח התחלתי של 2 שניות, הגדלה עד 30 שניות).

מסך שחור. מתרחש אם קוראים ל-startStream() לפני אתחול לכידה. סדר: attachCamera → startPreview → connect → publish. ב-iOS, הגדר גם את AVCaptureSession לפני ההתחלה.

מה לבדוק לפני השידור?
  • הרשאות מצלמה ומיקרופון (iOS — NSCameraUsageDescription, NSMicrophoneUsageDescription; Android — CAMERA, RECORD_AUDIO).
  • הגדרות קצב סיביות: ל-HD (1280x720) מומלץ 2,000,000 – 3,000,000 bps.
  • אישור TLS עבור rtmps (Android — RtmpsCamera2, iOS — rtmps://).
  • בדיקת שידור לפלטפורמות עם בדיקת חביון.

iOS: HaishinKit

האפשרות הטובה ביותר ב-Swift מקורי. אין תלות ב-FFmpeg, קידוד חומרה דרך VideoToolbox. HaishinKit מתחיל שידור פי 2 מהר יותר מספריות מבוססות FFmpeg.

הגדרה מינימלית:

import HaishinKit

let rtmpConnection = RTMPConnection()
let rtmpStream = RTMPStream(connection: rtmpConnection)

rtmpStream.videoSettings = VideoCodecSettings(
    videoSize: CGSize(width: 1280, height: 720),
    bitRate: 2_000_000,
    profileLevel: kVTProfileLevel_H264_High_AutoLevel as String
)

rtmpStream.audioSettings = AudioCodecSettings(bitRate: 128_000)

// Привязываем камеру
let camera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
try rtmpStream.attachCamera(camera)
try rtmpStream.attachAudio(AVCaptureDevice.default(for: .audio))

// Превью
let hkView = MTHKView(frame: previewView.bounds)
hkView.videoGravity = .resizeAspectFill
rtmpStream.addOutput(hkView)
previewView.addSubview(hkView)

// Запуск
rtmpConnection.connect("rtmp://live.example.com/live")
rtmpStream.publish("stream_key")

Reconnection בעת ניתוק: הירשם ל-import HaishinKit let rtmpConnection = RTMPConnection() let rtmpStream = RTMPStream(connection: rtmpConnection) rtmpStream.videoSettings = VideoCodecSettings( videoSize: CGSize(width: 1280, height: 720), bitRate: 2_000_000, profileLevel: kVTProfileLevel_H264_High_AutoLevel as String ) rtmpStream.audioSettings = AudioCodecSettings(bitRate: 128_000) // Привязываем камеру let camera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) try rtmpStream.attachCamera(camera) try rtmpStream.attachAudio(AVCaptureDevice.default(for: .audio)) // Превью let hkView = MTHKView(frame: previewView.bounds) hkView.videoGravity = .resizeAspectFill rtmpStream.addOutput(hkView) previewView.addSubview(hkView) // Запуск rtmpConnection.connect("rtmp://live.example.com/live") rtmpStream.publish("stream_key") , ב-RTMPConnection.Event.rtmpStatus — code == RTMPStatusCode.connectClosed וחזור על reconnectDelay(3). ל-HaishinKit יש מנגנון connect() מובנה.

ניטור: reconnect ו-rtmpStream.info.byteCount — עקוב אחר FPS בפועל. אם הוא יורד מתחת ל-20, זה סימן לחיבור חלש.

Android: rtmp-rtsp-stream-client-java

ספרייה מאת Pedro Vicente. תומכת ב-Camera1, Camera2, CameraX, לכידת מסך. קידוד חומרה דרך RTMPStream.currentFPS.

val rtmpCamera = RtmpCamera2(binding.surfaceView, object : ConnectCheckerRtmp {
    override fun onConnectionSuccessRtmp() {
        /* обновить UI */
    }

    override fun onConnectionFailedRtmp(reason: String) {
        rtmpCamera.stopStream()
        retryConnection()
    }

    override fun onDisconnectRtmp() {
        retryConnection()
    }

    override fun onAuthErrorRtmp() {
        /* показать ошибку */
    }

    override fun onAuthSuccessRtmp() {}

    override fun onNewBitrateRtmp(bitrate: Long) {
        updateBitrateUI(bitrate)
    }
})

// Подготовка (разрешение, битрейт, FPS, аудио)
rtmpCamera.prepareVideo(1280, 720, 30, 2_000_000) && rtmpCamera.prepareAudio(128_000, 44100, true)
rtmpCamera.startStream("rtmp://live.example.com/live/stream_key")"}

MediaCodec מקבל val rtmpCamera = RtmpCamera2(binding.surfaceView, object : ConnectCheckerRtmp { override fun onConnectionSuccessRtmp() { /* обновить UI */ } override fun onConnectionFailedRtmp(reason: String) { rtmpCamera.stopStream() retryConnection() } override fun onDisconnectRtmp() { retryConnection() } override fun onAuthErrorRtmp() { /* показать ошибку */ } override fun onAuthSuccessRtmp() {} override fun onNewBitrateRtmp(bitrate: Long) { updateBitrateUI(bitrate) } }) // Подготовка (разрешение, битрейт, FPS, аудио) rtmpCamera.prepareVideo(1280, 720, 30, 2_000_000) && rtmpCamera.prepareAudio(128_000, 44100, true) rtmpCamera.startStream("rtmp://live.example.com/live/stream_key") או RtmpCamera2. עבור Jetpack Compose: SurfaceView.

התאמת קצב סיביות: TextureView — שנה קצב סיביות ללא הפעלה מחדש של השידור.

השוואת ספריות:

פרמטר iOS (HaishinKit) Android (rtmp-rtsp-stream-client-java)
שפה Swift Kotlin/Java
קידוד VideoToolbox MediaCodec
TLS rtmps RtmpsCamera2
התאמת קצב סיביות הגדרות פרמטרים setVideoBitrateOnFly
Reconnect מובנה טיפול ידני

איך אנחנו עושים את זה: מחסנית וקונפיגורציה

אנחנו משתמשים בספריות המתוארות עם קונפיגורציה נוספת של התאמת קצב סיביות אדפטיבית. ב-iOS, אנו מנטרים עומס CPU ומפחיתים קצב סיביות ב-25% אם FPS יורד מתחת ל-20. ב-Android, אנו משתמשים ב-AndroidView { RtmpCamera2(context, ...) } להתאמה דינמית. חיסכון בתעבורה עד 40% ללא אובדן איכות. לאימות, אנו משתמשים במפתח שידור ב-URL או באימות RTMP. אנו תומכים ב-rtmps עבור YouTube Live.

המהנדסים שלנו מכוונים פרמטרי קידוד לתרחישים ספציפיים: לשידור מסך — קצב סיביות נמוך יותר, למצלמה — גבוה יותר. אנו מבטיחים פעולה יציבה במכשירים עם iOS 15+ ו-Android 10+. צור קשר כדי להעריך את הפרויקט שלך.

תהליך עבודה

  1. אנליטיקה — בחירת פרוטוקול (RTMP/WebRTC), שרת, פלטפורמה. הגדרת דרישות חביון ואיכות.
  2. עיצוב — ארכיטקטורת מודול שידור, טיפול במצב רקע, reconnection, ניטור.
  3. יישום — שילוב ספרייה, קונפיגורציית קידוד, בדיקות במכשירים אמיתיים.
  4. בדיקות — בדיקת חביון, איכות וידאו, התנהגות במהלך נפילות רשת, פרסום ל-TestFlight/Google Play.
  5. פריסה — הכנה לשחרור, תיעוד, תמיכה.

מה כלול

  • אינטגרציית שידור RTMP ב-iOS ו/או Android
  • קידוד חומרה והגדרת קצב סיביות אדפטיבי
  • יישום reconnection וטיפול בשגיאות
  • תמיכה ב-TLS (rtmps)
  • תיעוד לקונפיגורציית שרת ופלטפורמת שידור
  • סיוע בבדיקת App Store ו-Google Play (דרישות מצב רקע ופרטיות)
  • אחריות תאימות לגרסאות מערכת הפעלה עדכניות

למה לבחור בנו

אנחנו בפיתוח נייד למעלה מ-5 שנים וביצענו יותר מ-50 פרויקטי וידאו. המפתחים שלנו מוסמכים ל-iOS ו-Android. אנו מבטיחים איכות קוד ועמידה בלוחות זמנים. ניסיון באינטגרציות שידור RTMP מאפשר לנו להימנע מטעויות טיפוסיות ולספק פרויקטים בזמן.

אם אתה צריך שידור RTMP באפליקציה הניידת שלך, צור קשר להערכת פרויקט. נחשב את העלות וציר הזמן באופן אישי. הזמן אינטגרציית שידור RTMP turnkey וקבל מודול מוכן תוך 2-3 ימים.