我使用odm dll设置onvif相机时间,但是当我调用SetSystemDateandTime时,它给了我" 400来自服务器的错误请求"错误,我认为这个错误是由于时区错误的posix转换而产生的。
这是我的代码:
我传递的是setdatetimetype = ntp,daylisghtsaving = false,posix格式的时区,datetime = null。
public void SetOnvifCameraTime(string setdatetimeType, bool daylightSaving, System.TimeZoneInfo timeZoneInfo, System.DateTime systemDateTime)
{
var rule = GetSystemTimeZoneRule(System.DateTime.Now, timeZoneInfo);
var std_offset = -timeZoneInfo.BaseUtcOffset.TotalSeconds.ToInt32();
PosixTz.Dst dst = null;
if( rule!= null)
{
// setting dst if available
var start = PosixTzExtensions.GetPosixRuleFromTransitionTime(rule.DaylightTransitionStart);
var end = PosixTzExtensions.GetPosixRuleFromTransitionTime(rule.DaylightTransitionEnd);
var dst_offset = std_offset - rule.DaylightDelta.TotalSeconds.ToInt32();
dst = new PosixTz.Dst("DaylisghtTime", dst_offset, start, end);
}
var posixTz = new PosixTz(PosixTzWriter.NormalizeName(timeZoneInfo.StandardName), std_offset, dst);
onvif.services.TimeZone timezone = new onvif.services.TimeZone();
timezone.tz = posixTz.Format(); // time zone in posix format
SetDateTimeType setdatetimeenumtype = SetDateTimeType.ntp;;
var setTime = session.SetSystemDateAndTime(setdatetimeenumtype, daylightSaving, timezone, null).RunSynchronously();
}
所以,我检查了Onvif设备管理器并试图设置相机时间,但它给了我错误"无效时区"。
我还检查了wireshark中的数据包并找出了同样的问题"无效的时区格式"。
所以我现在很困惑,这个错误是由于我的代码还是odm dll?
如果有任何API或类可用于将时区转换为posix格式字符串?
修改
我发现我以posix格式发送了正确的时区,但相机制造商没有正确实现它,这就是为什么它给了我"无效的时区"我的代码以及Onvif设备管理器中的错误。
相机信息:
制作: - 索尼
型号: - SNC-CH110
有谁知道,制造商如何在设备中实施时间设置?
或者任何想法我怎样才能在相机中实现时间设置?