营石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;
}
新建一个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) 收藏 举报
浙公网安备 33010602011771号