资源简介
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-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
文件 4 2005-12-07 12:41 C#H264格式视频解码\CH264Decode\common\.svn\prop-ba
............此处省略487个文件信息
相关资源
- winform c# mschart demo 范例
- C#调用SAP RFC 案例demo
- 12306抢票工具--抢票C# Demo
- WinForm C#Demo 会员与消费系统 进销存系
- Protogen编译protobuf demotools.rar
- C# RedisDemo Redisdll 全部DLL
- c#微信支付、微信企业支付到个人,微
- Asp.net Core 生成 PDF demo
- C#微信企业付款到银行卡demo真实可用
- WinFormSvgApplyDemo
- C# 数据库连接MySQL、SQL server并读取数
- Asp.Net版微信公众号开发源码Demo_90.r
- Asp.NetCoreDemo.rar
- C#接讯飞实现语音听写功能demowindows
- WPF经典DEMO.rar
- 佳能相机c#控制照相demo
- MSchart使用
- PureMVC for Unity3d Demo
- C# PayPal国际支付接口实现源码DEMO-20
- winform Ftp 上传小DEMO
- winform access数据库及其增删查改导出报
- C#车牌识别抓拍DEMO
- C# .NET Web API 完整 Demo
- C#百度地图DEMO-亲测可用
- ASP.NET微信支付接口调用Demo JSAPI
- FOCAS_API_DEMO_VS2015_C#_FORM_V1.0.rar
- 宏电DTU的DDP协议GPRS DSC中心源代码DE
- 微信现金红包asp.net c#源码支付接口
- easyui框架demo
- 支付宝线下支付C# WINFORM及官网DEMO
评论
共有 条评论