使用 GStreamer 進行 RTSP 串流 – 真實客戶問題&案例 (UDP 與 TCP)
本文記錄了我們的 RTSP 串流媒體的真實客戶支援對話 熱像儀 使用 GStreamer.
我們正在分享它 Q&對話方塊格式 以便其他面臨類似問題的客戶可以快速遵循故障排除流程.
目錄
1. RTSP串流位址
顧客:
你好, 我們收到了您的熱像儀, 一切正常, 謝謝, 但我們似乎找不到 RTSP 流的位址. 什麼是 /stream/sub?
支持:
我們的相機 RTSP 串流 URL 是:
rtsp://192.168.2.254:554/live
2. RTSP 延遲問題
顧客:
我們測試了 RTSP 串流,發現與管理面板預覽相比有相當大的延遲.
支持:
這是預期的行為. Web管理預覽使用內部最佳化的管道, 而 RTSP 取決於網路條件和客戶端緩衝.
3. UDP 串流媒體要求
顧客:
RTSP 串流也無法在我需要 UDP 的播放器上執行. 如何取得 UDP 串流?
支持:
我可以知道你用的是什麼播放器嗎? VLC?
顧客:
我的播放器是整合在 Android 應用程式中的 GStreamer.
4. UDP 單播與 UDP 群播
支持:
如果 GStreamer 用戶端使用以下方式存取設備 UDP多播, 這是目前 不支援.
我們需要澄清您是否正在使用 UDP單播 要么 UDP多播.
顧客:
我的 GStreamer 管道使用 rtspsrc 同 udp 設定在 protocols 範圍.
我沒有使用 udp-mcast 價值, 所以應該是UDP單播.
5. 平台澄清
支持:
這個 GStreamer 是否在 Windows 上運行, Linux的, 或安卓?
我們的軟體工程師想在我們這邊進行測試.
顧客:
我的應用程式在 Android 上使用 GStreamer, 但 rtspsrc 也可以在Linux上測試.
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 管道 (Linux首選)? 應用程式版本也可以用於測試.
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. 內部測試結果 (Linux的)
支持:
我們的工程師使用以下方法測試了 RTSP 流 GStreamer 1.0 在Linux上, 它工作正常.


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
Linux 和 Android GStreamer 內部邏輯是相同的, 因此跨平台的行為應該一致.
11. 結論
此案例強調了將 RTSP 與 GStreamer 結合使用時的幾個要點:
- RTSP 網址:
rtsp://<camera_ip>:554/live - UDP 單播 得到支持; UDP 多播不是
- 避免有問題的插件 (僅限Linux)
- 嘗試
short-header=true為了更好的兼容性 - Linux測試結果一般可以應用在Android上
如果您遇到類似問題, 請提供您的 GStreamer 管道或測試客戶端, 我們的工程團隊將進一步提供協助.

問一個問題
感謝你的回應。 ✨