2

私は 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

たぶん、そのようなタスクのためのライブラリがありますか?

ありがとうございました。

4

3 に答える 3

3
var uri = new Uri("rtsp://192.168.1.100:554/videocam/media/1/video/1");
var host = uri.Host;
var port = uri.Port;
var sub = uri.Segments[1];
var mlevel = uri.Segments.Skip(2).ToArray();
于 2012-08-20T11:48:15.693 に答える
0

UriBuilder クラスの使用方法の簡単な例を次に示します。これは例であり、実稼働の準備ができていないため、少し冗長です。さらにサブを特定する場合は、例に示すようにサブ リストに追加できます。

class Program
    {
        private static string _scheme = string.Empty;
        private static string _host = string.Empty;
        private static string _sub = string.Empty;

        static void Main(string[] args)
        {
            ParseUri("rtsp://192.168.1.100:554/videocam/media/1/video/1");
            ParseUri("192.168.1.100/videocam/media/1/video/1");
            ParseUri("192.168.1.100:6000/media/1/video/1");
            ParseUri("192.168.1.100:6000/videocam");
            // example of adding a new sub
            Sub.Add("sample");
            ParseUri("192.168.1.100:6000/sample/");
            Console.ReadLine();
        }

        private static void ParseUri(string URI)
        {
            UriBuilder uri = new UriBuilder(URI);
            _scheme = uri.Scheme;
            _host = uri.Host;
            _sub = string.Empty;
            StringBuilder sb = new StringBuilder();
            foreach (string s in uri.Uri.Segments)
            {
                if (Sub.Contains(s.Replace("/","")))
                {_sub = s;}
                else
                { sb.Append(s); }
            }

            Console.Out.WriteLine("+++++++++++++");
            Console.Out.WriteLine("URI: {0}",URI);
            Console.Out.WriteLine("Scheme: {0}", _scheme);
            Console.Out.WriteLine("sub: {0}",_sub);
            Console.Out.WriteLine("mediaControl: {0}", sb.ToString());
        }

        private static List<string> Sub
        {
            get
            {
                List<string> sub = new List<string>();
                sub.Add("videocam");
                return sub;
            }
        }
    }
于 2012-08-20T13:23:17.710 に答える