none
Video del DVR en PictureBox

    Pregunta

  • Saludos a todos:

    Tengo un DVR y estoy modificando su SDK, he conseguido loguearme con éxito pero no puedo mostrar el video en el picturebox, el codigo que loguea y deberia mostrar el video es este:

    LONG lUserID;
    NET_DVR_DEVICEINFO_V30 struDeviceInfo;
    lUserID = NET_DVR_Login_V30("190.241.43.37", 8000, "admin", "1234", &struDeviceInfo);
    if (lUserID < 0)
    {
            GetDlgItem(IDC_INFO1)->SetWindowText("Error en lUserID");
            NET_DVR_Cleanup();
    	return;
    }
    
    NET_DVR_SetExceptionCallBack_V30(0, NULL, g_ExceptionCallBack, NULL);
    LONG lRealPlayHandle;
    HWND hWnd = GetConsoleWindow();
    NET_DVR_CLIENTINFO ClientInfo = { 0 };
    ClientInfo.hPlayWnd = hWnd;// GetDlgItem(IDC_PBX_CAM)->GetSafeHwnd;//IDC_PBX_CAM
    ClientInfo.lChannel = 1;
    ClientInfo.lLinkMode = 0;
    ClientInfo.sMultiCastIP = NULL;
    BOOL bPreviewBlock = false;
    lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, NULL, NULL, 0);
    if (lRealPlayHandle < 0)
    {
    	GetDlgItem(IDC_INFO1)->SetWindowText("Error en lRealPlayHandle");
    	NET_DVR_Cleanup();
    	return;
    }
    else
    {
    	GetDlgItem(IDC_INFO1)->SetWindowText("video ok");
    }

    Incluso luego de loguear obtengo los parámetros internos del DVR con éxito, y hasta obtengo el mensaje "video ok" pero no veo el video en el PictureBox.

    El ID del PictureBox es IDC_PBCAM y creé una variable asociada llamada m_video, pero nada.

    Estoy usando Visual C++ 2013 con MFC en windows 7.

    Alguna idea?

    miércoles, 25 de abril de 2018 12:12

Todas las respuestas

  • He modificado la linea HWND hWnd = GetConsoleWindow();

    por:

    HWND hWnd = (HWND)(*GetDlgItem(IDC_PBCAM));

    pero nada. Alguna sugerencia?

    miércoles, 25 de abril de 2018 13:42
  • No sé por qué comentaste la línea original

    ClientInfo.hPlayWnd = GetDlgItem(IDC_PBCAM)->GetSafeHwnd;
    
    // o
    ClientInfo.hPlayWnd = GetDlgItem(IDC_PBCAM)->m_hHwnd;
    
    
    // o
    ClientInfo.hPlayWnd = ::GetDlgItem(m_hWnd, IDC_PBCAM);
    
    

    El método devuelve un puntero a CWnd (su subclase CStatic, supongo). La función del sdk, devuelve el handle de la ventana del control.

    IsWindow(ClientInfo.hPlayWnd)
    puede decirte si es un handle válido.

    miércoles, 25 de abril de 2018 14:59
  • El ejemplo original decía:

    ...
    HWND hWnd = GetConsoleWindow();
    ...
    ClientInfo.hPlayWnd = hWnd;/

    Si lo cambio por:

    ClientInfo.hPlayWnd = GetDlgItem(IDC_PBCAM)->GetSafeHwnd();

    o por:

    ClientInfo.hPlayWnd = ::GetDlgItem(m_hWnd, IDC_PBCAM);

    compila bien pero no me aparace el streaming del video en el PictureBox.

    IsWindow(ClientInfo.hPlayWnd) me devuelve TRUE. 


    miércoles, 25 de abril de 2018 15:22
  • Es raro que pueda mostrar video en la ventana usada por la consola. Imagino que estás usando algún tipo de proyecto basado en diálogos. Quizá puedas hacer el attach de una consola y ver que pasa...

    ¿Y si lo pones a NULL? Quizá lo saque sobre su propio popup.

    Te das cuenta que estoy adivinando. Yo no conozco nada acerca del sdk que mencionas.

    miércoles, 25 de abril de 2018 16:51
  • Probé con:

    ClientInfo.hPlayWnd = NULL;

    pero nada. Si, es el SDK de un DVR, gracias por tu apoyo amigo.

    miércoles, 25 de abril de 2018 19:10
  • ¿Usas MFC por que te lo piden la empresa, universidad, algún curso o por media curiosidad?

    Saludos.


    http://electronica-pic.blogspot.com

    jueves, 26 de abril de 2018 8:17
  • Es del trabajo. El SDK viene así usando MFC, yo estoy tomando el sdk que viene en el CD del DVR y lo estoy modificando a mi necesidad pero el video no aparece. He intentado lo siguiente que tomé de otro código pero no aparece ninguna ventana con el video:

    typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
    PROCGETCONSOLEWINDOW GetConsoleWindow;
    
    HMODULE  hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32, "GetConsoleWindow");
    HWND hWnd = GetConsoleWindow();     //Get window handle
    ...
    struPlayInfo.hPlayWnd = hWnd;
    ...
    lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);

    viernes, 27 de abril de 2018 20:04