MPEG2-TS流文件的简介
随着从HDTV录制的高清节目在网上的流传,烧友们现在对TS这个名词大概已经不陌生了,但随之而来就是如何播放、如何添加字幕等等的一系列问题,本文将重点介绍一下这方面的应用操作。 先来简要介绍一下什么是MPEG2-TS吧。MPEG2格式大家都通过对DVD的接触而多多少少了解了一些,DVD节目中的MPEG2格式,确切地说是MPEG2-PS,全称是Program Stream,而TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么
make的模式规则
make的模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。 有一点需要注意的是,"%"的展开发生在变量和函数的展开之后,变量和函数的展开发生在make载入Makefile时,而模式规则中的"%"则发生在运行时。 1、模式规则介绍 模式规则中,至少在规则的目标定义中要包含"%",否则
轻松使用 ffmpeg sdk 实现各种格式的rgb以及yuv raw
有些时候大家需要一些yuv或者rgb 的 raw data的文件。ffmpeg项目中的libavcodec支持很多格式的raw相互转换,在早期的版本中,使用 img_convert,在新版本中,使用 sws_scale 完成。各种不同的格式在ffmpeg里面被称为 pixel formats,下面贴出来的就是:PIX_FMT_YUV420P, < Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)n"PIX_FMT_YUV422, < Packed pixel, Y0 Cb Y1 Cr n"PIX_FMT_RGB24, < Packed pixel, 3 bytes per pixel, RGBRGB...n"PIX_FMT_BGR24, < Packed pixel, 3 bytes
Using libavformat and libavcodec(中文版)
来源:http://ffmpeg.sourceforge.net/ ffmpeg开发指南(使用 libavformat 和 libavcodec)Ffmpeg 中的Libavformat 和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验
FFMPEG 编码分析流程图
FFMPEG 编码分析流程图 - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/18974499.html读代码,自己画画图,可惜显示效果差啊图2.4 write_video_frame.jpg图2.4.1 avcodec_encode_video.jpg图2.4.1.1 encode_picture.jpg图2.4.2 av_write_frame.jpg [@more@]
FFMpeg框架代码阅读 - [3DTV]
FFMpeg框架代码阅读 - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/15774588.html简介FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.TCPMP, VLC, MPlayer等开源播放器都用到了FFmpeg。FFmpeg主目录下主要有libavcodec、libavformat和libavutil等子目录。其中libav
FFMpeg SDK 开发手册(3)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084644.html14. void av_free(void *ptr) usage: free the stream. Free memory which has been allocated with av_malloc(z)() or av_realloc(). av_free(oc); /****************************************************************** ****************************************************************** add_video_stream() AVCodecContext *c AVStream *st ******************************************************************/
FFMpeg SDK 开发手册(2)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084488.htmlIV. AVCodecContext 此结构在Ffmpeg SDK中的注释是:main external api structure其重要性可见一斑。而且在avcodec它的定义处,对其每个成员变量,都给出了十分详细的介绍。应该说AVCodecContext的初始化是Codec使用中最重要的一环。虽然在前面的AVStream中已经有所提及,但是这里还是要在说一遍。AVCodecContext作为Avstream的一个成员结构,必须要在Avstream初始化後(30)再对其初始化(AVStream的初始化用到AVFormatConte
FFMpeg SDK 开发手册 1
FFMpeg SDK 开发手册(1)[转载] - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084170.htmlFFMpeg SDK 开发手册 FFMpeg 中比较重要的函数以及数据结构如下: 1. 数据结构: (1) AVFormatContext (2) AVOutputFormat (3) AVInputFormat (4) AVCodecContext (5) AVCodec (6) AVFrame (7) AVPacket (8) AVPicture (9) AVStream 2. 初始化函数: (1) av_register_all() (2) avcodec_open() (3) avcodec_close() (4) av_open_input_file() (5) av_find_input_format() (6) av_f
ffmpeg分析系列之七(打开输入的流)
ffmpeg分析系列之七(打开输入的流)err = av_open_input_stream(ic_ptr, pb, filename, fmt, ap);int av_open_input_stream(AVFormatContext **ic_ptr, // 输出参数: 格式上下文ByteIOContext *pb, // 字节IO上下文const char *filename, // 文件名AVInputFormat *fmt, // 输入的格式AVFormatParameters *ap) // 格式参数, 调用时为NULL{int err;AVFormatContext *ic;AVFormatParameters default_ap;// 使用缺省的格式参数if(!ap){ap=&default_ap;memset(ap, 0, sizeof(default_ap));}if(!ap->prealloced_context)ic = avformat_all
ffmpeg分析系列之五(打开输入的文件)
ffmpeg分析系列之五(打开输入的文件)1. 打开文件:if (!fmt || !(fmt->flags & AVFMT_NOFILE)) { 因 fmt == NULL, 上面成立, 再看下面的代码: ByteIOContext *pb = NULL; // 字节IO上下文 if ((err=url_fopen(&pb, filename, URL_RDONLY)) < 0) { // 只读方式打开输入的文件 goto fail; } if (buf_size > 0) { // 因 buf_size == 0, 不成立 url_setbufsize(pb, buf_size); }进入url_fopen函数:int url_fopen(ByteIOContext **s, // 输出参数: 字节IO上下文
ffmpeg分析系列之四(探测输入的格式)
ffmpeg分析系列之四(探测输入的格式)调用av_open_input_file(&pFormatCtx, is->filename, NULL, 0, NULL)函数打开输入的文件.1. 分析一下函数原型:int av_open_input_file(AVFormatContext **ic_ptr, // 输出参数: 格式上下文 const char *filename, // 文件名 AVInputFormat *fmt, // 输入的格式, 为NULL, 即未知 int buf_size, // 缓冲的大小, 为0 AVFormatParameters *ap); // 格式的参数, 为NULL2. 初始化探测数据: AVProbeData
ffmpeg分析系列之六(再次探测输入的格式)
ffmpeg分析系列之六(再次探测输入的格式)void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL; // 因为 ap == NULL, 所以 logctx 也 == NULL. if (!fmt && (err = ff_probe_input_buffer(&pb, &fmt, filename, logctx, 0, logctx ? (*ic_ptr)->probesize : 0)) < 0) { goto fail; } // fmt == NULL 时才执行 ff_probe_input_buffer 函数, 因为 fmt 就等于NULL, 成立.ff_probe_input_buffer函数的原型:int ff_probe_input_buffer(ByteIOContext **pb, // 字节IO上下文,
ffmpeg分析系列之三(输入输出格式)
ffmpeg分析系列之三(输入输出格式)探测数据结构:/** This structure contains the data a format has to probe a file. */typedef struct AVProbeData { const char *filename; unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ int buf_size; /**< Size of buf except extra allocated bytes */} AVProbeData;h264的探测函数:static int h264_probe(AVProbeData *p){ uint32_t code= -1; int sps=0, pps=0, idr=0, res=0, sli=0; int i; for(
ffmpeg分析系列之二(文件协议)
ffmpeg分析系列之二(文件协议)URL协议结构:typedef struct URLProtocol { const char *name; int (*url_open)(URLContext *h, const char *url, int flags); int (*url_read)(URLContext *h, unsigned char *buf, int size); int (*url_write)(URLContext *h, unsigned char *buf, int size); int64_t (*url_seek)(URLContext *h, int64_t pos, int whence); int (*url_close)(URLContext *h); struct URLProtocol *next; int (*url_read_pause)(URLContext *h, int pause); int64_t (*url_read_seek)(URLCont
ffmpeg分析系列之一(注册该注册的)
ffmpeg分析系列之一(注册该注册的)hello,各位好,本人是一名嵌入式软件工程师,目前正使用ffmpeg开发一款嵌入式多媒体播放器,《ffmpeg分析》系列博文是本人在阅读ffmpeg源代码时所做的笔记,希望对各位有点帮助。分析过程结合下面的例程:http://dranger.com/ffmpeg/tutorial05.c一. 调用av_register_all函数注册所有的格式和编码解码器.1.1 先调用avcodec_register_all函数注册所有的编码解码器.1. 下面列出与H264相关的注册:// 注册硬件加速器REGISTER_HWACCEL (H264_DXVA2, h264_dxva2);REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);/