Here is my code, it is a custom code using “MultiChannelMetadataProvider” sample as base, and I am trying to code two or maybe more bounding box provider to Xprotect
private MetadataProviderChannel _boundingBoxProviderChannel_1;
private MetadataProviderChannel _boundingBoxProviderChannel_2;
var hardwareDefinition = new HardwareDefinition(
PhysicalAddress.Parse("001122334466"),
"MetadataProvider")
{
Firmware = "v10",
MetadataDevices =
{
MetadataDeviceDefintion.CreateBoundingBoxDevice(),
MetadataDeviceDefintion.CreateBoundingBoxDevice()
}
};
_metadataProviderService = new MediaProviderService();
Console.WriteLine("=================================/ CREATE CHANNEL METADATA PROVIDERS /=================================");
// Create a provider to handle channel 1
Console.WriteLine("Create a provider to handle channel 1");
_boundingBoxProviderChannel_1 = _metadataProviderService.CreateMetadataProvider(1);
_boundingBoxProviderChannel_1.SessionOpening += MetadataProviderSessionOpening;
_boundingBoxProviderChannel_1.SessionClosed += MetadataProviderSessionClosed;
_boundingBoxProviderChannel_1.ParametersChanged += MetadataProviderParametersChanged;
//_boundingBoxProviderChannel.ParameterDictionary["ValidTime"] = "10"; // We can override the default, if it make sense
// Create a provider to handle channel 2
Console.WriteLine("Create a provider to handle channel 2");
_boundingBoxProviderChannel_2 = _metadataProviderService.CreateMetadataProvider(2);
_boundingBoxProviderChannel_2.SessionOpening += MetadataProviderSessionOpening;
_boundingBoxProviderChannel_2.SessionClosed += MetadataProviderSessionClosed;
_boundingBoxProviderChannel_2.ParametersChanged += MetadataProviderParametersChanged;
//_boundingBoxProviderChannel.ParameterDictionary["ValidTime"] = "10"; // We can override the default, if it make sense
Console.WriteLine("=================================/ CREATE CHANNEL METADATA PROVIDERS /=================================");
_metadataProviderService.Init(52123, "password", hardwareDefinition);
void SendData(object obj)
{
var token = (CancellationToken)obj;
while (token.IsCancellationRequested == false)
{
SendBoundingBoxData1();
SendBoundingBoxData2();
Thread.Sleep(_timeBetweenMetadata);
}
}
private void SendBoundingBoxData1()
{
Console.WriteLine("Sending Data to channel 1");
const string objectId = "1";
var utcNow = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffff'Z'");
string str_metadata = "<?xml version=\"1.0\" encoding=\"utf-8\"?><tt:MetadataStream xmlns:tt=\"http://www.onvif.org/ver10/schema\"><tt:VideoAnalytics><tt:Frame UtcTime=\"" + utcNow + "\"><tt:Object ObjectId=\"" + objectId + "\"><tt:Appearance><tt:Shape><tt:BoundingBox bottom=\"0.2500001\" top=\"0.7500001\" right=\"0.7500001\" left=\"0.2500001\" /><tt:CenterOfGravity x=\"0\" y=\"0\" /></tt:Shape></tt:Appearance></tt:Object></tt:Frame></tt:VideoAnalytics></tt:MetadataStream>";
var result_1 = _boundingBoxProviderChannel_1.QueueMetadata(str_metadata, DateTime.UtcNow);
if (result_1 == false)
Trace.WriteLine(string.Format("{0}: Failed to write to bounding box channel", DateTime.UtcNow));
else
{
str_metadata = MetadataUpdate(objectId);
BeginInvoke(new MethodInvoker(() =>
{
if (sourceComboBox.SelectedIndex == 0)
{
DisplayMetadata(str_metadata);
}
}));
}
}