From 4d6acb7c24e997f0139fc95cad3b38b0c539081d Mon Sep 17 00:00:00 2001 From: feiyangqingyun Date: Wed, 21 Jun 2023 14:32:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- video/playffmpeg/ffmpeg/ffmpeg.cpp | 16 +++++++++++++--- video/playffmpeg/widget.cpp | 6 +++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/video/playffmpeg/ffmpeg/ffmpeg.cpp b/video/playffmpeg/ffmpeg/ffmpeg.cpp index c455b87..d417440 100644 --- a/video/playffmpeg/ffmpeg/ffmpeg.cpp +++ b/video/playffmpeg/ffmpeg/ffmpeg.cpp @@ -231,6 +231,7 @@ bool FFmpegThread::init() void FFmpegThread::run() { + qint64 startTime = av_gettime(); while (!stopped) { //根据标志位执行初始化操作 if (isPlay) { @@ -270,16 +271,25 @@ void FFmpegThread::run() emit receiveImage(image); } - msleep(1); + usleep(1); } +#if 1 + //延时(不然文件会立即全部播放完) + AVRational timeBase = {1, AV_TIME_BASE}; + int64_t ptsTime = av_rescale_q(avPacket->dts, avFormatContext->streams[videoStreamIndex]->time_base, timeBase); + int64_t nowTime = av_gettime() - startTime; + if (ptsTime > nowTime) { + av_usleep(ptsTime - nowTime); + } +#endif } else if (index == audioStreamIndex) { - //解码音频流,这里暂不处理,以后交给sdl播放 + //解码音频流,自行处理 } } av_packet_unref(avPacket); av_freep(avPacket); - msleep(1); + usleep(1); } //线程结束后释放资源 diff --git a/video/playffmpeg/widget.cpp b/video/playffmpeg/widget.cpp index bc99ab9..c293500 100644 --- a/video/playffmpeg/widget.cpp +++ b/video/playffmpeg/widget.cpp @@ -6,10 +6,10 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); + //本示例支持的是rtsp视频流(其他的一概不支持/没有做音视频同步) QStringList urls; - urls << "f:/1.mp4"; - urls << "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov"; - urls << "http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4"; + urls << "http://vfx.mtime.cn/Video/2021/11/16/mp4/211116131456748178.mp4"; + urls << "http://vd3.bdstatic.com/mda-jennyc5ci1ugrxzi/mda-jennyc5ci1ugrxzi.mp4"; urls << "rtsp://admin:Admin123456@192.168.0.15:554/media/video1"; ui->cboxUrl->addItems(urls); ui->cboxUrl->setCurrentIndex(0);