Добрый день.
Работаю над программой для распознавания номеров с потокового видео(IP камер). Камеры используются фирмы Hikvision, соответственно для получения видео с камеры используется SDK(думаю, для решения вопроса версия не важна).
Есть метод int NET_DVR_RealPlay_V40(int iUserID, ref NET_DVR_PREVIEWINFO lpPreviewInfo, REALDATACALLBACK fRealDataCallBack_V30, IntPtr pUser)
где iUserID - ИД залогиненого на камере пользователя, NET_DVR_PREVIEWINFO - структура с параметрами, REALDATACALLBACK fRealDataCallBack_V30 - не используется, IntPtr pUser - не понятно что нужно туда передавать. У меня передается IntPtr.Zero
Сама структура
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct NET_DVR_PREVIEWINFO
{
public Int32 lChannel; // Номер канала
public uint dwStreamType; // тип потока , 0-основной поток, 1 - суб поток, 2 - суб поток , 3 - суб поток.
public uint dwLinkMode; // 0: TCP, 1: UDP, 2: MULTICAST, 3 - RTP, 4-RTP/RTSP, 5 - RSTP/HTTP
public IntPtr hPlayWnd; //"HCNetSDK.dll" хендл окна воспроизведения, NULL означает, что изображение не воспроизводится
public bool bBlocked; // 0-неблокирующий доступ, 1-блокирующий доступ. Если блокируется отказ внутреннего подключения SDK, будет возвращен 5 секунд для возврата, что не подходит для опроса.
public bool bPassbackRecord; //"HCNetSDK.dll" 0 - не включать воспроизведение видео, 1 - включить воспроизведение видео
public byte byPreviewMode; // Режим предварительного просмотра, 0-нормальный просмотр, 1 предварительный просмотр с задержкой
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = STREAM_ID_LEN, ArraySubType = UnmanagedType.I1)]
public byte[] byStreamID; // Этот идентификатор включен, когда lChannel равен 0xffffffff
public byte byProtoType; // протокол прикладного уровня, 0 - частный протокол, протокол 1-RTSP
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 222, ArraySubType = UnmanagedType.I1)]
public byte[] byRes;
}
Медленно подходим к сути вопроса.
В коде, старт воспроизведения выглядит так(это вырезка из метода) :
CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
lpPreviewInfo.hPlayWnd = Handle; //Handle - хендл PictureBox с формы, передаваемый в метод через аргумент
lpPreviewInfo.dwStreamType = 1;
pPreviewInfo.dwLinkMode = 0;
lpPreviewInfo.bBlocked = true;
//Start live view
m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null/*RealData*/, IntPtr.Zero);
После выполнения метода в PictureBox'е на форме начинает транслироваться видео. Да да, это все еще предыстория :) c отображением видео у меня все в порядке.
С этого видео транслируемого на форму мне нужно распознать ГРН ТС(номер машины). Для распознавания используется библиотека от компании OOO "MegaPixel"(MPixel) она платная, но не суть. Ознакомился с описанием, разобрался что да как там. Проинициализировал SDK, задал параметры канала, задал параметры распознавания и т.д. Далее нужно использовать метод поиска зон с гос номерами Int32 CFCHRun(int Channel, IntPtr imgbuf, Int32 flag);
В этот метод 2ым параметром нужно передать указатель на контрол в котором идет отображение видео. При указании хендла моего PictureBox этот метод ничего не находит в нем. Cвойство image у моего PictureBox пустое.
Bitmap savedBit = new Bitmap(RealPlayWnds.Width, RealPlayWnds.Height);
RealPlayWnds.DrawToBitmap(savedBit, RealPlayWnds.ClientRectangle);
savedBit.Save(@"D:\123.bmp");
Так тоже ничего не сохраняет, точнее сохраняет, но картинка чисто черная. Вот и встает вопрос как мне получить картинку из моего PictureBox и отдать далее на обработку? Я так понял, SDK от камеры использует Native API и каким-то образом рисует потом уже картинку на своих оверлеях.
Так же посмотрите сюда
Есть сущность товараОдин товар может иметь много названий (на разных языках)
Кто нибудь видел подобные слайдеры, или плагины, киньте ссылку пжлст
Добрый деньБьюсь, не могу отобразить время в нужном формате: Нужно так - 2018-01-05T21:02:46
Я понял, что iframe "изолирован от document"Допустим на Youtube есть все возможные API