资源简介

基于arm9的远程视频监控系统,使用Qt编写客户端和服务器端,客户端可实现视频保存功能。服务器端运行于移植有linux内核的MINI2440上,客户端运行于PC上,服务器端将采集到的视频数据发送到客户端,客户端实现对视频的显示和保存等功能。

资源截图

代码片段和文件信息

#include “ffmpegthread.h“
#include 
#include 
#include 
#include 
#include 
#include 
#include 
extern bool stopSave;
extern bool ifNew;
extern unsigned char r[320*240];
extern unsigned char g[320*240];
extern unsigned char b[320*240];


ffmpegthread::ffmpegthread(Qobject *parent) :
    QThread(parent)
{
//    sws_flags = SWS_BICUBIC;
    fillTimes = 0;
    time(&t);
    local_time = localtime(&t);
    datetime = new QDateTime;
}


/*使用默任格式的编解码器来增加一个视频流并初始化编解码器*/
AVStream * ffmpegthread::add_video_stream(AVFormatContext *oc CodecID codec_id)
{
    AVCodecContext *c;
    AVStream    *st;

    /*增加一个新的流到一个媒体文件*/
    st = av_new_stream(oc0);

    /*初始化编解码器*/
    c = st->codec;
    c->codec_id = codec_id;
    c->codec_type = AVMEDIA_TYPE_VIDEO;

    /*put sample parameters*/
    c->bit_rate = 400000;   //400kbit/s
    c->width = 320;
    c->height = 240;
    /*设置针率 该针率為25其实timebase = 1/framerate*/
    c->time_base = (AVRational){15};
    /*设置GOP大小 表示每10针会插入一个I针*/
    c->gop_size = 10;
    /*设置像素格式*/
    c->pix_fmt = PIX_FMT_YUV420P;
    if(c->codec_id == CODEC_ID_MPEG2VIDEO)
    {
        /*该值表示在两个非B针之间所允许插入的B针的最大针数*/
        c->max_b_frames = 2;
    }
    if(c->codec_id == CODEC_ID_MPEG1VIDEO)
    {
        c->mb_decision = 2;
    }
    /*some formats want stream headers to be seperate*/
    if(oc->oformat->flags & AVFMT_GLOBALHEADER)
        c->flags |= CODEC_FLAG_GLOBAL_HEADER;
    return st;
}


/*分配原始图像*/
AVframe *ffmpegthread::alloc_picture(enum PixelFormat pix_fmt int width int height)
{
    AVframe *picture;
    uint8_t *picture_buf;
    int size = 0;

    /*分配一个AVframe并设置默任值*/
    picture = avcodec_alloc_frame();
    if(!picture)
        return NULL;
    //by lzc
    picture->format = pix_fmt;
    picture->width = width;
    picture->height = height;
    picture->linesize[0] = width;
    picture->linesize[1] = width/2;
    picture->linesize[2] = width/2;

    /*计算对于给定的图片格式以及宽和高所需占用多少内存*/
    size = avpicture_get_size(pix_fmtwidthheight);
    picture_buf = (uint8_t *)av_malloc(size);//分配所需内存
    if(!picture_buf)
    {
        av_free(picture);
        return NULL;
    }

     /*用 ptr 中的内容根据文件格式(YUV...)和分辨率填充 picture。这里由于是在初始
    化阶段所以填充的可能全是零*/
    avpicture_fill((AVPicture *)picturepicture_bufpix_fmtwidthheight);      //这里输入换存针
    return picture;
}


/*打开视频编解码器并分配必要的编码缓存 主要是对视频编码器(或解码器)的初始化过程*/
void ffmpegthread::open_video(AVFormatContext *oc AVStream *st)
{
    AVCodec *codec;
    AVCodecContext *c;

    c = st->codec;

    codec = avcodec_find_encoder(c->codec_id);//编码时找编码器
    if(!codec)
    {
        fprintf(stderr“codec not found\n“);
    }
    /*open the codec*/
    if(avcodec_open(ccodec) < 0)
    {
        fprintf(stderr“could not open codec\n“);
        exit(1);
    }

    video_outbuf = NULL;
    if(!(oc->oformat->flags & AVFMT_RAWPICTURE))
    {
        /*allocate output buffer*/
        video_outbuf_size = 200000;
        video_outbuf = (uint8_t *)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-06-11 09:54  myclient\
     文件       11140  2013-06-01 13:02  myclient\ffmpegthread.cpp
     文件        2091  2013-06-01 13:02  myclient\ffmpegthread.h
     文件         787  2013-06-07 18:17  myclient\login.cpp
     文件         398  2013-06-07 18:04  myclient\login.h
     文件        2811  2013-06-07 18:16  myclient\login.ui
     文件         715  2013-06-07 18:14  myclient\main.cpp
     文件        4427  2013-06-07 16:42  myclient\mainwindow.cpp
     文件         836  2013-06-01 13:02  myclient\mainwindow.h
     文件        5376  2013-06-07 16:38  myclient\mainwindow.ui
     文件         589  2013-06-07 17:01  myclient\myclient.pro
     文件       16608  2013-06-09 09:28  myclient\myclient.pro.user
     文件         402  2013-06-03 09:56  myclient\timethread.cpp
     文件         380  2013-06-01 10:19  myclient\timethread.h
     目录           0  2013-06-11 09:54  myqtvideo\
     文件         662  2013-05-16 20:45  myqtvideo\image.cpp
     文件         355  2013-05-16 16:30  myqtvideo\image.h
     文件         475  2013-06-07 18:19  myqtvideo\main.cpp
     文件        2550  2013-06-01 17:42  myqtvideo\mainwindow.cpp
     文件         804  2013-06-01 17:01  myqtvideo\mainwindow.h
     文件         956  2013-06-01 17:42  myqtvideo\mainwindow.ui
     文件       10058  2013-05-31 23:29  myqtvideo\Makefile
     文件         491  2013-05-16 17:33  myqtvideo\myqtvideo.pro
     文件       16611  2013-06-09 09:28  myqtvideo\myqtvideo.pro.user
     文件        6042  2013-05-16 17:19  myqtvideo\v4l2.cpp
     文件         866  2013-05-16 16:55  myqtvideo\v4l2.h
     文件       57744  2013-10-26 12:55  图片1.png
     文件      380185  2013-10-26 12:55  图片2.png
     文件     1018278  2013-10-26 12:55  图片3.png

评论

共有 条评论