美文网首页多媒体科技
FFmpeg中的libx264编码流程

FFmpeg中的libx264编码流程

作者: smallest_one | 来源:发表于2019-04-16 17:32 被阅读2次

目录

  1. 参考
  2. 概述
  3. FFmpeg中的libx264编码流程

1. 参考

2. 概述

本文主要参考[1],为了更加清晰地展现出编码过程中FFmpeg与libx264的交互流程。

编码流程主要有三个步骤:

  1. 编码器初始化:打开编码器并设置各种编码参数。
  2. 编码:输入待编码的图像数据和一些参数,获取编码后的数据。
  3. 关闭编码器:释放各种资源。

FFmpeg的编解码的API详细介绍可参考FFmpeg音频解码#编解码API介绍部分

3. FFmpeg中的libx264编码流程

FFmpeg的libx264编码器AVCodec ff_libx264_encoder定义在libavcodec/libx264.c。是H.264编码库libx264的一个wrapper,libavcodec和libx264中间的一个代理,必要时对libx264和FFmpeg定义的一些数据结构进行转换。

3.1 编码器初始化

ff_libx264_encoder#init.png
  • 虚线的箭头表示在某些特定情况下会调用。
  • 以x264开头的结构体和函数为libx264中定义的。
  • x264_param_default():设置默认参数。
  • x264_param_default_preset():设置默认的preset,在preset或tune不为空时设置。
  • x264_param_apply_profile():设置profile,在profile不为空时设置。
  • 设置的各种参数有两个来源:AVCodecContextX264ContextX264Context保存在AVCodecContext.priv_data中。 AVCodecContext包含了一些编码器的通用选项。X264Context包含了一些libx264的特有选项。
  • x264_encoder_open():打开编码器,返回一个编码器句柄x264_t *
  • x264_encoder_headers():需要全局头的时候,输出头信息。

3.2 编码

ff_libx264_encoder#encode.png
  • x264_encoder_encode为执行编码的函数,输入的待编码的数据为x264_picture_t中,输出的编码数据为x264_nal_t数组。
  • 在输入端ff_libx264_encoderAVFrame中的待编码的数据的buffer地址赋给了x264_picture_t中的对应变量,数据buffer是原来AVFrame中分配的,没有数据拷贝的过程。
  • 在输出端ff_libx264_encoder把已编码的数据从x264_nal_t数组拷贝到AVPacket中。
  • x264_encoder_delayed_frames:返回当前延迟的(缓冲的)帧的数量。x264_encoder_encode的调用会循环进行直到x264_encoder_delayed_frames返回的值为0,图中没有表示出来。

3.3 关闭编码器

ff_libx264_encoder#close.png

相关文章

  • FFmpeg中的libx264编码流程

    目录 参考 概述 FFmpeg中的libx264编码流程 1. 参考 [1] 雷霄骅/FFmpeg与libx26...

  • FFmpeg h264编码

    通过FFmpeg进行h264的编码流程:1.通过名字(h264编码器名字是libx264)查找编码器:avcode...

  • FFmpeg+x264编译

    在FFmpeg使用到编码时要使用到libx264,通过FFmpeg+libx264可实现视频编码效果。下面就是各个...

  • iOS FFmpeg+libx264包的产生

    在FFmpeg使用到编码时要使用到libx264,通过FFmpeg+libx264可实现视频编码效果。下面就是各个...

  • FFmpeg+x264编译

    在FFmpeg使用到编码时要使用到libx264,通过FFmpeg+libx264可实现视频编码效果。下面就是各个...

  • FFmpeg转码(1)

    FFmpeg软编码(H.264) 查看libx264编码信息 x264编码参数 H.264编码举例: 1. 编码器...

  • libx264开发笔记(一):libx264介绍、海思平台移植编

    前言   在编译ffmpeg时,使用到h264编码时是需要依赖libx264的,本文章是将将libx264作为静态...

  • FFmpeg流媒体(5)

    FFmpeg推多路流 1、管道方式输出多路流 如上,音频编码为AAC,视频编码为libx264,输出格式为FLV,...

  • FFmpeg+x264:libx264 not found

    已安装libx264后,编译ffmpeg仍然报错libx264 not found解决方法:在编译ffmpeg的c...

  • FFmpeg编码时候特别耗内存和CPU

    项目需要加入编码功能,我就重新编译了ffmpeg库,并带上libx264编码库。编码时候发现有两个问题:1、很耗内...

网友评论

    本文标题:FFmpeg中的libx264编码流程

    本文链接:https://www.haomeiwen.com/subject/wwdbwqtx.html