【发布时间】:2012-08-15 17:48:14
【问题描述】:
我正在编写一个 RTSP 客户端模块,为此,我需要解析一个非常可变的 URI。但我完全不知道应该使用哪种方法(最安全)以及如何实现这一点。
示例 URI 可能如下所示:
rtsp://192.168.1.100:554/videocam/media/1/video/1
\_/ \_______________/\_______/\______________/
| | | |
scheme authority [sub] [mediacontrol]
还有其他可能性:
192.168.1.100/videocam/media/1/video/1
192.168.1.100:6000/media/1/video/1
192.168.1.100:6000/videocam
我需要以下信息:
IP | how can I recognise this pattern [num].[num].[num].[num]?
Port | easy if the string contains rtsp://, but what about just a number? 1-65555
Sub | Optional subpath, can completely vary!
MediaLevel | Optional MediaLevel (indicator for stream/track),
not to be confused with the path. MediaLevel can be also just like this: track1 or m1s3 or media1/video1.. see?
I can't go for the slash, also the path also can contain multiple slashes
也许有用于此类任务的库?
谢谢。
【问题讨论】:
-
你不能把它沿着 '/' 划分然后 count 。例如,左边的倒数第二个必须始终是 autority 等..?
-
所以你的第二个例子没有“sub”,第三个没有“mediacontrol”? mediacontrol 总是 /string/int/ 对的“列表”吗?另外,sub 是否可以包含数字,并且 mediacontrol 必须以字符开头?
-
我很乐意提供帮助,但需要一些方法来区分“媒体控制”/“媒体级别”和“子”...如果您没有媒体控制,但子是
media/3/video/4或者如果有一个类似的子with 一个媒体控件,比如media/1/video/4/media/3/video/123??? -
@CodeJockey 实际上有一个 mediacontrol - 大多数设备通过 SDP 字符串返回它,但有时以一种非常奇怪的方式返回:某些设备返回一个完美的使用字符串,例如 media/1/video/ 2/ 或 track1video2,但其他返回诸如“m1;v2”之类的东西或完整的绝对路径,包括。子路径。所以我认为这不可靠。主机/端口解决了,这要归功于 URI 类的英雄功能和 L.B 的提示(这真是微不足道..),但我仍然坚持将路径与媒体控制分开。另一台相机我提出了一个新案例,这很令人困惑:
-
rtsp://192.168.1.117:554/stream1_channel1 我认为这显然是一个媒体控制,但由于相机在 1 个通道上只有 1 个流并且在分析 SDP 字符串后,它是子路径(在这种情况下,媒体控件 - 没有记录在案的是“vidshow1”..)荒谬!
标签: c# regex string parsing url