qt/LedOK/wProgramManager/wEditProgram/wElement/emovie.cpp

775 lines
29 KiB
C++
Raw Normal View History

2022-01-04 18:11:48 +08:00
#include "emovie.h"
#include "emovieattr.h"
#include <QLabel>
#include <QSettings>
#include <QThread>
//#include "qffwidget.h"
extern "C"{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
}
eMovie::eMovie(QRectF rectInit,const QString &file,QWidget *pp,InteractiveType type, QGraphicsItem *parent) :
eObject(rectInit,type, parent)
{
m_iType=eObject::Movie;
qDebug()<<"eMovie::eMovie";
QFileInfo fi(file);
m_attr.strRawName = fi.fileName();
m_attr.strRawPath = fi.absolutePath();
// qDebug()<<"ConvertVideoFormat";
if(!file.isNull()) {
QString strConvertFile=ConvertVideoFormatByFFmpeg(file);
QFileInfo outfi(strConvertFile);
m_attr.name = outfi.fileName();
m_attr.path = outfi.absolutePath();
}
setPlayArg(Qt::IgnoreAspectRatio, 10, 1);
qDebug()<<"GetVideoTimeRawSpan";
m_attr.playDuration=GetVideoTimeRawSpan(file);
qreal w = rectInit.width();
qreal h = w*m_display_aspect_ratio;
if(w>rectInit.width())
w=rectInit.width();
if(h>rectInit.height())
h=rectInit.height();
setGeometry(QRectF(0, 0, w, h));
m_parentWidget=pp;
init(true);
qDebug()<<"eMovie::eMovie end";
//InitFfmpegSdl();
}
eMovie::eMovie(const QJsonObject &json, const QString &pRoot, InteractiveType type, QGraphicsItem *parent) :
eObject(json["geometry"].toObject(), type, parent)
{
m_iType=eObject::Movie;
QJsonDocument jRoot(json);
m_attr.name = jRoot["widget"]["file"].toString();
m_attr.path = jRoot["widget"]["path"].toString();
QString file0 = pRoot + MACRO_FENGEFU + m_attr.name ;
QString file1 = m_attr.path + MACRO_FENGEFU + m_attr.name ;
QFile f0(file0);
QFile f1(file1);
QString file;
if(f0.exists()) {
file = file0;
} else if(f1.exists()) {
file = file1;
} else {
setGeometry(RECTF_INVALID);
return;
}
QFileInfo fi(file);
setPlayArg(jRoot["play"]["aspectRatioMode"].toInt(),
jRoot["play"]["playDuration"].toInt(),
jRoot["play"]["playTimes"].toInt());
if(m_attr.playDuration<10);
m_attr.playDuration=GetVideoTimeRawSpan(file);
m_attr.strRawName=jRoot["widget"]["fileRaw"].toString();
m_attr.strRawPath=jRoot["widget"]["pathRaw"].toString();
init(false);
//InitFfmpegSdl();
}
eMovie::~eMovie()
{
if(m_vPlayer!=nullptr)
{
m_vPlayer->stop();
delete m_vPlayer ;
}
if(m_vPlayList!=nullptr)
{
delete m_vPlayList ;
}
if(m_vWidget!=nullptr)
delete m_vWidget ;
// if(mPlayer!=nullptr)
// delete mPlayer;
// if(openGLWidget!=nullptr)
// delete openGLWidget;
}
void eMovie::init(bool bPlay)
{
QString file = m_attr.path + MACRO_FENGEFU + m_attr.name;
file.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
QFile fFile(file);
if(fFile.exists())
{
//alahover 20111111 -s
// av_register_all(); /**初始化FFMPEG 调用了这个才能正常使用编码器和解码器**/
// avformat_network_init(); /**支持打开网络文件**/
// /**SDL初始化**/
// if (SDL_Init(SDL_INIT_AUDIO))
// {
// fprintf(stderr,"Could not initialize SDL - %s. \n", SDL_GetError());
// exit(1);
// }
// mPlayer = new VideoPlayer;
// openGLWidget = new glyuvwidget(nullptr);
// openGLWidget->setGeometry(0,0,200,200);
// connect(mPlayer,SIGNAL(sigYuv_liuyi(uchar*,uint,uint)),this,SLOT(slotShowYuv_liuyi(uchar*,uint,uint)));
// mPlayer->stop(true); //如果在播放则先停止
// //这里需要再等待一段时间,目的是为了让解析视频的线程执行完成能够退出
// QEventLoop eventloop;
// QTimer::singleShot(100, &eventloop, SLOT(quit()));
// eventloop.exec();
// mPlayer->setFileName(file);//
// mPlayer->play();
// return;
//alahover 20111111 -o
m_vPlayer = new QMediaPlayer(this);
m_vPlayList = new QMediaPlaylist(this);
m_vWidget = new QGraphicsVideoItem(this);
m_vWidget->setFlag(QGraphicsItem::ItemStacksBehindParent);
//m_vWidget->setFlag(QGraphicsItem::ItemIgnoresParentOpacity);
//QGraphicsItem::stackBefore()
m_vWidget->setAspectRatioMode(static_cast<Qt::AspectRatioMode>(m_attr.aspectRatioMode));
m_vPlayList->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
m_vPlayer->setMuted(false);
m_vPlayer->setPlaylist(m_vPlayList);
m_vPlayer->setVideoOutput(m_vWidget);
connect(this, SIGNAL(rectChanged(const QRectF &)), this, SLOT(onAdjustMovieRect()));
onAdjustMovieRect();
if(!bPlay)
{
playElectment();
stopElectment();
}
}
}
//void eMovie::slotShowYuv_liuyi(uchar *ptr, uint width, uint height)
//{
// openGLWidget->slotShowYuv(ptr,width,height);
//}
void eMovie::setElement(const QJsonObject &json, Data &attr)
{
attr.name = json["widget"]["file"].toString();
attr.path = json["widget"]["path"].toString();
attr.strRawName = json["widget"]["fileRaw"].toString();
attr.strRawPath = json["widget"]["pathRaw"].toString();
attr.aspectRatioMode = json["play"]["aspectRatioMode"].toInt();
attr.playDuration = json["play"]["playDuration"].toInt();
attr.playTimes = json["play"]["playTimes"].toInt();
}
QWidget* eMovie::wAttr()
{
QWidget *wObj = eObject::wAttr();
QWidget *w = wAttrElement();
static_cast<QBoxLayout*>(w->layout())->insertWidget(0, wObj);
return w;
}
QWidget* eMovie::wAttrElement()
{
eMovieAttr *w = new eMovieAttr(m_attr);
connect(w, SIGNAL(sResChanged(const QString &,const QString &)), this, SLOT(onResChanged(const QString &,const QString &)));
connect(w, SIGNAL(sAttrChanged(const eMovie::Data &)), this, SLOT(onAttrChanged(const eMovie::Data &)));
return w;
}
QJsonObject eMovie::save(const QString &pRoot)
{
QString file0 = m_attr.path + PAGEDEL_SUFFIX + MACRO_FENGEFU + m_attr.name;
QString file1 = m_attr.path + MACRO_FENGEFU + m_attr.name;
QFile f0(file0);
QFile f1(file1);
QString old_file;
QString new_file = pRoot + MACRO_FENGEFU + m_attr.name;
if(f0.exists()) {
old_file = file0;
} else if(f1.exists()) {
old_file = file1;
} else {
return QJsonObject();
}
QFile old_f(old_file);
QFile new_f(new_file);
if(!new_f.exists())
old_f.copy(new_file);
m_attr.path = pRoot;
return elementJson();
}
QStringList eMovie::filesList() const
{
QStringList list;
list.append(m_attr.path + MACRO_FENGEFU + m_attr.name);
return list;
}
QJsonObject eMovie::elementJson() const
{
QJsonObject oRoot;
QJsonObject oWidget;
QJsonObject oPlay;
// Interior
oRoot["elementType"] = "Movie";
oRoot["elementTypeId"] = type();
oRoot["geometry"] = eObject::elementJson();
// Widget
oWidget["file"] = m_attr.name;
QString strtempPath=m_attr.path;
strtempPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
oWidget["path"] = strtempPath;
oWidget["fileRaw"] = m_attr.strRawName;
QString strtempRawPath=m_attr.strRawPath;
strtempRawPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
oWidget["pathRaw"] = strtempRawPath;
oRoot["widget"] = oWidget;
// Play
oPlay["aspectRatioMode"] = m_attr.aspectRatioMode;
oPlay["playDuration"] = m_attr.playDuration;
oPlay["playTimes"] = m_attr.playTimes;
oRoot["play"] = oPlay;
return oRoot;
}
void eMovie::playElectment()
{
QString file = m_attr.path + MACRO_FENGEFU + m_attr.name;
file.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
QFile fFile(file);
if(fFile.exists())
{
m_vPlayList->clear();
m_vPlayList->addMedia(QUrl(file));
m_vPlayList->setCurrentIndex(0);
m_vPlayer->stop();
m_vPlayer->play();
}
}
void eMovie::stopElectment()
{
if(m_vPlayer!=nullptr)
{
if(m_vPlayer->isAvailable())
{
m_vPlayer->pause();
// m_vPlayer->stop();
//m_vPlayList->clear();
}
}
}
void eMovie::onResChanged(const QString &file,const QString &RawFile)
{
QFileInfo fi(file);
m_attr.name = fi.fileName();
m_attr.path = fi.absolutePath();
QFileInfo fiRaw(RawFile);
m_attr.strRawName = fiRaw.fileName();
m_attr.strRawPath = fiRaw.absolutePath();
stopElectment();
playElectment();
}
void eMovie::onAttrChanged(const eMovie::Data &data)
{
m_attr.playDuration=data.playDuration;
m_attr.playTimes=data.playTimes;
m_attr.aspectRatioMode=data.aspectRatioMode;
setPlayArg(data.aspectRatioMode, data.playDuration, data.playTimes);
m_vWidget->setAspectRatioMode(static_cast<Qt::AspectRatioMode>(m_attr.aspectRatioMode));
}
void eMovie::onAdjustMovieRect()
{
if(m_vWidget!=nullptr)
m_vWidget->setSize(QSizeF(rect().width(), rect().height()));
// if(m_vffmpegWidget!=nullptr)
// m_vffmpegWidget->setGeometry(rect());
}
void eMovie::setPlayArg(int armode, int pd, int pt)
{
m_attr.aspectRatioMode = armode;
m_attr.playDuration = pd;
m_attr.playTimes = pt;
}
void eMovie::Delay(int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
void eMovie::InitFfmpegSdl()
{
// m_vffmpegWidget = new QGraphicsProxyWidget(this);
// m_vffmpegWidget->setFlag(QGraphicsItem::ItemStacksBehindParent);
// QFfWidget *label = new QFfWidget();
// label->show();
// m_vffmpegWidget->setWidget(label);
// m_vffmpegWidget->setMinimumSize(0, 0);
// connect(this, SIGNAL(rectChanged(const QRectF &)), this, SLOT(onAdjustMovieRect()));
// onAdjustMovieRect();
}
double eMovie::GetVideoTimeRawSpan(QString strFilePathName)
{
AVFormatContext *pFormatCtx;
std::string str = strFilePathName.toStdString();
const char* filepath = str.c_str();
//char filepath[] = "G:\\taxiAd.mp4";
//初始化编解码库
av_register_all();//创建AVFormatContext对象与码流相关的结构。
pFormatCtx = avformat_alloc_context();
//初始化pFormatCtx结构
if (avformat_open_input(&pFormatCtx, filepath, nullptr, nullptr) != 0){
printf("Couldn't open input stream.\n");
return -1;
}
//获取音视频流数据信息
if (avformat_find_stream_info(pFormatCtx, nullptr) < 0){
printf("Couldn't find stream information.\n");
return -1;
}
//nb_streams视音频流的个数这里当查找到视频流时就中断了。
unsigned int iVideoStreamIndex=0;
for (unsigned int i = 0; i < pFormatCtx->nb_streams; i++)
{
if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO){
iVideoStreamIndex=i;
}
}
AVStream *videoStream = pFormatCtx->streams[iVideoStreamIndex];
double totalSeconds = videoStream->duration * av_q2d(videoStream->time_base);
printf("totalSeconds = %lf\n", totalSeconds);
qreal iw= pFormatCtx->streams[iVideoStreamIndex]->codecpar->width ;
qreal ih=pFormatCtx->streams[iVideoStreamIndex]->codecpar->height ;
qDebug()<<""<<QString::number(iw);
qDebug()<<""<<QString::number(ih);
if(iw!=0)
m_display_aspect_ratio=ih/iw;
avformat_close_input(&pFormatCtx);
return totalSeconds;
}
QString eMovie::ConvertVideoFormatByFFmpeg(QString strFile)
{
QFileInfo tmpFile(strFile);
//QString strOutFileOnlyTitle=tmpFile.fileName().left(tmpFile.fileName().length()-tmpFile.suffix().length()-1);
QString file_full=strFile.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
QString strFileMD5=getFileMd5(file_full);
QString strOutFileOnlyTitle=strFileMD5;
QString strOutFilePathName=m_globalstrSavePath+MACRO_FENGEFU+strOutFileOnlyTitle+".mp4";
strOutFilePathName.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
int iReTryCount=0;
QDir dRoot;
QDir drr(m_globalstrSavePath);
if(!drr.exists())
{
while(!dRoot.mkdir(m_globalstrSavePath))
{
QThread::sleep(1);
iReTryCount++;
if(drr.exists())
break;
if(iReTryCount>10)
break;
}
}
QFileInfo tempFileInfo(strOutFilePathName);
if(tempFileInfo.exists())
{
return strOutFilePathName;
}
else {
LoAppConfig *cfg = LoAppConfig::getInstance();
if(strFile.right(4)==".mp4")
{
QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName());
if(settings->value("videoconvert").isValid())
{
if(settings->value("videoconvert").toBool())
{
process = new QProcess(nullptr);
QStringList args;//=getArguments(strFile,"f://abc.mp4");
args<<"-y";
args<<"-i"<<file_full;
args<<"-vcodec"<<"h264";
QString strtempstrOutFilePathName=strOutFilePathName;
args<<strtempstrOutFilePathName;
m_pProgressConvertVideo = new LoEmptyDialog();
QString strAppPath=QApplication::applicationDirPath();
strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
process->setWorkingDirectory(strAppPath);
connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(outputCommand()));
connect(process,SIGNAL(readyReadStandardError()),this,SLOT(outputCommand()));
process->start("ffmpeg",args);
// m_pConverProgressTimer = new QTimer(this);
// connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
// m_strOutFilePathName=strOutFilePathName;
// m_pConverProgressTimer->start(1000);
//connect(m_pGetAskTimer,SIGNAL(timeout()),m_pProgressConvertVideo,SLOT(TimerOutUnlock()));
connect(this, SIGNAL(sigSetTipTextContent ( QString )), m_pProgressConvertVideo, SLOT( SetTipTextContent(QString)));
m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
// m_pGetAskTimer->start(3000);
m_pProgressConvertVideo->exec();
return strOutFilePathName;
}
else {
QFile::copy(strFile, strOutFilePathName);
return strOutFilePathName;
}
}
else {
QFile::copy(strFile, strOutFilePathName);
return strOutFilePathName;
}
}
else {
process = new QProcess(nullptr);
QStringList args;//=getArguments(strFile,"f://abc.mp4");
args<<"-y";
args<<"-i"<<file_full;
args<<"-vcodec"<<"h264";
QString strtempstrOutFilePathName=strOutFilePathName;
args<<strtempstrOutFilePathName;
m_pProgressConvertVideo = new LoEmptyDialog();
QString strAppPath=QApplication::applicationDirPath();
strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
process->setWorkingDirectory(strAppPath);
connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(outputCommand()));
connect(process,SIGNAL(readyReadStandardError()),this,SLOT(outputCommand()));
process->start("ffmpeg",args);
// m_pConverProgressTimer = new QTimer(this);
// connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
// m_strOutFilePathName=strOutFilePathName;
// m_pConverProgressTimer->start(1000);
//connect(m_pGetAskTimer,SIGNAL(timeout()),m_pProgressConvertVideo,SLOT(TimerOutUnlock()));
connect(this, SIGNAL(sigSetTipTextContent ( QString )), m_pProgressConvertVideo, SLOT( SetTipTextContent(QString)));
m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
// m_pGetAskTimer->start(3000);
m_pProgressConvertVideo->exec();
return strOutFilePathName;
}
// QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName());
// if(settings->value("videoconvert").isValid())
// {
// if(settings->value("videoconvert").toBool())
// {
// process = new QProcess(nullptr);
// QStringList args;//=getArguments(strFile,"f://abc.mp4");
// args<<"-y";
// args<<"-i"<<file_full;
// args<<"-vcodec"<<"h264";
// QString strtempstrOutFilePathName=strOutFilePathName;
// args<<strtempstrOutFilePathName;
// m_pProgressConvertVideo = new LoEmptyDialog();
// QString strAppPath=QApplication::applicationDirPath();
// strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
// process->setWorkingDirectory(strAppPath);
// connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
// connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(outputCommand()));
// connect(process,SIGNAL(readyReadStandardError()),this,SLOT(outputCommand()));
// process->start("ffmpeg",args);
//// m_pConverProgressTimer = new QTimer(this);
//// connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
//// m_strOutFilePathName=strOutFilePathName;
//// m_pConverProgressTimer->start(1000);
// //connect(m_pGetAskTimer,SIGNAL(timeout()),m_pProgressConvertVideo,SLOT(TimerOutUnlock()));
// m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
// // m_pGetAskTimer->start(3000);
// m_pProgressConvertVideo->exec();
// return strOutFilePathName;
// }
// else {
// QFile::copy(strFile, strOutFilePathName);
// return strOutFilePathName;
// }
// }
// else {
// QFile::copy(strFile, strOutFilePathName);
// return strOutFilePathName;
// }
}
}
QString eMovie::ConvertVideoFormat(QString strFile)
{
QFileInfo tmpFile(strFile);
//QString strOutFileOnlyTitle=tmpFile.fileName().left(tmpFile.fileName().length()-tmpFile.suffix().length()-1);
QString file_full=strFile.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
QString strFileMD5=getFileMd5(file_full);
QString strOutFileOnlyTitle=strFileMD5;
QString strOutFilePathName=m_globalstrSavePath+MACRO_FENGEFU+strOutFileOnlyTitle+".mp4";
strOutFilePathName.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
int iReTryCount=0;
QDir dRoot;
while(!dRoot.mkdir(m_globalstrSavePath))
{
QThread::sleep(1);
iReTryCount++;
if(iReTryCount>10)
break;
}
QFileInfo tempFileInfo(strOutFilePathName);
if(tempFileInfo.exists())
{
return strOutFilePathName;
}
else {
LoAppConfig *cfg = LoAppConfig::getInstance();
QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName());
if(settings->value("videoconvert").isValid())
{
if(settings->value("videoconvert").toBool())
{
QString strVideoRect="";
QString strEncodeExePath="";
QString strAppPath=QApplication::applicationDirPath();
strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
strEncodeExePath="\""+strAppPath+"/ffmpeg.exe\" ";
QString strSoundEncode="";
strSoundEncode=" -acodec mp3 -ar 44100";
QString strVideoEncode="";
QString strEncodeRate="";
QString strFrameRate="";
QString strCommandLine="";
QString strStart="";
QString strEnd="";
strVideoEncode=" -vcodec mpeg4";
//264
// strEncodeRate.Format(" -b %d",m_intEncodeRate);
// strVideoEncode=_T(" -vcodec h264");
// strFrameRate.Format(" -r %d",m_intFrameRate);
//strCommandLine=strEncodeExePath+"-y -i \""+file_full+"\""+strVideoEncode+" \""+strOutFilePathName+"\"";
//strCommandLine="-y -i \""+file_full+"\""+strVideoEncode+" \""+strOutFilePathName+"\"";
strCommandLine="-y -i "+file_full+strVideoEncode+" "+strOutFilePathName;
QString strCommandLastString=strCommandLine;
qDebug()<<strCommandLastString;
QStringList args;//=getArguments(strFile,"f://abc.mp4");
args<<strCommandLine;
// QProcess p(nullptr);
// p.setWorkingDirectory(strAppPath);
// QString command = filebat;
// p.start(command);
process = new QProcess(nullptr);
process->setWorkingDirectory(strAppPath);
connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
process->start(strEncodeExePath,args);
m_pProgressConvertVideo = new LoEmptyDialog();
m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
m_pProgressConvertVideo->exec();
// QString filebat=strAppPath+"/convertvideo.bat";
// filebat.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
// QFile file(filebat);
// file.setFileName(filebat);
// file.open(QIODevice::WriteOnly); //文件以只写方式打开
// QString str = strCommandLine; //将文本编辑框中的内容送给str
// file.write(str.toUtf8());
// file.close();
// QProcess p(nullptr);
// p.setWorkingDirectory(strAppPath);
// QString command = filebat;
// p.start(command);
// m_pConverProgressTimer = new QTimer(this);
// connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
// m_pConverProgressTimer->start(1000);
// connect(&p,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
// if(p.waitForFinished()){ //等待脚本运行完成超时时间默认是3000s,超时返回0正常返回1
// //strInfo = "完成!";
// }else{
// // strInfo = "bat运行错误";
// }
return strOutFilePathName;
}
else {
QFile::copy(strFile, strOutFilePathName);
return strOutFilePathName;
}
}
else {
QFile::copy(strFile, strOutFilePathName);
return strOutFilePathName;
}
}
}
void eMovie::onConverProgress()
{
if(!m_strOutFilePathName.isEmpty())
{
QFile ff(m_strOutFilePathName);
if(ff.exists())
{
m_pProgressConvertVideo->unlock();
m_pConverProgressTimer->stop();
delete m_pConverProgressTimer;
}
}
// int i=0;
// if(iEncodeType==1)
// {
// i=GetConvertFileIsOK(m_strCurConvertOkFilePathName);
// }
// else
// i=GetConvertDirFilesNumber(PATH_CONVERT_OUTPUT_PATH,"success");
// static int iNotJinduValue=0;
// QString striNotJinduValue=QString::number(iNotJinduValue);
// if(iNotJinduValue<100)
// m_pProgressConvertVideo->SetTipTextContent(striNotJinduValue);
// {
// QString strTempFileName=m_strOutputPath+"."+"mp4";
// DWORD dwAttr = GetFileAttributes(strTempFileName);
// if(dwAttr == 0xFFFFFFFF) //文件夹不存在
// {
// }
// else
// {
// m_outFileSizeValue=MyGetFileSize(strTempFileName);
// QString strtemp=FormatByteCount1(m_outFileSizeValue);
// strtemp="["+strtemp+"]";
// m_pProgressConvertVideo->SetTipTextContent(strtemp+MESSAGE_CONVERTING_VIDEO);
// }
// }
// iNotJinduValue++;
// if(iNotJinduValue==99)
// {
// iNotJinduValue=0;
// m_iVideoPi++;
// QString strtemp=FormatByteCount1(m_outFileSizeValue);
// strtemp="["+strtemp+"]";
// m_pProgressConvertVideo->SetTipTextContent(strtemp+MESSAGE_CONVERTING_VIDEO);
// }
// m_pProgressConvertVideo->unlock();
}
void eMovie::continueConvert(int i,QProcess::ExitStatus)
{
Q_UNUSED(i);
m_pProgressConvertVideo->unlock();
}
void eMovie::outputCommand(){
QByteArray cmdoutput = process->readAllStandardOutput();
char *t=cmdoutput.data();
QString txtoutput=QString::fromLocal8Bit(t);
// qDebug()<<"\r\nStandardOut:"<<txtoutput;
cmdoutput = process->readAllStandardError();
t=cmdoutput.data();
txtoutput=QString::fromLocal8Bit(t);
// qDebug()<<"\r\nerror:"<<txtoutput;
if(txtoutput.contains("Duration: "))
{
QString strDuration=txtoutput.mid(txtoutput.indexOf("Duration: ")+10,11)+"0";
qDebug()<<"Duration="<<strDuration;
QTime aa=QTime::fromString(strDuration,TIME_STRING_FORMAT);
QTime bb(0,0,0);
m_videoTimeLong=bb.secsTo(aa);
}
if(txtoutput.contains("time="))
{
QString strTime=txtoutput.mid(txtoutput.indexOf("time=")+5,11)+"0";
qDebug()<<"time="<<strTime;
QTime aa=QTime::fromString(strTime,TIME_STRING_FORMAT);
QTime bb(0,0,0);
int iJinDuTime=bb.secsTo(aa);
if(m_videoTimeLong>0)
{
int iJindu=iJinDuTime*100/m_videoTimeLong;
qDebug()<<"进度="<<iJindu;
QString strJindu=QString::number(iJindu)+"%";
emit sigSetTipTextContent(tr("Converting format")+strJindu);
}
}
}
void eMovie::outputError()
{
// QByteArray cmdoutput = process->readAllStandardError();//readAllStandardOutput();
// char *t=cmdoutput.data();
// QString txtoutput=QString::fromLocal8Bit(t);
// qDebug()<<"error:"<<txtoutput;
QByteArray cmdoutput = process->readAllStandardError();
char *t=cmdoutput.data();
QString txtoutput=QString::fromLocal8Bit(t);
qDebug()<<"\r\nerror:"<<txtoutput;
}
void eMovie:: deleteContent()
{
if(m_vPlayer!=nullptr)
{
if(m_vPlayer->isAvailable())
{
//m_vPlayer->pause();
m_vPlayer->stop();
m_vPlayList->clear();
}
}
QFile file(m_attr.path+"/"+m_attr.name);
if(file.exists())
file.remove();
}