• 大小: 10.86MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-24
  • 语言: C#
  • 标签: demo  

资源简介

C#H264格式视频解码, 使用FFMPEG解码为H264视频文件,解码后的数据保存为.YUV,可以使用VLC等播放器播放。

资源截图

代码片段和文件信息

/****************************
 *  Black Spoor 2018.02.08  *
 ****************************/

#include “CH264.h“

static void Init(struct CH264Class *int);
static void Dispose(struct CH264Class *);
static int InitDecode(struct CH264Class * stu);
static void SetFileName(struct CH264Class *char *int);
static void OpenFile(struct CH264Class *);
static void CloseFile(struct CH264Class *);

static void SetFileName(struct CH264Class * stuchar * fileint length)
{
memset(stu->filename0sizeof(stu->filename));
strcpy(stu->filenamefile);
}

static int GReadBuffer(void * opaque uint8_t * buf int buf_size)
{
if(opaque != NULL)
{
CH264Class * decode = (CH264Class *) opaque;
if(decode != NULL)
{
//从文件读数据
if(!feof(decode->fp))
{
int readlen = fread(buf1buf_sizedecode->fp);
return readlen;
}
}
}
return -1;


static void OpenFile(struct CH264Class * stu)
{
fopen_s(&stu->fpstu->filename“rb“);
}

static void CloseFile(struct CH264Class * stu)
{
fclose(stu->fp);
}

static int InitDecode(struct CH264Class * stu)
{
AVDictionary * options = NULL;

stu->decodeInited = -1;

stu->avio = avio_alloc_context(stu->aviobuffer40960stuGReadBufferNULLNULL);
stu->pFormatCtx->pb = stu->avio;
stu->ifmt = NULL;

if(avformat_open_input(&stu->pFormatCtxNULLstu->ifmt&options)!=0)
{
printf(“Couldn‘t open input stream.\n“);
return -1;
}

if(avformat_find_stream_info(stu->pFormatCtxNULL)<0)
{
printf(“Couldn‘t find stream information.\n“);
return -1;
}

stu->decodeInited = 0;


stu->videoindex=-1;
//遍历所有的流,并找到视频流
for(unsigned int i=0; i < stu->pFormatCtx->nb_streams; i++){ 
if(stu->pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
{
stu->videoindex=i;
break;
}
}

//如果没找到,报错返回
if(stu->videoindex==-1)
{
printf(“Didn‘t find a video stream.\n“);
stu->pVideoCodecCtx =NULL;
stu->pVideoCodec = NULL;
return -1;
}else{
//记住视频解码器
stu->pVideoCodecCtx=stu->pFormatCtx->streams[stu->videoindex]->codec;
stu->pVideoCodec=avcodec_find_decoder(stu->pVideoCodecCtx->codec_id);
avcodec_open2(stu->pVideoCodecCtx stu->pVideoCodecNULL);
}

stu->pVideoframe = av_frame_alloc();

return 0;
}

static void Init(struct CH264Class * stu int index)
{
//编码器
av_register_all();
avformat_network_init();
stu->pFormatCtx = avformat_alloc_context();
avdevice_register_all();
stu->aviobuffer = (unsigned char *)av_malloc(4096);
}

static void Dispose(struct CH264Class * stu)
{
if(stu->pVideoCodecCtx!=NULL)
{
avcodec_close(stu->pVideoCodecCtx);
}

avformat_close_input(&stu->pFormatCtx);

free(stu);
}

CH264Class * CH264ClassCreate(void)
{
CH264Class * stu = (CH264Class *)malloc(sizeof(CH264Class));
memset(stu0sizeof(CH264Class));

stu->Init = Init;
stu->Dispose = Dispose;

stu->InitDecode = InitDecode;
stu->SetFileName = SetFileName;

stu->Open

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3104  2018-02-08 11:42  C#H264格式视频解码\CH264Decode\CH264.cpp

     文件        985  2018-02-08 11:42  C#H264格式视频解码\CH264Decode\CH264.h

     文件       5345  2018-02-08 11:39  C#H264格式视频解码\CH264Decode\CH264Decode.vcxproj

     文件       1247  2018-02-08 11:04  C#H264格式视频解码\CH264Decode\CH264Decode.vcxproj.filters

     文件          0  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\empty-file

     文件       9170  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\entries

     文件          2  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\format

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\bs.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\cabac.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\cabac.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\clip1.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\common.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\common.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\cpu.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\cpu.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\csp.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\csp.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\dct.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\dct.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\display-x11.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\display.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\frame.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\frame.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\macroblock.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\macroblock.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\mc.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\mc.h.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\mdate.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\pixel.c.svn-base

     文件          4  2005-12-07 12:41  C#H264格式视频解码\CH264Decode\common\.svn\prop-base\pixel.h.svn-base

............此处省略487个文件信息

评论

共有 条评论