簡體   English   中英

如何使用 onvif.org 從 ONVIF 相機獲取 stream

[英]How to get stream from ONVIF camera using onvif.org

我已經成功使用了在下面 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 相機獲得 stream。 (我目前正在使用軟件查看stream)

我還需要能夠獲得 stream 以便我以后可以記錄/拍攝快照。

我已經查看了此鏈接上的第 7.1 章,我正在嘗試實現這一點:
https://www.onvif.org/wp-content/uploads/2016/12/ONVIF_WG-APG-Application_Programmers_Guide-1.pdf

我想出了下面的代碼。 但奇怪的是這條線似乎把 stream 放到了某種名為“App”的播放器上。 “應用程序”未編譯,想知道如何將此 stream 放到某種播放器或控件中?

 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; } }

我發現這個 stream 播放器效果很好:

https://www.codeproject.com/Articles/885869/Stream-Player-control

如果我正確理解您的問題,您希望能夠在您的App中選擇的控件中看到 stream。

我建議您查看 Vlc.DotNet package。

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

它使您能夠將 vlc 播放器放入 c# windows 形式並在其上播放流/視頻。

如果您使用的是 Visual Studio,則可以從 NuGet Package 管理器獲取此 package 解決方案。 您可以在Tools->NuGet Package Manager->Manage NuGet Packages for Solution...下找到它。 此 VLC.DotNet package 提供的 vlc 控件還允許您從視頻中錄制和拍攝快照。

這是 wiki 的鏈接,可幫助您開始使用 Vlc.DotNet package 進行開發。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM