From 7b52f1bb6855c07773be3a11ceb9b7440c0a072b Mon Sep 17 00:00:00 2001 From: feiyangqingyun Date: Mon, 7 Sep 2020 14:03:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0ffmpegdemo=E8=A7=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ffmpegdemo/ffmpeg/ffmpeg.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/ffmpegdemo/ffmpeg/ffmpeg.cpp b/ffmpegdemo/ffmpeg/ffmpeg.cpp index f87275e..a6c9974 100644 --- a/ffmpegdemo/ffmpeg/ffmpeg.cpp +++ b/ffmpegdemo/ffmpeg/ffmpeg.cpp @@ -231,8 +231,6 @@ bool FFmpegThread::init() void FFmpegThread::run() { - //计时 - QTime time; while (!stopped) { //根据标志位执行初始化操作 if (isPlay) { @@ -241,16 +239,26 @@ void FFmpegThread::run() continue; } - time.restart(); if (av_read_frame(avFormatContext, avPacket) >= 0) { //判断当前包是视频还是音频 - int packetSize = avPacket->size; int index = avPacket->stream_index; if (index == videoStreamIndex) { - //解码视频流 + //解码视频流 avcodec_decode_video2 方法已被废弃 +#if 0 avcodec_decode_video2(videoCodec, avFrame2, &frameFinish, avPacket); +#else + frameFinish = avcodec_send_packet(videoCodec, avPacket); + if (frameFinish < 0) { + continue; + } - if (frameFinish) { + frameFinish = avcodec_receive_frame(videoCodec, avFrame2); + if (frameFinish < 0) { + continue; + } +#endif + + if (frameFinish >= 0) { //将数据转成一张图片 sws_scale(swsContext, (const uint8_t *const *)avFrame2->data, avFrame2->linesize, 0, videoHeight, avFrame3->data, avFrame3->linesize); @@ -354,11 +362,11 @@ void FFmpegThread::stop() } //实时视频显示窗体类 -FFmpegWidget::FFmpegWidget(QWidget * parent) : QWidget(parent) +FFmpegWidget::FFmpegWidget(QWidget *parent) : QWidget(parent) { thread = new FFmpegThread(this); connect(thread, SIGNAL(receiveImage(QImage)), this, SLOT(updateImage(QImage))); - image = QImage(); + image = QImage(); } FFmpegWidget::~FFmpegWidget()