如何使用onvif.org从ONVIF摄像机获取视频流

我已经成功使用了在以下URL中找到的代码:
https://www.codeproject.com/Tips/1192709/ONVIF-PTZ-Control-in-Csharp

为了能够使用ONVIF协议摇摄/倾斜IP摄像机,如上面的URL所示,使用:
地址,命名空间
http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl,OnvifMedia10
http://onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl,OnvifPTZService

由于这种类型的代码是非常新的,所以我很乐意提供一些帮助,帮助我也可以从IP摄像机获取流。 (目前我正在使用软件查看视频流)

我还需要能够获取流,以便以后可以记录/拍摄快照。

我已经看过此链接上的7.1章,并且正在尝试实现:
https://www.onvif.org/wp-content/uploads/2016/12/ONVIF_WG-APG-Application_Programmers_Guide-1.pdf

我想出了以下代码。但是奇怪的是,这条线似乎将流送给了一种叫做“ App”的播放器。 “ App”没有编译,不知道如何将这种流传递给某种播放器或控件?

App.DoStreaming(mediaUri.Uri);

 Streaming streaming;
        public class Streaming
        {
            OnvifMedia10.StreamSetup streamSetup;
            OnvifMedia10.MediaUri mediaUri;
            OnvifMedia10.MediaClient mediaClient;
            String mediaProfileToken = "";
            String ErrorMessage = "";
            bool initialised = false;

            public bool Initialise(string cameraAddress,string username,string password)
            {
                bool result = false;
                try
                {
                    var messageElement = new TextMessageEncodingBindingElement()
                    {
                        MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12,AddressingVersion.None)
                    };
                    HttpTransportBindingElement httpBinding = new HttpTransportBindingElement()
                    {
                        AuthenticationScheme = AuthenticationSchemes.Digest
                    };
                    CustomBinding bind = new CustomBinding(messageElement,httpBinding);
                    mediaClient = new OnvifMedia10.MediaClient(bind,new EndpointAddress($"http://{cameraAddress}/onvif/Media"));
                    mediaClient.ClientCredentials.HttpDigest.AllowedImpersonationLevel = system.security.Principal.TokenImpersonationLevel.Impersonation;
                    mediaClient.ClientCredentials.HttpDigest.ClientCredential.username = username;
                    mediaClient.ClientCredentials.HttpDigest.ClientCredential.Password = password;

                    var profs = mediaClient.GetProfiles();
                    mediaProfileToken = profs[0].token;

                    // setup stream configuration
                    streamSetup = new OnvifMedia10.StreamSetup();
                    streamSetup.Stream = OnvifMedia10.StreamType.RTPUnicast; //"RTP-Unicast";
                    streamSetup.Transport.Protocol = OnvifMedia10.TransportProtocol.UDP; //"UDP";

                    // RTP/RTSP/UDP is not a special tunnelling setup (is not requiring)!
                    streamSetup.Transport.Tunnel = null;

                    // get stream URI
                    mediaUri = new OnvifMedia10.MediaUri();
                    mediaUri = mediaClient.GetStreamUri(streamSetup,mediaProfileToken);
                    App.DoStreaming(mediaUri.Uri);



                    ErrorMessage = "";
                    result = initialised = true;
                }
                catch (Exception ex)
                {
                    ErrorMessage = ex.Message;
                }
                return result;
            }
        }

jayztimes 回答:如何使用onvif.org从ONVIF摄像机获取视频流

如果我正确理解了您的问题,那么您希望能够在自己选择的App控件中查看视频流。

我建议您查看Vlc.DotNet软件包。

https://github.com/ZeBobo5/Vlc.DotNet

它使您可以将vlc播放器置于c#Windows窗体中并在其上播放流/视频。

如果使用Visual Studio,则可以从NuGet程序包管理器中获取此程序包以获取解决方案。您可以在Tools->NuGet Package Manager->Manage NuGet Packages for Solution...下找到它。此VLC.DotNet软件包提供的vlc控件还使您可以记录和拍摄视频快照。

这里是Wiki的链接,可帮助您开始使用Vlc.DotNet软件包进行开发。

https://github.com/ZeBobo5/Vlc.DotNet/wiki/Getting-started

本文链接:https://www.f2er.com/3099242.html

大家都在问