После полудня все
У меня * WP1 приложение C# работает хорошо, как и с вашей помощью, теперь я пытаюсь настроить его, так как это происходит, если камера теряет соединение, ссылка зависает и не будет пытаться переподключиться автоматически .
Я искал в Google, но не нашел ничего, что указывает мне правильное направление. Я наткнулся на Ping () и попробовал, кажется, он работает очень хорошо. Проблема в том, что он не обрабатывает остальное при потере соединения.
private void CommsTmr_Elapsed(object sender, ElapsedEventArgs e)
{
TestCnx();
}
private void TestCnx()
{
this.Dispatcher.Invoke(() => {
string Ip = "10.0.0.60";
Ping WhPing = new Ping();
int timeout = 1000;
PingReply WhPingResult = WhPing.Send(Ip, timeout);
if ((WhPingResult.Status == IPStatus.Success) && (CnktFail == false))
{
ConnectCam();
}
else if ((WhPingResult.Status != IPStatus.Success)||(CnktFail!= true))
{
((VlcControl)videoSin).SourceProvider.MediaPlayer.Stop();
((VlcControl)videoSin).SourceProvider.MediaPlayer.Dispose();
CnktFail = true;
txttmr.Text ="Camera Disconnected!!";
}
WhPing.PingCompleted += WhPing_PingCompleted;
});
}
private void WhPing_PingCompleted(object sender, PingCompletedEventArgs e)
{
((AutoResetEvent)e.UserState).Set();
}
private void ConnectCam()
{
deviceUri = new UriBuilder("http:/onvif/device_service");
deviceUri.Host = "10.0.0.60";
deviceUri.Port = 80;
System.ServiceModel.Channels.Binding binding;
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
httpTransport.AuthenticationScheme = System.Net.AuthenticationSchemes.Digest;
binding = new CustomBinding(new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, Encoding.UTF8), httpTransport);
try
{
DeviceClient device = new DeviceClient(binding, new EndpointAddress(deviceUri.ToString()));
Service[] services = device.GetServices(false);
Service xmedia2 = services.FirstOrDefault(s => s.Namespace == "http://www.onvif.org/ver20/media/wsdl");
if (xmedia2 != null)
{
media = new Media2Client(binding, new EndpointAddress(deviceUri.ToString()));
media.ClientCredentials.HttpDigest.ClientCredential.UserName = "Alberto";//user.Text;
media.ClientCredentials.HttpDigest.ClientCredential.Password = "AMarino1";//password.Password;
media.ClientCredentials.HttpDigest.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
profiles = media.GetProfiles(null, null);
}
//VideoStream();
StreamVideoOnVLC(prms);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void StreamVideoOnVLC(String[] recordParams)
{
// Channel 1 Profile 0, Port 80
// Channel 2 Profile 1, Port 80
UriBuilder uri = new UriBuilder(media.GetStreamUri("RtspOverHttp", profiles[0].token));
uri.Host = "10.0.0.60";
uri.Port = 80;
uri.Scheme = "rtsp";
List<string> options = new List<string>();
options.Add(":rtsp-http");
options.Add(":rtsp-http-port=80");
options.Add(":rtsp-user=Alberto");
options.Add(":rtsp-pwd=AMarino1");
if (recordParams.Length != 0)
{
foreach (string param in recordParams)
{
options.Add(param);
}
}
((VlcControl)videoSin).SourceProvider.CreatePlayer(new DirectoryInfo(@"C:\Sinica\VLC"));
//((VlcControl)videoSin).SourceProvider.CreatePlayer(new DirectoryInfo(@"D:\BURNTECH AUTOMATION\Projects\Sinica\Apex Scanners\Sinica Production Office\Sinica\VLC"));
((VlcControl)videoSin).SourceProvider.MediaPlayer.SetMedia(uri.Uri, options.ToArray());
((VlcControl)videoSin).SourceProvider.MediaPlayer.Play();
//xcdCnkt_Cam_Fail.IsBusy = false;
txttmr.Text = "Camera Connected!!";
CnktFail = true;
decodingTimer = new System.Threading.Timer(DoDecoding, null, 500, 100);
}
Можете ли вы посмотреть или предоставить альтернативный метод.
Спасибо