Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检测流媒体源是否处于活动状态?_C#_.net_Streaming_Protocols - Fatal编程技术网

C# 如何检测流媒体源是否处于活动状态?

C# 如何检测流媒体源是否处于活动状态?,c#,.net,streaming,protocols,C#,.net,Streaming,Protocols,假设有一些类型的流媒体源,如: rtsp://mysite.com//sources/channel1 mms://mysite.com/channel2 有没有一种简单的方法来检测它们是否在C#中存活 如果你投了反对票,请解释一下。谢谢 我相信您正在寻找FileWebRequest类,尝试下载一些字节的流,并告诉您它们是否处于活动状态。我不认为这个类仅仅是http,但是添加对其他协议的支持应该很简单 更新以供评论 您可以更深入地使用TcpClient类,而不用做很多工作,它可以告诉您服务器

假设有一些类型的流媒体源,如:

rtsp://mysite.com//sources/channel1

mms://mysite.com/channel2

有没有一种简单的方法来检测它们是否在C#中存活


如果你投了反对票,请解释一下。谢谢

我相信您正在寻找FileWebRequest类,尝试下载一些字节的流,并告诉您它们是否处于活动状态。我不认为这个类仅仅是http,但是添加对其他协议的支持应该很简单

更新以供评论


您可以更深入地使用TcpClient类,而不用做很多工作,它可以告诉您服务器是否至少在侦听http、rtsp和mms端口

我相信您正在寻找FileWebRequest类,尝试下载一些字节的流,并告诉您它们是否处于活动状态。我不认为这个类仅仅是http,但是添加对其他协议的支持应该很简单

更新以供评论


您可以更深入地使用TcpClient类,而不用做很多工作,它可以告诉您服务器是否至少在侦听http、rtsp和mms端口

嗯。。。我面临的唯一解决方案是实现一些DLL,通过不同的方式检查所有这些URL:

(1)要检查http/https,我们可以使用

HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://content.bitsontherun.com/videos/bkaovAYt-52qL9xLP.mp4");
WebReq.Method = "GET";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Console.WriteLine(WebResp.StatusCode); // Server Code
因此,如果
StatusCode
OK
链接处于活动状态

(2) 要查看彩信,我们可以使用

HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://content.bitsontherun.com/videos/bkaovAYt-52qL9xLP.mp4");
WebReq.Method = "GET";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Console.WriteLine(WebResp.StatusCode); // Server Code
WPF Mediaelement及其事件

public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                MediaElement me = new MediaElement();
                me.MediaEnded += me_MediaEnded;
                me.MediaFailed += me_MediaFailed;
                me.MediaOpened += me_MediaOpened;

                me.Source = new Uri("mms://95.0.159.131/TRTBELGESEL");

                mainGrid.Children.Add(me);
            }
            catch (Exception ex)
            {                
            }
        }

        void me_MediaOpened(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("OPENED"); //  It means OK!
        }

        void me_MediaFailed(object sender, ExceptionRoutedEventArgs e)
        {
            Debug.WriteLine("FAILED");
        }

        void me_MediaEnded(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("ENDED");
        }
(3)要查看rtsp链接,我们可以使用另一个很棒的库

我发现:

