我正在尝试使用curl工具对RTSP流进行简单的健康检查。
但是这样的命令总是给我 404 Stream Not Found 错误:
curl -v --url rtsp://192.168.1.80/h264/ --user admin:1234
* Trying 192.168.1.80...
* Connected to 192.168.1.80 (192.168.1.80) port 554 (#0)
* Server auth using Basic with user 'admin'
> OPTIONS * RTSP/1.0
> CSeq: 1
> User-Agent: curl/7.47.0
> Authorization: Basic YWRtaW46YWRtaW4=
>
< RTSP/1.0 404 Stream Not Found
< CSeq: 1
< Date: Tue, Feb 27 2018 01:14:21 GMT
<
* Connection #0 to host 192.168.1.80 left intact
看起来应该是
*
之后的 URL,而不是 OPTIONS
:
> OPTIONS * RTSP/1.0
例如,我使用 VLC 媒体播放器测试了相同的 URI,并使用 tcpdump 捕获了数据包。使用 VLC,它可以正常工作,并且请求发送到 RTSP 服务器的数据如下所示:
OPTIONS rtsp://192.168.1.80:554/h264 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.2.2 (LIVE555 Streaming Media v2016.02.09)
看起来libcurl中有一个选项
CURLOPT_RTSP_STREAM_URI
可以在curl工具的引擎盖下工作,但我找不到命令行选项来设置此参数,因此*
被用作默认值:https ://curl.haxx.se/libcurl/c/CURLOPT_RTSP_STREAM_URI.html
它也不会自动使用 --url 的值。
有没有办法用curl工具测试RTSP流(我认为对DESCRIBE或OPTIONS的简单OK响应就足够了)?
将
rtsp://
添加到请求中,如下所示:
curl -v -X DESCRIBE "rtsp://USERNAME:[email protected]:554/Streaming/Channels/101"
可能为时已晚,无法对原始问题的作者有所帮助,但可能对其他人有用。我遇到了一个问题,我的 Laview Doorbell 摄像头上的 rtsp 流每隔几天就会消失,而摄像头实际上一直在运行。一个简单的curl命令返回选项并等待更多提示:
> curl -i -X OPTIONS username:[email protected]:554/Streaming/Channels/101 RTSP/1.0
200 OK Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
不想深入研究 RTSP 协议,我尝试简单地获取返回状态
> curl --head --connect-timeout 15 -i -X OPTIONS username:[email protected]:554/Streaming/Channels/101
curl: (8) Weird server reply
这实际上与“死”流的状态不同:
> curl --head --connect-timeout 15 -i -X OPTIONS username:[email protected]:554/Streaming/Channels/101
curl: (56) Recv failure: Connection reset by peer
这导致了这个简单但实用的脚本,如果状态不是“8”,它会重新启动相机:
curl --head --silent --connect-timeout 15 -i -X OPTIONS username:[email protected]:554/Streaming/Channels/101
if [ $? -ne 8 ]
then
curl "http://username:[email protected]/ISAPI/System/reboot" -X PUT -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0" -H "Accept: */*" -H "Accept-Language: en-US,en;q=0.5" -H "Referer: http://192.168.1.15/doc/page/config.asp" --data ""
fi
我成功使用了
curl -v -X DESCRIBE "USERNAME:[email protected]:554/Streaming/Channels/101" RTSP/1.0
但是找不到信息
* Trying 192.168.1.11...
* TCP_NODELAY set
* Connected to 192.168.1.11 (192.168.1.11) port 554 (#0)
* Server auth using Basic with user 'USERNAME'
> DESCRIBE /Streaming/Channels/101 HTTP/1.1
> Host: 192.168.1.11:554
> Authorization: Basic YWRtaW46MTIzNDU=
> User-Agent: curl/7.58.0
> Accept: */*
>
RTSP/1.0 404 Not Found
似乎没有使用正确的协议!我找不到如何让它使用 RTSP
PS:我可以确认它可以与 ffmpeg 一起使用!路是对的。