ffmpeg函数介绍

void avdevice_register_all(void);
初始化libavdevice并且注册所有的输入和输出设备。
AVFormatContext *avformat_alloc_context(void);
分配AVFormatContext。此函术分配的AVFormatContext结构体需要avformat_free_context()来释放上下文以及框架在其中分配的所有内容。
返回值:
    分配的AVFormatContext结构体。
int avformat_open_input (AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options);
功能:打开输入流并读取标题,并将视频信息写入到AVFormatContext中。
打开输入流并读取标题。编解码器如果未打开。流必须使用avformat_close_input()关闭。
参数:
	ps:指向用户提供的AVFormatContext(由avformat_alloc_context分配)的指针。可能是指向NULL的指针,在这种情况下,AVFormatContext由该函数分配并写入ps。请注意,用户提供的AVFormatContext将在失败时释放。
	url:要打开的流的URL。
	fmt:如果非NULL,此参数将强制使用特定的输入格式。否则将自动检测格式。
	options:一个充满AVFormatContext和解复用器私有选项的字典。返回时,此参数将被销毁,并替换为包含未找到的选项的dict。可能为NULL。
返回值:
	成功时为0,失败时为负AVERROR。
into avformat_find_stream_info (AVFormatContext *ic, AVDictionary **options);
功能:读取媒体文件的数据包以获取流信息。
参数:
    ic:媒体文件上下文
    options:如果非NULL,则ic.nb_streams指向字典的指针长数组,其中第i个成员包含与第i个流对应的编解码器的选项。返回时,每个字典都将填充未找到的选项。
返回值:如果返回值大于等于0则说明成功,返回其他我失败。
AVCodec* avcodec_find_decoder (enum AVCodecID id);
功能:根据提供的AVCodecID寻找一个已经注册的解码器;
参数:所请求解码器的AVCodecID;
返回值:如果找到返回一个AVCodec,失败则返回nullptr;
int avcodec_open2 (AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
功能:初始化AVCodecContext以使用给定的AVCodec。在使用此函数之前,必须使用avcodec_alloc_text3()分配上下文。
参数:
    avctx:要初始化的上下文;
    codec:要为其打开此上下文的编解码器。如果之前已将非NULL编解码器传递给avcodec_alloc_text3()或此上下文,则此参数必须为NULL或等于之前传递的编解码器;
    options:一个充满AVCodecContext和编解码器专用选项的字典。返回时,此对象将填充未找到的选项。可以为nullptr;
返回值:成功时为零,错误时为负值;
av_frame_alloc:分配AVFrame并将其字段设置为默认值。主要该函数只分配AVFrame的空间,它的data字段的指定的buffer需要其它函数分配。返回为一个AVFream对象。
int av_read_frame (AVFormatContext *s, AVPacket *pkt);
功能:返回流的下一帧。此函数返回文件中存储的内容,并且不验证解码器是否有有效的帧。它会将存储在文件中的内容拆分为多个帧,并为每个调用返回一个帧。它不会省略有效帧之间的无效数据,从而给解码器提供解码所可能的最大信息。
成功后,返回的数据包被引用计数(pkt->buf被设置),并且无限期有效。当不再需要数据包时,必须使用av_packet_unref()释放该数据包。对于视频,数据包只包含一帧。
参数:
    s:媒体上下文结构体;
    pkt:返回的数据包
返回值:0(如果正常),<0(如果出现错误或文件结束)。出现错误时,pkt将为空(好像它来自av_packet_alloc())。
int avcodec_send_packet (AVCodecContext *avctx, const AVPacket *avpkt);
功能:将原始数据包数据作为输入提供给解码器。
参数:
    avctx:编解码器上下文
    avpkt:输入的AVPacket。通常,这将是一个单独的视频帧,或几个完整的音频帧。数据包的所有权仍然属于调用者,解码器不会写入数据包。解码器可以创建对分组数据的引用(或者如果分组没有被引用计数则复制它);
返回值:成功时为0。
    否则为负错误代码:AVERROR(EAGAIN):在当前状态下不接受输入-用户必须使用avcodec_receive_frame()	  读取输出(一旦读取了所有输出,则应重新发送数据包,并且使用EAGAIN调用不会失败)。
    AVERROR_EOF:解码器已被刷新,无法向其发送新的数据包(如果发送了1个以上的刷新数据包,也会返回)			AVERROR(EINVAL):编解码器未打开,它是编码器,或需要刷新
    AVERROR(ENOMEM):无法将数据包添加到内部队列,或类似的其他错误:合法解码错误
int avcodec_receive_frame (AVCodecContext *avctx, AVFrame *frame);
功能:返回解码器的解码输出数据。
参数:
    avctx:编解码器上下文
    frame:这将被设置为由解码器分配的参考计数的视频或音频帧(取决于解码器类型)。请注意,在执行其他操作之前,函数将始终调用av_frame_unref(frame)。这是输出。
返回值:0:成功,返回了一个帧AVERROR(EAGAIN):在这种状态下输出不可用-用户必须尝试发送新的输入       AVERROR_EOF:解码器已完全刷新,将不再有输出帧AVERROR(EINVAL):编解码器未打开,或者是编码器AVERROR_input_CHANGED:当前解码的帧相对于第一个解码的帧更改了参数。设置标志AV_CODEC_flag_DROCHANGED时适用。其他负值:合法解码错误
struct SwsContext* sws_getContext (int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param);
功能:分配并返回SwsContext;
参数:
    srcW 源图像的宽度;
	srcH 源图像的高度;
	srcFormat 源图像格式;
	dstW 目标图像的宽度;
	dstH 目标图像的高度;
	dstFormat 目标图像格式;
	flags 指定用于重新缩放的算法和选项;
	srcFilter 可以是nullptr;
	dstFilter 可以是nullptr;
	param 用于调整所用缩放器的额外参数对于SWS_BICUBIC param[0]和[1]调整基函数的形状,param[0]调整f(1)和param[1]f´(1)对于SWS_GAUSS param[0]调整指数,因此截止频率对于SWS_LANZOS param[0]调整窗口函数的宽度;
返回值:指向已分配上下文的指针,或者出现错误时为NULL;
int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);
功能:返回存储具有给定参数的图像所需的数据量的大小(以字节为单位)。
参数:
    pix_fmt 图像的像素格式;
	width 以像素为单位的图像宽度;
	height 以像素为单位的图像高度;
	align 假定的行大小对齐;
