ffmpeg结构体以及函数介绍(二)

简介: <div><span style="font-size:18px"><strong>1 avcodec_find_decoder()</strong></span></div> <div> <p align="left"><span style="color:green">/**</span></p> <p align="left"><span style="color:green"
1 avcodec_find_decoder()

/**

 * Find a registered decoder with a matching codec ID.

 *

 * @param id CodecID of the requested decoder

 * @return A decoder if one was found, NULL otherwise.

 */

AVCodec *avcodec_find_decoder(enum CodecID id);

// 通过code ID查找一个已经注册的音视频解码器

// 引入 #include "libavcodec/avcodec.h"

// 实现在: \ffmpeg\libavcodec\utils.c

// 查找解码器之前,必须先调用av_register_all注册所有支持的解码器

// 查找成功返回解码器指针,否则返回NULL

// 音视频解码器保存在一个链表中,查找过程中,函数从头到尾遍历链表,通过比较解码器的ID来查找

 

2 avcodec_find_decoder_by_name()

/**

 * Find a registered decoder with the specified name.

 *

 * @param name name of the requested decoder

 * @return A decoder if one was found, NULL otherwise.

 */

AVCodec *avcodec_find_decoder_by_name(const char *name);

// 通过一个指定的名称查找一个已经注册的音视频解码器

// 引入 #include "libavcodec/avcodec.h"

// 实现在: \ffmpeg\libavcodec\utils.c

// 查找解码器之前,必须先调用av_register_all注册所有支持的解码器

// 查找成功返回解码器指针,否则返回NULL

// 音视频解码器保存在一个链表中,查找过程中,函数从头到尾遍历链表,通过比较解码器的name来查找

 

3 avcodec_find_encoder()

/**

 * Find a registered encoder with a matching codec ID.

 *

 * @param id CodecID of the requested encoder

 * @return An encoder if one was found, NULL otherwise.

 */

AVCodec *avcodec_find_encoder(enum CodecID id);

// 通过code ID查找一个已经注册的音视频编码器

// 引入 #include "libavcodec/avcodec.h"

// 实现在: \ffmpeg\libavcodec\utils.c

// 查找编码器之前,必须先调用av_register_all注册所有支持的编码器

// 查找成功返回编码器指针,否则返回NULL

// 音视频编码器保存在一个链表中,查找过程中,函数从头到尾遍历链表,通过比较编码器的ID来查找

 

4 avcodec_find_encoder_by_name()

/**

 * Find a registered encoder with the specified name.

 *

 * @param name name of the requested encoder

 * @return An encoder if one was found, NULL otherwise.

 */

AVCodec *avcodec_find_encoder_by_name(const char *name);

// 通过一个指定的名称查找一个已经注册的音视频编码器

// 引入 #include "libavcodec/avcodec.h"

// 实现在: \ffmpeg\libavcodec\utils.c

// 查找编码器之前,必须先调用av_register_all注册所有支持的编码器

// 查找成功返回编码器指针,否则返回NULL

// 音视频编码器保存在一个链表中,查找过程中,函数从头到尾遍历链表,通过比较编码器的名称来查找

 

5 avcodec_open()

/**

 * Initialize the AVCodecContext to use the given AVCodec. Prior to using this

 * function the context has to be allocated.

 *

 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),

 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for

 * retrieving a codec.

 *

 * @warning This function is not thread safe!

 *

 * @code

 * avcodec_register_all();

 * codec = avcodec_find_decoder(CODEC_ID_H264);

 * if (!codec)

 *     exit(1);

 *

 * context = avcodec_alloc_context();

 *

 * if (avcodec_open(context, codec) < 0)

 *     exit(1);

 * @endcode

 *

 * @param avctx The context which will be set up to use the given codec.

 * @param codec The codec to use within the context.

 * @return zero on success, a negative value on error

 * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder, avcodec_close

 */

int avcodec_open(AVCodecContext *avctx, AVCodec *codec);

// 使用给定的AVCodec初始化AVCodecContext

// 引入#include "libavcodec/avcodec.h"

// 方法: avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), avcodec_find_decoder() and avcodec_find_encoder() 提供了快速获取一个codec的途径

// 该方法在编码和解码时都会用到

// 返回0时成功,打开作为输出时,参数设置不对的话,调用会失败

 
6 av_guess_format()

/**

 * Return the output format in the list of registered output formats

 * which best matches the provided parameters, or return NULL if

 * there is no match.

 *

 * @param short_name if non-NULL checks if short_name matches with the

 * names of the registered formats

 * @param filename if non-NULL checks if filename terminates with the

 * extensions of the registered formats

 * @param mime_type if non-NULL checks if mime_type matches with the

 * MIME type of the registered formats

 */

