|
- #include "VideoProcess.h"
-
- VideoProcess::VideoProcess(QObject* parent)
- : IProcess(parent)
- //, m_pFfmpegDecodeOld(nullptr)
- , m_pFfmpegDecodeNew(nullptr)
- , m_bIsPlay(false)
- {
- /*
- m_pFfmpegDecodeOld = new FfmpegDecodeOld();
- //将获取的数据传入到FFmpeg模块中
- m_pFfmpegDecodeOld->start();
- */
- }
- VideoProcess::~VideoProcess()
- {
- if (m_pConstBuffer) {
- delete m_pConstBuffer;
- m_pConstBuffer = nullptr;
- }
- m_file.write(m_fileArray);
- m_file.flush();
- m_file.close();
- }
-
- void VideoProcess::getFfmpegDecode()
- {
- m_pConstBuffer = new ConstBuffer(VideoBufferLength, false, false, m_pFrame->m_uiFrameLen);
- m_pFfmpegDecodeNew = m_pUIntParam.second->getVideoWidget()->getFfmpegDecode();
- }
-
- void VideoProcess::run()
- {
- /*Ffmpeg探测网络流格式(勿删)
- unsigned char* m_pOriginBuffer = new unsigned char[m_pFrame->m_uiValidFrameLen];
- unsigned short usRecvSize = 0;
- m_bNeedWork = true;
- while (m_bNeedWork) {
- usRecvSize =m_pConstBuffer->read(m_pOriginBuffer, m_pFrame->m_uiValidFrameLen);
- if (usRecvSize <= 0) {
- continue;
- }
- //剔除视频中的无效数据
- //向FFmpeg中写入数据,每次写入VideoPacketLength个字节
- QByteArray videoArray;
- m_pFfmpegDecodeOld->getConstBuffer()->write((unsigned
- char*)videoArray.data(),VideoPacketLength);
- }*/
- unsigned char* m_ReadBuffer = new unsigned char[m_pFrame->m_uiFrameLen];
- unsigned short usReadLen;
- m_bNeedWork = true;
- while (m_bNeedWork) {
- if (m_bIsPlay == false) {
- continue;
- }
- usReadLen = m_pConstBuffer->read(m_ReadBuffer, m_pFrame->m_uiFrameLen);
- if (usReadLen <= 0) {
- QThread::usleep(1);
- continue;
- }
- // 提取通道数据
- m_tempArray = QByteArray((char*)m_ReadBuffer, m_pFrame->m_uiFrameLen);
- // 从数据通道中提取数据
- // 提取一个数据,添加一个时间
- for (auto channel : m_pParam->m_pChannelGroup->m_vecChannel) {
- m_validArray.append(m_tempArray.at(channel->m_uiAbsolutePos));
- }
- m_tempArray.clear();
- // 剔除无效数据
- if (m_usFillSize != 0) {
- rejectFillData();
- } else {
- m_ableArray.append(m_validArray);
- m_validArray.clear();
- }
- // 将数据写入文件中
- m_fileArray.append(m_ableArray);
- if (DataAchiveBuffer <= m_fileArray.size()) {
- m_file.write(m_fileArray);
- m_file.flush();
- m_fileArray.clear();
- }
- // 将数据放到播放器中
- validDataDeal();
- }
- }
-
- void VideoProcess::rejectFillData()
- {
- m_uiDataSize = m_validArray.size();
- m_uiIndex = 0;
- while (m_uiIndex + m_usFillSize <= m_uiDataSize) {
- if (m_validArray.at(m_uiIndex) != m_fillArray.at(0)) {
- m_ableArray.append(m_validArray.at(m_uiIndex));
- ++m_uiIndex;
- } else if (m_validArray.at(m_uiIndex) == m_fillArray.at(0)) {
- if (m_validArray.mid(m_uiIndex, m_usFillSize) != m_fillArray) {
- m_ableArray.append(m_validArray.at(m_uiIndex));
- ++m_uiIndex;
- } else {
- m_uiIndex += m_usFillSize;
- }
- }
- }
- m_validArray.remove(0, m_uiIndex);
- m_uiDataSize = 0;
- m_uiIndex = 0;
- }
- void VideoProcess::validDataDeal()
- {
- /*
- if (m_bIsPlay == true) {
- //将数据放到播放器中
- m_uiDataSize = m_ableArray.size();
- m_uiIndex = 0;
- QByteArray tempValid;
- while (m_uiIndex + VideoPacketLength <= m_uiDataSize) {
- tempValid = m_ableArray.mid(m_uiIndex, VideoPacketLength);
- m_pFfmpegDecodeNew->getConstBuffer()->write((unsigned char*)tempValid.data(),
- VideoPacketLength); m_uiIndex += VideoPacketLength;
- }
- m_ableArray.remove(0,m_uiIndex);
- m_uiDataSize = 0;
- m_uiIndex = 0;
- }
- else if(m_bIsPlay == false){
- m_ableArray.clear();
- m_uiDataSize = 0;
- m_uiIndex = 0;
- }*/
-
- if (m_bIsPlay == true) {
- // 将数据放到播放器中
- m_pFfmpegDecodeNew->getConstBuffer()->write((unsigned char*)m_ableArray.data(),
- (unsigned short)m_ableArray.size());
- m_ableArray.clear();
- } else if (m_bIsPlay == false) {
- m_ableArray.clear();
- }
- }
-
- void VideoProcess::startPlayer(bool status)
- {
- m_bIsPlay = status;
- if (m_bIsPlay == true) {
- m_pFfmpegDecodeNew->start();
- } else if (m_bIsPlay == false) {
- m_pFfmpegDecodeNew->stop();
- }
- }
|