【问题标题】:Detect rtsp stream before playing using gstreamer在使用 gstreamer 播放之前检测 rtsp 流
【发布时间】:2016-09-05 09:42:58
【问题描述】:

我可以在 linux 中通过 ip 摄像头播放 rtsp 流:

gst-launch -v rtspsrc location="rtsp://admin:pw@192.168.3.106/live1.sdp" name=demux demux. ! queue max-size-buffers=2 ! rtph264depay ! ffdec_h264 ! ffmpegcolorspace ! autovideosink sync=false

如何在尝试播放之前检查 rtsp 流是否在网络上实际可用。我希望我的流播放能够检测 rtsp 流是否已关闭,这样在可用之前我不会尝试播放流。

【问题讨论】:

    标签: gstreamer rtsp rtsp-client


    【解决方案1】:

    您需要编写一个客户端应用程序才能做到这一点,我认为在命令行上是不可能的。使用该应用程序,您可以尝试从 rtsp 源播放,如果超时,您可以重试或向用户提供合适的消息,表明流不可用或重试。

    话虽如此,有很多开源 github 项目都有这样的播放器,适用于各种平台 Android、Windows、Linux QT 等。使用“gstreamer rtsp viewer github”进行简单的谷歌搜索会列出很多。

    【讨论】:

    • 在我的应用程序中,没有用户交互,应用程序要么播放一个可用的流,比如说 10 秒,然后移到下一个项目,要么根本不播放,只是移到下一个项目。
    • 那么您可以使用计时器并检查管道状态或 rtspsrc 元素的状态 - 如果它开始播放,则停止计时器,否则移动到下一个并重新启动计时器。另一种可能性是在提供的回调中查看 rtspsrc 上的帧并停止计时器。无论哪种方式,gstreamer 都没有提供直接的方法来做到这一点。
    • 我更多的是考虑 nmap 是否是一个不错的选择?如果网络中的网络摄像机出现故障怎么办,尝试播放出现故障的东西是没有意义的。这是因为,在转到下一个项目之前,我仍然会出现短暂的黑屏。如果我根本不尝试播放 rtsp 项目,那就更好了。
    • 您可以为 ping 请求编写一个简单的(也可用示例)来检查相机是否启动 - 如果是,您应该能够 ping 它。 boost.org/doc/libs/1_51_0/doc/html/boost_asio/example/icmp/… - boost 有一个很好的例子
    • 我以为是 ping,但在 icmp 上 ping 需要 root 权限,所以 ping 的想法似乎不起作用。 boost asio 似乎有点矫枉过正,或者感觉大图书馆只做 ping。
    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2011-08-18
    • 2013-01-03
    相关资源
    最近更新 更多