二、实现效果:本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓
将获取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
}
如果你对音视频开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区与我讨论!
本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)