static void TestRtspClient()
        {

            Console.WriteLine("Test #1. Press a key to continue. Press Q to Skip");
            if (Console.ReadKey().Key != ConsoleKey.Q)
            {

                //Make a client
                //This host uses Udp but also supports Tcp if Nat fails
                Rtsp.RtspClient client = new Rtsp.RtspClient("rtsp://178.218.212.102:1935/live/Stream1");
            StartTest:
                //Assign some events (Could log each packet to a dump here)
                client.OnConnect += (sender, args) => { Console.WriteLine("Connected to :" + client.Location); };
                client.OnRequest += (sender, request) => { Console.WriteLine("Client Requested :" + request.Location + " " + request.Method); };
                client.OnResponse += (sender, request, response) => { Console.WriteLine("Client got response :" + response.StatusCode + ", for request: " + request.Location + " " + request.Method); };
                client.OnPlay += (sender, args) =>
                {
                    //Indicate if LivePlay
                    if (client.LivePlay)
                    {
                        Console.WriteLine("Playing from Live Source");
                    }

                    //Indicate if StartTime is found
                    if (client.StartTime.HasValue)
                    {
                        Console.WriteLine("Media Start Time:" + client.StartTime);

                    }

                    //Indicate if EndTime is found
                    if (client.EndTime.HasValue)
                    {
                        Console.WriteLine("Media End Time:" + client.EndTime);
                    }
                };
                client.OnDisconnect += (sender, args) => { Console.WriteLine("Disconnected from :" + client.Location); };

                try
                {
                    //Try to StartListening
                    client.StartListening();
                }
                catch (Exception ex)
                {
                    Console.BackgroundColor = ConsoleColor.Red;
                    Console.WriteLine("Was unable to StartListening: " + ex.Message);
                    Console.BackgroundColor = ConsoleColor.Black;
                }

                //If We are connected
                if (client.Connected && client.Client != null)
                {

                    //Add some more events once Listening
                    client.Client.RtpPacketReceieved += (sender, rtpPacket) => { Console.WriteLine("Got a RTP packet, SequenceNo = " + rtpPacket.SequenceNumber + " Channel = " + rtpPacket.Channel + " PayloadType = " + rtpPacket.PayloadType + " Length = " + rtpPacket.Length); };
                    client.Client.RtpFrameChanged += (sender, rtpFrame) => { Console.BackgroundColor = ConsoleColor.Blue; Console.WriteLine("Got a RTPFrame PacketCount = " + rtpFrame.Count + " Complete = " + rtpFrame.Complete); Console.BackgroundColor = ConsoleColor.Black; };
                    client.Client.RtcpPacketReceieved += (sender, rtcpPacket) => { Console.WriteLine("Got a RTCP packet Channel= " + rtcpPacket.Channel + " Type=" + rtcpPacket.PacketType + " Length=" + rtcpPacket.Length + " Bytes = " + BitConverter.ToString(rtcpPacket.Payload)); };
                    client.Client.RtcpPacketReceieved += (sender, rtcpPacket) => { Console.BackgroundColor = ConsoleColor.Green; Console.WriteLine("Sent a RTCP packet Channel= " + rtcpPacket.Channel + " Type=" + rtcpPacket.PacketType + " Length=" + rtcpPacket.Length + " Bytes = " + BitConverter.ToString(rtcpPacket.Payload)); Console.BackgroundColor = ConsoleColor.Black; };

                    Console.WriteLine("Waiting for packets... Press Q to exit");

                    //Ensure we recieve a bunch of packets before we say the test is good
                    while (Console.ReadKey().Key != ConsoleKey.Q) { }

                    try
                    {
                        //Send a few requests just because
                        var one = client.SendOptions();
                        var two = client.SendOptions();
                        Console.BackgroundColor = ConsoleColor.Green;
                        Console.WriteLine("Sending Options Success");
                        Console.WriteLine(string.Join(" ", one.GetHeaders()));
                        Console.WriteLine(string.Join(" ", two.GetHeaders()));
                        Console.BackgroundColor = ConsoleColor.Black;

                        //Print information before disconnecting
                        Console.BackgroundColor = ConsoleColor.Green;
                        Console.WriteLine("RtcpBytes Sent: " + client.Client.TotalRtcpBytesSent);
                        Console.WriteLine("Rtcp Packets Sent: " + client.Client.TotalRtcpPacketsSent);
                        Console.WriteLine("RtcpBytes Recieved: " + client.Client.TotalRtcpBytesReceieved);
                        Console.WriteLine("Rtcp Packets Recieved: " + client.Client.TotalRtcpPacketsReceieved);
                        Console.WriteLine("Rtp Packets Recieved: " + client.Client.TotalRtpPacketsReceieved);
                        Console.BackgroundColor = ConsoleColor.Black;
                    }
                    catch
                    {
                        Console.BackgroundColor = ConsoleColor.Red;
                        Console.WriteLine("Sending Options Failed");
                        Console.BackgroundColor = ConsoleColor.Black;
                    }

                    //All done with the client
                    client.StopListening();
                }

                //All done
                Console.WriteLine("Exiting RtspClient Test");

                //Perform another test if we need to
                if (client.Location.ToString() != "rtsp://fms.zulu.mk/zulu/a2_1")
                {
                    //Do another test
                    Console.WriteLine("Press a Key to Start Test #2 (Q to Skip)");
                    if (System.Console.ReadKey().Key != ConsoleKey.Q)
                    {

                        //Try another host (this one uses Tcp and forces the client to switch from Udp because Udp packets usually never arrive)
                        //We will not specify Tcp we will allow the client to switch over automatically
                        client = new Rtsp.RtspClient("rtsp://fms.zulu.mk/zulu/a2_1");
                        //Switch in 5 seconds rather than the default of 10
                        client.ProtocolSwitchSeconds = 5;
                        Console.WriteLine("Performing 2nd Client test");
                        goto StartTest;
                    }
                }

            }
        }
