营石QTSDK多路播放修改

营石QTSDK多路播放修改
//QString m_sessionId;//注释或者删掉原来的单路m_sessionId

新建一个SessionIdVideo类,把QString sessionId声明到这个类中,也可以增加其他业务需要的字段;

QVector<SessionIdVideo> listSessionId;//新增播放路数列表

//m_sessionId = OpenNetStream::getInstance()->allocSessionEx(MainWindow::messageHandler, this);//注释或者删掉原来这一行


    //初始化播放路数列表
    for(int i =0; i < size; i++)//size来自具体的业务,播放的视频通道数量。
    {
        QString sessionId = OpenNetStream::getInstance()->allocSessionEx(MainWindow::messageHandler, this);

        SessionIdVideo sessionIdVideo = SessionIdVideo();
        sessionIdVideo.sessionId = sessionId;
        sessionIdVideo.index = i;
        sessionIdVideo.isClick = false;

        listSessionId.push_back(sessionIdVideo);

    }
    
    //startRealPlay感觉这个应该是解码步骤。
    //遍历listSessionId根据具体业务取出sessionId调用原来的单路解码代码就可以。
    OpenNetStream::getInstance()->startRealPlay(iter->sessionId, hWnd, devSerial, iChannelNo, safekey);
    //startRealPlay具体修改如下
int MainWindow::startRealPlay(MainWindow* mainwindow,MyWidget *myWidget,QString devSerial,int iChannelNo,int num)
{
    auto iter = std::find_if(listSessionId.begin(), listSessionId.end(), [&num](const SessionIdVideo &_ctIndex){
        if (_ctIndex.index == num  )
        {
            return true;
        }
        else{
            return false;
        }
    });

    if (iter != listSessionId.end())
    {
        iter->isClick = true;
        qDebug() << __LINE__ << __FUNCTION__ <<",this->thread()->currentThreadId()==" << this->thread()->currentThreadId();
        bool bEncrypt = false;

        mainwindow->m_devSerial = devSerial;
        mainwindow->m_Channel = iChannelNo;

        QString safekey;
        safekey.clear();
        if(bEncrypt)
        {
            bool ok;
            safekey = QInputDialog::getText(this, tr("Input"), tr("Please Input the verification code"), QLineEdit::Password, "", &ok);
            if (ok == false)
            {
                return -1;
            }
        }

        HWND hWnd = NULL;
        if (LocalSetting::getInstance()->isPlay())
        {
            hWnd = (HWND)myWidget->winId();
            qDebug() << __LINE__ << __FUNCTION__ << ",hWnd==" << hWnd;
        }
        int iRet = OpenNetStream::getInstance()->startRealPlay(iter->sessionId, hWnd, devSerial, iChannelNo, safekey);
        qDebug() << __LINE__ << __FUNCTION__ << ",iRet==" << iRet;
        if(0 != iRet)
        {
            mainwindow->showErrInfo(tr("RealPlay"));
            return -1;
        }
        mainwindow->m_bRealPlayStarted = true;
        mainwindow->m_bCloudPlayBack = false;
        mainwindow->m_bPlayBackStarted = false;
    }

    return 0;
}
    
    //渲染播放
    //遍历listSessionId,根据具体业务取出sessionId调用原来的单路渲染播放代码就可以。
    OpenNetStream::getInstance()->getOSDTime(sessionId, &osdTime);
    
    //虚构函数
MainWindow::~MainWindow()
{
    int size = listSessionId.size();
    if(size > 0)
    {
        for(SessionIdVideo sessionIdVideo : listSessionId)
        {
            OpenNetStream::getInstance()->freeSession(sessionIdVideo.sessionId);//释放
        }
    }
    listSessionId.clear();
    OpenNetStream::getInstance()->releaseLibrary();
    delete ui;
}
 
效果图如下:
 

 

 

 

posted on 2022-05-14 14:26  yebinghuai-qq-com  阅读(263)  评论(0)    收藏  举报

导航