场景
Monibucav4(开源流媒体服务器)在Windows上搭建rtmp服务器并实现拉取rtsp视频流以及转换flv播放:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/132474126Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/121202130
上面拉取rtsp视频里地址一直是海康协议,如果是大华摄像头。
大华摄像头RTSP视频流地址格式:
rtsp://[username]:[password]@[ip]:[port]/cam/realmonitor?channel=1&subtype=0
username: 用户名。例如admin。
password: 密码。例如admin123。
ip: 为设备IP。例如 192.168.1.101。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype:码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。
如:rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=1
但是在使用上面的rtsp流地址进行拉流测试发现。
使用VLC播放rtsp流时无画面
使用FFmpeg的ffplay
ffplay -i rtsp的url时提示:
method DESCRIBE failed:404 Not Found
subtype 不是内部或外部命令,也不是可运行的程序。
并且在使用Monibuka进行拉流时提示:
RTSP 拉流“......”,"error":"bad status code:404(Not Found)"
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
这是因为特殊字符&未进行URLCode编码导致。
将&进行url编码之后
rtsp://admin:admin123@ip:554/cam/realmonitor?channel=1%26subtype=0
此时再进行拉流测试一切正常。
2、为什么使用urlcode编码
因为在把字符串用url方式传送给httpserver时,字符串中不能出现中文和特殊字符(空格、换行符);所以要对url 进行urlcode 。
每一个中文字符都有一个urlcode 编码
每一个特殊字符都有一个urlcode编码
可以在 urlcode 在线工具进行查看
英文的urlcode 是本身,不会变化
3、如果确定urlcode编码没问题后,大华摄像头仍然无法拉取rtsp流地址可以排查如下
大华摄像头rtsp流地址端口默认是554,查看方式
设置-端口-RTSP端口
排查大华摄像头视频编码
设置-视频-视频编码-主子码流,这里是H265,将其修改为H264尝试。
排查大华摄像头RTSP流鉴权
设置-安全-RTSP鉴权-将其修改为None
排查554端口是否开放
telnet ip 554
如果提示telnet不识别,win10上程序和功能,打开telnet客户端。