2016-01-30 2 views
0

Я использую сторонние библиотеки lib и .so с Qt4.8 и QtCreator для разработки автономного настольного программного обеспечения для удаленного управления системой видеонаблюдения. И когда я использую эту функцию:Не удалось загрузить плеер SDK

NET_DVR_RealPlay_V30(m_rpcurrentdevicedata->getUsrID(),clientinfo,RealDataCallBack,NULL,1); 

она возвращает -1, что означает, что не удалось, и он выводит информацию об ошибке: «Не удалось загрузить проигрыватель SDK». Это странно, , потому что этот SDK уже загружен. (Я также использую этот SDK для входа в систему, иначе я даже не могу перейти к этому шагу) И я проверю эти параметры, они все действительны. Другие части моей программы кажутся хорошими.

Когда я запускаю пример программы, которую производитель предоставляет, такой ошибки нет.

У меня нет никакой информации об этой ошибке. Любой может дать любой намек? Большое спасибо.

+0

У меня нет конкретных знаний о SDK, который вы используете (я подозреваю, что «SDK» в сообщении об ошибке относится к SDK DVR, а не к Qt SDK, кстати), но мое подозрение в том, что ваша программа пытаясь загрузить некоторый файл общей библиотеки во время выполнения и не обнаруживая его (например, потому, что он не ищет нужную папку или что-то в этом роде). Возможно, вы можете организовать работу strace (или аналогичного) при воспроизведении ошибки, и это покажет вам неудачную попытку открыть файл, и это скажет вам, что происходит не так. –

+0

@JeremyFriesner Я проверил файлы .so раньше, файл .pro включал все из них, и они на самом деле находятся в одной папке ... – Henry

+0

Это хорошо, но что, если игра ожидается в каком-либо другом месте и не находит ее ? (Обратите внимание, что .so файлы обычно загружаются ОС при запуске программы, поэтому, если проблема была отсутствующим .so-файлом, вы, вероятно, вообще не сможете запустить программу. Тот факт, что программа работает достаточно долго, чтобы напечатать сообщение об ошибке предполагает, что проблема не связана с компилятором .so-файлом) –

ответ

1

Я думаю, что нашел решение вашей проблемы. У меня была та же проблема, но я использовал оболочку HCNetSDK C#, и такая же ошибка произошла со мной. Это C# код, который я использовал для вызова функции NET_DVR_RealPlay_V30:

private void TakeVideoForLiveStreaming() 
    { 
     try 
     { 
      NET_DVR_CLIENTINFO clientinfo = new NET_DVR_CLIENTINFO(); 
      clientinfo.hPlayWnd = liveViewPicture.Handle; 
      clientinfo.lChannel = ChanelNumber; 
      clientinfo.lLinkMode = 0; 
      clientinfo.sMultiCastIP = null; 
      HikVisionSDKCSharpWrapper.RealDataCallBack_V30 RealData = new HikVisionSDKCSharpWrapper.RealDataCallBack_V30(RealDataCallback); 
      IntPtr pUser = new IntPtr(); 
      RealHandle = HCNetSDK.NET_DVR_RealPlay_V30(UserId, ref clientinfo, RealData, pUser, true); 
      if (RealHandle == -1) 
      { 
       MessageBox.Show(string.Format("Play failed, error code: {0}", HCNetSDK.NET_DVR_GetLastError())); 
       return; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

    public void RealDataCallback(int lRealHandle, uint dwDataType, byte[] pBuffer, uint dwBufSize, IntPtr pUser) 
    { 
     try 
     { 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

О вызове этой функции у меня была ошибка 64 («Не удалось загрузить плеер SDK»). То, что я сделал, и это, казалось, работал для меня является то, что я скачал VSPlayer для Windows, V7.2.0 по этой ссылке:

http://www.hikvision.com/europe/tools_82.html#prettyPhoto

После установки этого приложения, я скопировал все библиотеки DLL, которые были экспортированы в ' C: \ Program Files (x86) \ VSPlayer 'после установки и вставлять их в том же месте, где моя HCNetSDK.dll находилась внутри моего приложения. Когда я снова запускаю приложение, ошибка исчезает, и я получаю видео в реальном времени внутри своего окна.

Смежные вопросы