FFmpeg接口使用说明

FFmpeg接口使用说明_第1张图片

  1. avformat_open_input()
  • 打开输入流并读取标题。编解码器此时不会打开。流必须使用avformat_close_input()关闭。
  • **参数1: AVFormatContext ps:用户提供的AVFormatContext的指针(由avformat_alloc_context()分配),如果此接口失败AVFormatContext将被释放。
  • *参数2: const char url:要打开的流的URl地址。
  • **参数3:const AVInputFormat *fmt:**一般为NULL。
  • **参数4:AVDictionary **options,**结构体,简单的key/value存储, ffmpeg中有很多 API 通过它来传递参数。 例如设置缓存大小、设置超时断开连接时间、设置最大时延等。
  • **返回:**成功返回0,失败返回负数。
  1. avformat_find_stream_info()
  • 读取媒体文件的数据包以获取流信息.
  • **参数1:AVFormatContext *ic: **上下文句柄
  • **参数2:AVDictionary **options:**一般为NULL
  • **返回:**成功返回0,失败返回负数。
  1. av_find_best_stream()
  • ** 用于查找最佳匹配的媒体流。**
  • **参数1:AVFormatContext *ic:**上下文句柄
  • **参数2:enum AVMediaType type: 要查找的媒体流类型,可以是音频流、视频流或字幕流等。 **
enum AVMediaType {
    AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATA
    AVMEDIA_TYPE_VIDEO,
    AVMEDIA_TYPE_AUDIO,
    AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous
    AVMEDIA_TYPE_SUBTITLE,
    AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse
    AVMEDIA_TYPE_NB
};
  • **参数3:int wanted_stream_nb: **期望的媒体流索引号,可以是特定的索引号,也可以是AV_NOPTS_VALUE(-1)表示任意流。
  • **参数4:int related_stream: **前一个相关流的索引号,如果没有前一个相关流,则传入-1。 ** **
  • **参数5:const struct AVCodec **decoder_ret: **返回解码器指针。
  • **参数6:int flags: **查找最佳流的标志位,默认为0。
  • ** 返回:**找到的最佳匹配媒体流的索引号,如果找不到则返回负数。
  1. avcodec_alloc_context3()
  • 分配AVCodecContext(编解码器上下文)并将其字段设置为默认值。生成的结构体应该使用avcodec_free_context()释放。
  • **参数1: AVCodec *codec:**通常为NULL。如果为NULL,则不会初始化编解码器特定的默认值。
  • 返回:AVCodecContext * 编解码器上下文;填充默认值或失败时为NULL。
  1. avcodec_find_decoder()
  • 通过id查找解码器。
  • **参数1:enum AVCodecID id: **枚举类型,所请求解码器的AVCodecID。
  • **返回:**如果找到一个,则为解码器,否则为NULL。
  1. avcodec_open2()
  • 使用给定的AVCodec初始化AVCodecContext。使用此函数之前上下文必须使用avcodec_alloc_text3()进行分配。
  • **参数1:AVCodecContext *avctx: **需要初始化的AVCodecContext。
  • **参数2:AVCodec *codec:**要打开此上下文的编解码器.
  • **参数3:AVDictionary **options:**字典选项,通常为NULL
  • **返回:**成功返回0,失败返回负数。
  1. av_packet_alloc()
  • 分配AVPacket并将其字段设置为默认值。由此产生的struct必须使用av_packet_free()释放。
  • 返回:AVPacket,失败时为NULL。
  1. av_frame_alloc()
  • 分配一个AVFrame并将其字段设置为默认值。由此产生的struct必须使用av_frame_free()释放。
  • **返回:**AVFrame,失败时为NULL。
  1. av_read_frame()
  • 返回流的下一帧。
  • **参数1:AVFormatContext *s:**上下文句柄。
  • **参数2:AVPacket *pkt:**返回的一帧数据包 。
  • **返回:**成功返回0,失败返回负数。
  1. avcodec_send_packet()
  • 提供原始数据包数据作为解码器的输入,即负责把AVpacket数据包发送给解码器
  • *参数1:AVCodecContext avctx:编解码器上下文
  • *参数2:AVPacket avpkt:一帧数据包
  • **返回:**成功返回0,失败返回负数。
返回说明:
@retval AVERROR(EAGAIN)  在当前状态下不接受输入-必须读取输出avcodec_receive_frame()
@retval AVERROR_EOF 解码器已被刷新,不能生成新的数据包发送给它
@retval AVERROR(EINVAL) 编解码器未打开,它是编码器,或者需要flush
@retval AVERROR(ENOMEM)  向内部队列添加报文失败
  1. avcodec_receive_frame()
  • **从解码器或编码器返回已解码的输出数据, 即从解码器取出一帧AVFrame数据 **
  • **参数1:AVCodecContext *avctx:**编解码器上下文。
  • **参数2:AVFrame *frame:**由编解码器分配的帧。
  • **返回:**成功返回0,失败返回负数。(返回参考avcodec_send_packet)

你可能感兴趣的:(ffmpeg)