返回值:返回以字节为单位的缓冲区大小,失败时为负错误代码;
void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
功能:分配一个对齐方式适合所有内存访问的内存块(包括CPU上可用的矢量)。
参数:size 要分配的内存块的大小(以字节为单位);
int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4],
                         const uint8_t *src,
                         enum AVPixelFormat pix_fmt, int width, int height, int align);
功能:根据指定的图像参数和提供的数组设置数据指针和行大小。
参数:
    st_data 要填写的数据指针;
	dst_linesize 对要填充的dst_data中的图像进行行化;
	src 缓冲区,它将包含或包含实际的图像数据,可以为NULL;
	pix_fmt 图像的像素格式;
	width 以像素为单位的图像宽度;
	height 以像素为单位的图像高度;
	align src中用于行大小对齐的值;
返回值:返回src所需的字节大小,为负错误代码
int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
              const int srcStride[], int srcSliceY, int srcSliceH,
              uint8_t *const dst[], const int dstStride[]);
功能:在srcSlice中缩放图像切片,并将生成的缩放切片放在dst中的图像中。切片是图像中连续行的序列。
参数:
	c 以前使用创建的缩放上下文sws_getContext()
	srcSlice 包含指向源切片
	srcStride 数组,该数组包含源图像
	srcSliceY 切片在源图像中的位置过程,即数字(从零)在切片的第一行的图像中
	rcSliceH 源切片的高度,即数字切片中的行数
	dst 包含指向目的地图像
	dst 遍历包含目的地图像
返回值:输出切片的高度


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个开源的跨平台多媒体处理库,能够处理各种格式的音频和视频文件。FFmpeg在实际的应用中,通常使用它提供的各种API对音视频进行编解码、过滤、转换等处理。下面是FFmpeg函数调用的基本流程: 1. 初始化FFmpeg库:使用av_register_all函数进行初始化,注册FFmpeg支持的所有编码器、解码器、过滤器等组件。 2. 打开输入文件或设备:使用avformat_open_input函数打开输入文件或设备,并读取文件或设备的基本信息和流信息。 3. 查找音视频流:使用avformat_find_stream_info函数查找音视频流,并获取流的基本信息。 4. 打开编解码器:使用avcodec_find_decoder函数查找音视频流的编解码器,并使用avcodec_open2函数打开编解码器。 5. 解码音视频数据:使用avcodec_send_packet函数将压缩数据送入解码器,使用avcodec_receive_frame函数接收解码后的数据。 6. 过滤音视频数据:使用avfilter_graph_create_filter函数创建过滤器,并使用av_buffersrc_add_frame函数将解码后的数据送入过滤器,使用av_buffersink_get_frame函数从过滤器中获取过滤后的数据。 7. 编码音视频数据:使用avcodec_send_frame函数将原始数据送入编码器,使用avcodec_receive_packet函数接收编码后的数据。 8. 封装音视频数据:使用avformat_write_header函数写入输出文件或设备的头部信息,使用av_interleaved_write_frame函数将编码后的数据写入输出文件或设备。 9. 释放资源:使用avformat_close_input、avcodec_close、avfilter_graph_free、avformat_free_context等函数释放资源。 以上是FFmpeg函数调用的基本流程,具体实现时还需根据具体需求进行函数调用和参数设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值