הזרמת RTSP עם GStreamer - לקוח אמיתי ש&מקרה (UDP לעומת TCP)
מאמר זה מתעד שיחת תמיכת לקוחות אמיתית בנוגע להזרמת RTSP מאתנו מצלמות תרמיות באמצעות Gstreamer.
אנחנו חולקים את זה ב-a ש&פורמט של דיאלוג כך שלקוחות אחרים המתמודדים עם בעיות דומות יוכלו לעקוב במהירות אחר תהליך פתרון הבעיות.
תוכן העניינים
1. כתובת זרם RTSP
לָקוּחַ:
שלום, קיבלנו את המצלמות התרמיות שלך, הכל עובד בסדר, תודה, אבל נראה שאנחנו לא מצליחים למצוא את הכתובת לזרם RTSP. מה זה /stream/sub?
תמיכה:
כתובת האתר של זרם RTSP של המצלמה שלנו היא:
rtsp://192.168.2.254:554/live
2. דאגה להשהיית RTSP
לָקוּחַ:
בדקנו את זרם ה-RTSP ושמנו לב לאחזור ניכר בהשוואה לתצוגה המקדימה של לוח הניהול.
תמיכה:
זו התנהגות צפויה. התצוגה המקדימה של ניהול האינטרנט משתמשת בצינור פנימי מותאם, בעוד ש-RTSP תלוי בתנאי הרשת ובחציצה של הלקוח.
3. דרישת הזרמת UDP
לָקוּחַ:
זרם RTSP גם לא עובד על הנגן שלי שמצפה ל-UDP. איך אני יכול להשיג זרם UDP?
תמיכה:
אפשר לדעת באיזה נגן אתה משתמש? VLC?
לָקוּחַ:
הנגן שלי הוא GStreamer המשולב באפליקציית אנדרואיד.
4. UDP Unicast לעומת UDP Multicast
תמיכה:
אם לקוח GStreamer ניגש למכשיר באמצעות UDP multicast, זה כרגע אינו נתמך.
אנחנו צריכים להבהיר אם אתה משתמש UDP unicast אוֹ UDP multicast.
לָקוּחַ:
צינור ה-GStreamer שלי משתמש rtspsrc עם udp להגדיר ב protocols פָּרָמֶטֶר.
לא השתמשתי ב udp-mcast ערך, אז זה צריך להיות UDP unicast.
5. הבהרת פלטפורמה
תמיכה:
האם ה-GStreamer הזה פועל על Windows, לינוקס, או אנדרואיד?
מהנדס התוכנה שלנו רוצה לבדוק בצד שלנו.
לָקוּחַ:
האפליקציה שלי משתמשת ב-GStreamer באנדרואיד, אבל rtspsrc ניתן לבדוק גם בלינוקס.
6. בעיה ידועה של Linux GStreamer (תיק התייחסות)
תמיכה:
מצאנו נושא דומה שנדון בפורום טכני סיני.
פִּתָרוֹן:
הסר את ההתקנה של הפלאגין הבא:
sudo apt-get remove gstreamer1.0-plugins-ugly
תוסף זה עשוי לשלוח כותרות RTSP שמצלמות מסוימות אינן יכולות לזהות, וכתוצאה מכך שגיאת מניעת שירות.

הַפנָיָה:
https://forums.developer.nvidia.com/t/rtsp-gstreamer-simple-recieve-and-store-in-file/157535/14
האם תוכל לספק את שלך rtspsrc צינור (עדיף לינוקס)? גם גרסת אפליקציה מקובלת לבדיקה.
7. RTSP DESCRIBE תאימות כותרות
תמיכה:
סיבה אפשרית נוספת היא שאם ה-RTSP לְתַאֵר הבקשה אינה מכילה:
application/sdp
המכשיר עשוי לסרב לשירות.
היגיון אימות זה עשוי להיות קפדני מדי, ואנו מתכננים להרפות מצב זה בעדכוני קושחה עתידיים.
8. אישור גרסת Android GStreamer
לָקוּחַ:
באנדרואיד, אני משתמש:
- gstreamer-1.0-android-universal-1.26.8
זה לא כולל תוספים מכוערים. ה-Makefile שלי מכיל:
GSTREAMER_PLUGINS := \
coreelements \
playback \
typefindfunctions \
rtsp \
rtp \
rtpmanager \
udp \
tcp \
videoparsersbad \
androidmedia \
opengl
9. פרמטרי זמן ריצה של GStreamer מוצעים
תמיכה:
אנו ממליצים לנסות short-header=true ב rtspsrc.
לָקוּחַ:
האם הכותרת הזו עבור UDP?
תמיכה:
זוהי אפשרות כותרת RTSP ולעתים קרובות משפרת את התאימות.
דוגמאות:
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> short-header=true
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> do-rtcp=false short-header=true
10. תוצאות מבחן פנימי (לינוקס)
תמיכה:
המהנדס שלנו בדק את זרם RTSP באמצעות Gstreamer 1.0 על לינוקס, וזה עבד כמו שצריך.


דוגמה TCP:
gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
name=src \
latency=0 \
protocols=tcp \
src. \
! decodebin \
! autovideosink
דוגמה של UDP (לְהַסִיר protocols=tcp):
gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
name=src \
latency=0 \
src. \
! decodebin \
! autovideosink
ההיגיון הפנימי בין לינוקס לאנדרואיד GStreamer זהה, אז ההתנהגות צריכה להיות עקבית בין הפלטפורמות.
11. מַסְקָנָה
מקרה זה מדגיש מספר נקודות חשובות בעת שימוש ב-RTSP עם GStreamer:
- כתובת אתר RTSP:
rtsp://<camera_ip>:554/live - UDP unicast נתמך; UDP multicast לא
- הימנע תוספים בעייתיים (לינוקס בלבד)
- לְנַסוֹת
short-header=trueלתאימות טובה יותר - ניתן ליישם תוצאות בדיקות לינוקס בדרך כלל על אנדרואיד
אם אתה נתקל בבעיות דומות, אנא ספק את שלך צינור GStreamer או לקוח בדיקה, וצוות ההנדסה שלנו יסייע בהמשך.

שאל שאלה
תודה רבה ששלחת את התשובה! ✨