Qt基于FFmpeg解码本地视频生成RGB数据

一、获取RGB像素数据的步骤:

Qt基于FFmpeg解码本地视频生成RGB数据_第1张图片

二、实现效果:

将获取RGB像素数据每25帧保存一张图片到本地

三、核心代码:

    int count = 0;
    while(av_read_frame(formatContent,pkt) == 0)//成功读到了数据,一帧一帧读
    {
        /*AVPacket->AVStream,要判断读到的每一帧的码流数据是不是视频流*/
        if(pkt->stream_index == videoType)
        {
                     
            int got_picture_ptr = -1;
            AVFrame *picture = av_frame_alloc();//保存原始RGB数据
            //读到一帧是视频流就进行解码的动作,解码得到RGB保存在AVFrame结构体里
            avcodec_decode_video2(codec,picture,&got_picture_ptr,pkt);
            if(got_picture_ptr != 0)
            {
                //把解码得到的损坏的像素数据剔除(存到pictureRGB中)
                sws_scale(swsContent,picture->data,picture->linesize,0,picture->height,
                          pictureRGB->data,pictureRGB->linesize);
                count++;
                if(count % 25 == 0)//每25帧保存一张图
                {
                    uchar* transData = (unsigned char*)pictureRGB->data[0];//格式装换
                    QImage desImage = QImage(transData,codec->width,codec->height,
                                             QImage::Format_RGB32,nullptr,nullptr); 
                    //图片保存在当前目录下的pictures中
                    desImage.save(QString("./pictures/rgbPicture%1.png").arg(count-25),"PNG", 100);

                }
            }
        }
        //每次都存在同一块内存空间里,要清空上一次的操作
        av_packet_unref(pkt);//不是free
    }

演示用的视频下载链接:

ffmpeg(h264、yuv、rgb)演示视频-C/C++文档类资源-CSDN下载

源码下载链接:

Qt基于FFmpeg解码本地视频生成YUV及RGB源码-C/C++文档类资源-CSDN下载

原创不易,转载请标明出处:

Qt基于FFmpeg解码本地视频生成RGB数据_hml111666的博客-CSDN博客

你可能感兴趣的:(Qt实战,流媒体,qt,ffmpeg,rgb)