资源简介
Qt + ffmpeg写的Windows屏幕录制程序(包含源程序和编译好的可执行程序)
程序使用方法: ScreenCapture w h w和h分别表示希望录制的帧宽度和高度
代码片段和文件信息
#define __STDC_CONSTANT_MACROS
extern “C“
{
#include
#include
#include
#include
#include
#include
#include
}
#define INBUF_SIZE 4096
#define AUDIO_INBUF_SIZE 20480
#define AUDIO_REFILL_THRESH 4096
#include “capthread.h“
#include
#include
void CapThread::capframe()
{
QImage image = QPixmap::grabWindow(QApplication::desktop()->winId()).toImage();
image = image.scaled(QSize(resize_width resize_height));
av_init_packet(pkt);
pkt->data = NULL; // packet data will be allocated by the encoder
pkt->size = 0;
for (int h = 0; h < c->height; h++)
{
for (int w = 0; w < c->width; w++)
{
QRgb rgb = image.pixel(w h);
int r = qRed(rgb);
int g = qGreen(rgb);
int b = qBlue(rgb);
int dy = ((66*r + 129*g + 25*b) >> 8) + 16;
int du = ((-38*r + -74*g + 112*b) >> 8) + 128;
int dv = ((112*r + -94*g + -18*b) >> 8) + 128;
uchar yy = (uchar)dy;
uchar uu = (uchar)du;
uchar vv = (uchar)dv;
frame->data[0][h * frame->linesize[0] + w] = yy;
if(h % 2 == 0 && w % 2 == 0)
{
frame->data[1][h/2 * (frame->linesize[1]) + w/2] = uu;
frame->data[2][h/2 * (frame->linesize[2]) + w/2] = vv;
}
}
}
frame->pts = i;
/* encode the image */
ret = avcodec_encode_video2(c pkt frame &got_output);
if (ret < 0)
{
printf(“Error encoding frame\n“);
exit(1);
}
if (got_output)
{
printf(“Write frame %3d (size=%5d)\n“ i pkt->size);
fwrite(pkt->data 1 pkt->size f);
fflush(f);
av_free_packet(pkt);
}
i ++;
}
CapThread::CapThread(int width int height Qobject *parent) : QThread(parent)
{
resize_width = width;
resize_height = height;
avcodec_register_all();
c= NULL;
pkt = new AVPacket;
i = 0;
codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO);
if (codec == 0)
{
printf(“find encoder failed\n“);
exit(1);
}
/*
const AVRational* sup = codec->supported_framerates;
int k = 0;
while(true)
{
AVRational rat = sup[k];
if(rat.num == 0 && rat.den == 0)
break;
printf(“%d %d\n“ rat.num rat.den);
k++;
}*/
c = avcodec_alloc_context3(codec);
if (!c)
{
printf(“alloc context failed\n“);
exit(1);
}
//c->bit_rate = 400000;
c->width = width;
c->height = height;
c->time_base = (AVRational){1 25};
c->gop_size = 20;
c->max_b_frames = 1;
c->pix_fmt = AV_PIX_FMT_YUV420P;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-05-30 21:47 ScreenCapture\
文件 3997 2014-05-30 21:45 ScreenCapture\capthread.cpp
文件 704 2014-05-30 21:40 ScreenCapture\capthread.h
文件 4161 2014-05-30 21:38 ScreenCapture\main.cpp
目录 0 2014-05-30 21:47 ScreenCapture\release\
文件 19348992 2014-05-28 10:07 ScreenCapture\release\avcodec-55.dll
文件 1340928 2014-05-28 10:07 ScreenCapture\release\avdevice-55.dll
文件 2036224 2014-05-28 10:07 ScreenCapture\release\avfilter-4.dll
文件 5651456 2014-05-28 10:07 ScreenCapture\release\avformat-55.dll
文件 420864 2014-05-28 10:07 ScreenCapture\release\avutil-52.dll
文件 118784 2011-12-02 09:30 ScreenCapture\release\libgcc_s_dw2-1.dll
文件 979982 2011-12-02 09:30 ScreenCapture\release\libstdc++-6.dll
文件 47972 2011-08-24 06:59 ScreenCapture\release\mingwm10.dll
文件 121344 2014-05-28 10:07 ScreenCapture\release\postproc-52.dll
文件 2847232 2013-03-28 21:21 ScreenCapture\release\QtCore4.dll
文件 10137600 2013-03-28 21:20 ScreenCapture\release\QtGui4.dll
文件 63488 2014-05-30 21:45 ScreenCapture\release\ScreenCapture.exe
文件 278016 2014-05-28 10:07 ScreenCapture\release\swresample-0.dll
文件 434176 2014-05-28 10:07 ScreenCapture\release\swscale-2.dll
文件 746 2014-05-30 13:38 ScreenCapture\ScreenCapture.pro
文件 28043 2014-05-30 21:43 ScreenCapture\ScreenCapture.pro.user
- 上一篇:移动笔试专业知识
- 下一篇:windows游戏编程大师技巧.part08.rar
相关资源
- Windows下使用FFMPEG解码AAC文件并使用
- ffmpeg转换MP4为JPG帧图片
- ffmpeg解码sdl播放h264
- 最简单的利用ffmpeg获取视频的图片
- 最简单的基于FFmpeg的编码器 1.2
- vs2012调试ffmpeg.c
- 基于FFMPEG SDK流媒体开发1---解码媒体文
- ffmpeg 源码demo
- QT旅游攻略软件程序源代码
- 最简单的基于FFMPEG的AVDevice的 1.2
- 最简单的基于FFMPEG的音频编码器 1.1
- 最简单的基于FFMPEG+SDL的视频播放器
- ffmpeg提取mp4关键帧保存为jpg.zip
- mp4_play.zip
- ffmpeg+qt的简单播放器
- 使用ffmpeg将多张图片生成H264裸流并获
- ffmpeg h264 转换jpg
- 利用FFmpeg将Jpeg图片转为任意视频容器
- ffmpeg exeWINXP的最后一个可运行版本
- 最简单的基于FFMPEG的视频编码器修正
- ffmpeg-vs2013
- 基于FFMPEG_SDL2_音视频播放_参考音频时
- ffmpeg-3.2-win32-shared.zip
- MyPeppa_Release_V1.0.rar
- ffmpeg录音
- ffmpeg资料全
- ffmpeg_windows屏幕录制并编码成H264
- windows32位系统的ffmpeg
- 利用ffmpeg提取任意格式视频帧关键帧
- ffmpeg3.0源码
评论
共有 条评论