پخش جریانی RTSP با GStreamer - یک مشتری واقعی Q&یک مورد (UDP در مقابل TCP)
این مقاله یک مکالمه واقعی پشتیبانی مشتری در مورد جریان RTSP از ما را مستند می کند دوربین های حرارتی با استفاده از گودامر.
ما آن را در یک به اشتراک می گذاریم Q&یک قالب گفتگو بنابراین سایر مشتریانی که با مشکلات مشابه روبرو هستند می توانند به سرعت روند عیب یابی را دنبال کنند.
فهرست مطالب
1. آدرس جریان RTSP
مشتری:
سلام, دوربین های حرارتی شما را دریافت کردیم, همه چیز خوب کار می کند, متشکرم, اما به نظر نمی رسد آدرس جریان RTSP را پیدا کنیم. چیست /stream/sub?
حمایت کردن:
URL جریان دوربین ما 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 چندپخشی, این در حال حاضر است پشتیبانی نشده.
ما باید روشن کنیم که آیا شما استفاده می کنید یا خیر UDP unicast یا UDP چندپخشی.
مشتری:
خط لوله GStreamer من استفاده می کند rtspsrc با udp تنظیم شده در protocols پارامتر.
من استفاده نکردم udp-mcast ارزش, بنابراین باید UDP unicast باشد.
5. شفاف سازی پلت فرم
حمایت کردن:
آیا این GStreamer روی ویندوز اجرا می شود؟, لینوکس, یا اندروید?
مهندس نرم افزار ما می خواهد در کنار ما آزمایش کند.
مشتری:
برنامه من از GStreamer در اندروید استفاده می کند, ولی rtspsrc در لینوکس نیز قابل آزمایش است.
6. مشکل شناخته شده لینوکس 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. تایید نسخه اندروید 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 را با استفاده از آزمایش کرد گودامر 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 برجسته می کند:
- URL RTSP:
rtsp://<camera_ip>:554/live - UDP unicast پشتیبانی می شود; UDP چندپخشی نیست
- از افزونه های مشکل ساز خودداری کنید (فقط لینوکس)
- امتحان کنید
short-header=trueبرای سازگاری بهتر - نتایج تست لینوکس به طور کلی می تواند برای اندروید اعمال شود
اگر با مشکلات مشابه مواجه شدید, لطفا خود را ارائه دهید خط لوله GStreamer یا مشتری آزمایشی, و تیم مهندسی ما بیشتر کمک خواهد کرد.

سوال بپرسید
از پاسخ شما سپاسگزاریم. ✨