AVOutputFormat *av_guess_format(const char *short_name,

                                const char *filename,

                                const char *mime_type);

// 返回一个已经注册的最合适的输出格式

// 引入#include "libavformat/avformat.h"

// 可以通过 const char *short_name 获取,如"mpeg"

// 也可以通过 const char *filename 获取,如"E:\a.mp4"

 

7 av_new_stream()

/**

 * Add a new stream to a media file.

 *

 * Can only be called in the read_header() function. If the flag

 * AVFMTCTX_NOHEADER is in the format context, then new streams

 * can be added in read_packet too.

 *

 * @param s media file handle

 * @param id file-format-dependent stream ID

 */

AVStream *av_new_stream(AVFormatContext *s, int id);

// 为媒体文件添加一个流,一般为作为输出的媒体文件容器添加音视频流

// 引入 #include "libavformat/avformat.h"

// 再打开源文件时用户一般不需要直接调用该方法

 
8 dump_format()

#if FF_API_DUMP_FORMAT

/**

 * @deprecated Deprecated in favor of av_dump_format().

 */

attribute_deprecated void dump_format(AVFormatContext *ic,

                                      int index,

                                      const char *url,

                                      int is_output);

#endif

// 该函数的作用就是检查下初始化过程中设置的参数是否符合规范
// 有些版本中为 av_ dump_format
 
9 av_set_parameters()

#if FF_API_FORMAT_PARAMETERS

/**

 * @deprecated pass the options to avformat_write_header directly.

 */

attribute_deprecated int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap);

#endif
// 设置初始化参数
// 不赞成跳过该方法,直接调用 avformat_write_header/av_write_header
 
10 av_write_header()

#if FF_API_FORMAT_PARAMETERS

/**

 * Allocate the stream private data and write the stream header to an

 * output media file.

 * @note: this sets stream time-bases, if possible to stream->codec->time_base

 * but for some formats it might also be some other time base

 *

 * @param s media file handle

 * @return 0 if OK, AVERROR_xxx on error

 *

 * @deprecated use avformat_write_header.

 */

attribute_deprecated int av_write_header(AVFormatContext *s);

#endif

// 把流头信息写入到媒体文件中
// 返回0成功
相关文章
|
30天前
FFmpeg中结构释放小函数
本文介绍了FFmpeg中用于释放不同结构体内存的泛化变参模板函数CleanUp,以及如何特化该模板以释放AVFormatContext、AVCodecContext、AVPacket、AVFrame和uint8_t*类型的内存,并提供了一个测试文件来演示这些函数的使用。
20 3
|
4月前
|
存储 编解码 容器
FFmpeg avformat_open_input() 函数返回错误protocol not found解决方法(实测有效!附简单FFMPEG的编解码流程)
我个人出现这个错误的时候是在打开文件时报的错误,开始以为我需要加上资源文件,那样QT确实能检测到文件的存在,但是在Debug中他是检测不到这个文件的。
403 1
|
6月前
|
存储 编解码 索引
了解FFmpeg音频通道布局结构:AVChannelLayout结构体解析
了解FFmpeg音频通道布局结构:AVChannelLayout结构体解析
221 1
|
6月前
|
编解码 算法 C++
【ffmpeg 基础函数】详解FFmpeg中的av_packet_ref函数
【ffmpeg 基础函数】详解FFmpeg中的av_packet_ref函数
63 0
|
6月前
|
编解码 测试技术
ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)
ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)
157 0
|
6月前
|
算法
FFmpeg关键函数介绍
FFmpeg关键函数介绍
45 0
|
6月前
|
存储 缓存 编解码
FFmpeg常用结构体分析
FFmpeg常用结构体分析
66 0
|
6月前
|
编解码 网络协议 API
ffmpeg命令行工具源码之结构体分析1-命令行参数(未完结,持续更新)
ffmpeg作为多媒体文件转换工具,至少需要有一个要转换的输入文件信息(不仅仅是普通文件,还可以是摄像头设备,网络流等),和通常至少需要一个输出格式的文件(输出文件不仅仅指普通的文件,网络协议比如RTP协议,RTSP协议都可以理解为输出文件),ffmpeg的文件的转换过程主要由以下几个流程 (1)解封装 (2)解码 (3)过滤器 (4)编码 (5)封装 因此ffmpeg工具涉及的结构体主要就从这几个方面来说明这些结构体的含义。
73 0
|
6月前
|
API 开发工具 C语言
解决新版本ffmpeg找不到avpriv_io_delete函数等问题
解决新版本ffmpeg找不到avpriv_io_delete函数等问题
95 0
[笔记]音视频学习之ffmpeg实践《一》常用结构体及裁剪画面思路(下)
[笔记]音视频学习之ffmpeg实践《一》常用结构体及裁剪画面思路(下)

热门文章

最新文章