资源简介
采用ffmpeg把任意MPEG4文件解码后,打入DVD码流,写入VOB文件,支持DVD播放。提供源码和测试程序。ffmpeg可以自行下载。
代码片段和文件信息
#include
#include
#include
#include
extern “C“
{
#include “libavformat/avformat.h“
#include “libavdevice/avdevice.h“
#include “libavcodec/avcodec.h“
}
#pragma comment(lib “avcodec.lib“)
#pragma comment(lib “avformat.lib“)
#pragma comment(lib “avutil.lib“)
#pragma comment(lib “swscale.lib“)
#pragma comment(lib “avdevice.lib“)
#pragma comment(lib “avfilter.lib“)
#undef exit
/****************************************************************************************************************************************/
#define STREAM_DURATION 5.0
#define STREAM_frame_RATE 3.0
#define STREAM_NB_frameS ((int)(STREAM_DURATION*STREAM_frame_RATE))
#define STREAM_PIX_FMT PIX_FMT_YUV420P //????对于YUV420的结构
AVframe *picture*tmp_picture; //AVframe为结构体,具体的定义在line 846 of file avcodec.h
uint8_t *video_outbuf; //关于uint8_t的解释 网址:http://blog.163.com/luokun_9/blog/static/20818832200761033146831/
int frame_countvideo_outbuf_size;
main(int argcchar **argv)
{
int a;
const char *input_file_name=“d:/aaa.m4v“;
av_register_all(); //初始化的作用 注册库中所有可用的文件格式和编码器 Definition at line 597 of file avformat.h
AVFormatContext *ic; //为结构体,在其中定义了编解码所需要的变量 Definition at line 401 of file avformat.h
/**
* Allocate an AVFormatContext.
* Can be freed with av_free() but do not forget to free everything you
* explicitly allocated as well!
*/
ic=av_alloc_format_context(); // Allocate an AVFormatContext. Definition at line 646 of file avformat.h
if(av_open_input_file(&icinput_file_nameNULL0NULL)!=0) //open input file Definition at line 637 of file avformat.h
{
printf(“can not open the file %s\n“input_file_name);
exit(1);
}//检验是否成功的打开文件
if(av_find_stream_info(ic)<0) //Read packets of a media file to get stream information. Definition at line 660 of file avformat.h
{
printf(“can not find suitable codec parameters\n“);
exit(1);
}//检验视频文件中,是否有数据流,并检验是否能成功取出
dump_format(ic0input_file_name0); //列出输入文件的相关流信息 Definition at line 884 of file avformat.h 最后一位:判断是否是输出,若是输出则该位为1
/******************************************************************************************************************************************/
int i;
int videoindex=-1;
int audioindex=-1;
for(i=0;inb_streams;i++)
{
if(ic->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) //指针数组stream[i]的类型是结构体AVStream 表示音频和视频的数据流 Definition at line 295 of file avformat.h
//codec的数据类型是结构体AVCodecContext 表示关于编解码的标准位 Definition at line 800 of file avcodec.h
{
videoindex=i;
printf(“video\n“);
}
else if(ic->streams[i]->codec->codec_type==CODEC_TYPE_AUDIO)
{
audioindex=i;
printf(“audio\n“);
}
}
/*******************************************************************************************
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14929 2009-11-23 09:46 testsrc\23.cpp
文件 3353 2009-11-23 09:46 testsrc\23.dsp
文件 529 2009-11-23 09:47 testsrc\23.dsw
文件 33792 2009-11-23 09:47 testsrc\23.ncb
文件 48640 2009-11-23 09:47 testsrc\23.opt
文件 726 2009-11-23 09:46 testsrc\23.plg
文件 163961 2009-11-23 09:46 testsrc\Debug\23.exe
文件 207968 2009-11-23 09:46 testsrc\Debug\23.ilk
文件 23297 2009-11-23 09:46 testsrc\Debug\23.obj
文件 235796 2009-11-23 09:46 testsrc\Debug\23.pch
文件 369664 2009-11-23 09:46 testsrc\Debug\23.pdb
文件 50176 2009-11-23 09:46 testsrc\Debug\vc60.idb
文件 69632 2009-11-23 09:46 testsrc\Debug\vc60.pdb
文件 163961 2009-11-23 09:46 bin-test\23.exe
文件 7276032 2008-04-12 22:21 bin-test\avcodec.dll
文件 10752 2008-04-12 22:21 bin-test\avdevice.dll
文件 14336 2008-04-12 22:21 bin-test\avfilter.dll
文件 666624 2008-04-12 22:21 bin-test\avformat.dll
文件 57344 2008-04-12 22:21 bin-test\avutil.dll
文件 89273 2008-02-16 17:18 bin-test\pthreadGC2.dll
文件 1760356 2008-02-16 17:03 bin-test\SDL.dll
文件 158208 2008-04-12 22:21 bin-test\swscale.dll
文件 742220 2008-03-02 20:40 bin-test\xvidcore.dll
目录 0 2009-11-23 09:52 testsrc\Debug
目录 0 2009-11-23 09:52 testsrc
目录 0 2009-11-23 09:54 bin-test
----------- --------- ---------- ----- ----
12161569 26
- 上一篇:二代身份证读卡器API接口
- 下一篇:微信小程序完整Demo--支持人工智能对话查询
评论
共有 条评论