所以我们可以使用

 if (client.Connected && client.Client != null)
最后,我们必须把所有这些东西结合在一起,就是这样


享受!!!:)

嗯。。。我面临的唯一解决方案是实现一些DLL,通过不同的方式检查所有这些URL:

(1)要检查http/https,我们可以使用

HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://content.bitsontherun.com/videos/bkaovAYt-52qL9xLP.mp4");
WebReq.Method = "GET";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Console.WriteLine(WebResp.StatusCode); // Server Code
因此,如果
StatusCode
OK
链接处于活动状态

(2) 要查看彩信,我们可以使用

HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://content.bitsontherun.com/videos/bkaovAYt-52qL9xLP.mp4");
WebReq.Method = "GET";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Console.WriteLine(WebResp.StatusCode); // Server Code
WPF Mediaelement及其事件

public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                MediaElement me = new MediaElement();
                me.MediaEnded += me_MediaEnded;
                me.MediaFailed += me_MediaFailed;
                me.MediaOpened += me_MediaOpened;

                me.Source = new Uri("mms://95.0.159.131/TRTBELGESEL");

                mainGrid.Children.Add(me);
            }
            catch (Exception ex)
            {                
            }
        }

        void me_MediaOpened(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("OPENED"); //  It means OK!
        }

        void me_MediaFailed(object sender, ExceptionRoutedEventArgs e)
        {
            Debug.WriteLine("FAILED");
        }

        void me_MediaEnded(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("ENDED");
        }
(3)要查看rtsp链接,我们可以使用另一个很棒的库

我发现:

