问题:
在使用librtsp开源库的时候发现,当输入的rtsp流包含有多个@的时候
(比如账号密码中包含'@',rtsp://admin:P@ssw0rd@192.168.31.xxx/Streaming/Channels/101),会导致拉流失败。
问题处理:
一、这是因为librtsp中只对一个@做了解析,并没有处理rtsp链接包含有多个@的情况,所以在解析rtsp的代码中需要做多个@处理。
二、在做了第一步的处理后,会发现librtsp库在rtsp的交互协议中的DESCRIBE命令时,摄像头会一直返回401错误,提示没有权限,也是因为rtsp地址中包含多个@导致的,如下图:
这种解决办法分两种情况:
1.当rtsp地址中账号密码有'@'字符,但是没有用'?'添加额外参数,如下:
rtsp://admin:P@ssw0rd@192.168.31.xxx/Streaming/Channels/101
这种情况,需要在DESCRIBE命令中的rtsp地址就要改成rtsp://192.168.31.xxx/Streaming/Channels/101,把账号密码给去掉。
2.当rtsp地址中账号密码有'@'字符,并且有用'?'添加额外参数,如下:
rtsp://admin:P@ssw0rd@192.168.31.xxx/Streaming/Channels/101?transportmode=unicast&profile=Profile_1
这种情况,需要把账号密码给去掉的同时,也要把包括'?'字段及后面的字符全部去掉,改成
rtsp://192.168.31.xxx/Streaming/Channels/101