static void TestRtspClient()
        {

            Console.WriteLine("Test #1. Press a key to continue. Press Q to Skip");
            if (Console.ReadKey().Key != ConsoleKey.Q)
            {

                //Make a client
                //This host uses Udp but also supports Tcp if Nat fails
                Rtsp.RtspClient client = new Rtsp.RtspClient("rtsp://178.218.212.102:1935/live/Stream1");
            StartTest:
                //Assign some events (Could log each packet to a dump here)
                client.OnConnect += (sender, args) => { Console.WriteLine("Connected to :" + client.Location); };
                client.OnRequest += (sender, request) => { Console.WriteLine("Client Requested :" + request.Location + " " + request.Method); };
                client.OnResponse += (sender, request, response) => { Console.WriteLine("Client got response :" + response.StatusCode + ", for request: " + request.Location + " " + request.Method); };
                client.OnPlay += (sender, args) =>
                {
                    //Indicate if LivePlay
                    if (client.LivePlay)
                    {
                        Console.WriteLine("Playing from Live Source");
                    }

                    //Indicate if StartTime is found
                    if (client.StartTime.HasValue)
                    {
                        Console.WriteLine("Media Start Time:" + client.StartTime);

                    }

                    //Indicate if EndTime is found
                    if (client.EndTime.HasValue)
                    {
                        Console.WriteLine("Media End Time:" + client.EndTime);
                    }
                };
                client.OnDisconnect += (sender, args) => { Console.WriteLine("Disconnected from :" + client.Location); };

                try
                {
                    //Try to StartListening
                    client.StartListening();
                }
                catch (Exception ex)
                {
                    Console.BackgroundColor = ConsoleColor.Red;
                    Console.WriteLine("Was unable to StartListening: " + ex.Message);
                    Console.BackgroundColor = ConsoleColor.Black;
                }

                //If We are connected
                if (client.Connected && client.Client != null)
                {

                    //Add some more events once Listening
                    client.Client.RtpPacketReceieved += (sender, rtpPacket) => { Console.WriteLine("Got a RTP packet, SequenceNo = " + rtpPacket.SequenceNumber + " Channel = " + rtpPacket.Channel + " PayloadType = " + rtpPacket.PayloadType + " Length = " + rtpPacket.Length); };
                    client.Client.RtpFrameChanged += (sender, rtpFrame) => { Console.BackgroundColor = ConsoleColor.Blue; Console.WriteLine("Got a RTPFrame PacketCount = " + rtpFrame.Count + " Complete = " + rtpFrame.Complete); Console.BackgroundColor = ConsoleColor.Black; };
                    client.Client.RtcpPacketReceieved += (sender, rtcpPacket) => { Console.WriteLine("Got a RTCP packet Channel= " + rtcpPacket.Channel + " Type=" + rtcpPacket.PacketType + " Length=" + rtcpPacket.Length + " Bytes = " + BitConverter.ToString(rtcpPacket.Payload)); };
                    client.Client.RtcpPacketReceieved += (sender, rtcpPacket) => { Console.BackgroundColor = ConsoleColor.Green; Console.WriteLine("Sent a RTCP packet Channel= " + rtcpPacket.Channel + " Type=" + rtcpPacket.PacketType + " Length=" + rtcpPacket.Length + " Bytes = " + BitConverter.ToString(rtcpPacket.Payload)); Console.BackgroundColor = ConsoleColor.Black; };

                    Console.WriteLine("Waiting for packets... Press Q to exit");

                    //Ensure we recieve a bunch of packets before we say the test is good
                    while (Console.ReadKey().Key != ConsoleKey.Q) { }

                    try
                    {
                        //Send a few requests just because
                        var one = client.SendOptions();
                        var two = client.SendOptions();
                        Console.BackgroundColor = ConsoleColor.Green;
                        Console.WriteLine("Sending Options Success");
                        Console.WriteLine(string.Join(" ", one.GetHeaders()));
                        Console.WriteLine(string.Join(" ", two.GetHeaders()));
                        Console.BackgroundColor = ConsoleColor.Black;

                        //Print information before disconnecting
                        Console.BackgroundColor = ConsoleColor.Green;
                        Console.WriteLine("RtcpBytes Sent: " + client.Client.TotalRtcpBytesSent);
                        Console.WriteLine("Rtcp Packets Sent: " + client.Client.TotalRtcpPacketsSent);
                        Console.WriteLine("RtcpBytes Recieved: " + client.Client.TotalRtcpBytesReceieved);
                        Console.WriteLine("Rtcp Packets Recieved: " + client.Client.TotalRtcpPacketsReceieved);
                        Console.WriteLine("Rtp Packets Recieved: " + client.Client.TotalRtpPacketsReceieved);
                        Console.BackgroundColor = ConsoleColor.Black;
                    }
                    catch
                    {
                        Console.BackgroundColor = ConsoleColor.Red;
                        Console.WriteLine("Sending Options Failed");
                        Console.BackgroundColor = ConsoleColor.Black;
                    }

                    //All done with the client
                    client.StopListening();
                }

                //All done
                Console.WriteLine("Exiting RtspClient Test");

                //Perform another test if we need to
                if (client.Location.ToString() != "rtsp://fms.zulu.mk/zulu/a2_1")
                {
                    //Do another test
                    Console.WriteLine("Press a Key to Start Test #2 (Q to Skip)");
                    if (System.Console.ReadKey().Key != ConsoleKey.Q)
                    {

                        //Try another host (this one uses Tcp and forces the client to switch from Udp because Udp packets usually never arrive)
                        //We will not specify Tcp we will allow the client to switch over automatically
                        client = new Rtsp.RtspClient("rtsp://fms.zulu.mk/zulu/a2_1");
                        //Switch in 5 seconds rather than the default of 10
                        client.ProtocolSwitchSeconds = 5;
                        Console.WriteLine("Performing 2nd Client test");
                        goto StartTest;
                    }
                }

            }
        }
所以我们可以使用

 if (client.Connected && client.Client != null)
最后,我们必须把所有这些东西结合在一起,就是这样


享受!!!:)

嗯。。。像这样的事。。。但是
FileWebRequest
类对我标记的协议没有帮助。是的。。。像这样的事。。。但是
FileWebRequest
类对我标记的协议没有帮助。你是说'live'还是'alive'?@leppie我的意思是如果有任何“OK”响应,如果服务器支持,你可以尝试一个
HEAD
请求。你是说'live'还是'alive'?@leppie我的意思是如果有任何“OK”响应如果服务器支持,您可以尝试一个
HEAD
请求。我是该库的作者,我认为您可以制作一个稍微简短的示例。。。也许我应该。我是那个图书馆的作者,我想你可以做一个稍微简短的例子。。。也许我应该。