まず、共通API
1.1 av_register_all()
全てのマルチプレクサ、デマルチプレクサ、プロトコルプロセッサの初期化及び登録はlibavformat。あなたはこの関数を呼び出していない場合は、サポートされる形式を選択するには、次の3つの機能を呼び出すことができます。
- 登録マルチプレクサ機能です
av_register_output_format()
。 - 機能登録デマルチプレクサです
av_register_input_format()
。 - 関数は、プロトコルハンドラを登録しています
ffurl_register_protocol()
。
注:上記のFFmpeg4.0のバージョンは、この機能は廃止されました。
メモリの割り当てと解放1.2(av_malloc()、av_free()、等)
av_malloc()とav_freeは()簡易包装システム関数malloc()と(無料)をしている、といくつかのエラーチェック作業を行います。同様に存在av_realloc()。
1.3 avcodec_find_encoder()和avcodec_find_decoder()
avcodec_find_encoder()、FFmpegのエンコーダを見つけるために使用されるavcodec_find_decoder()は、FFmpegのデコーダ宣言がlibavcodecの\ avcodec.hに配置されている見つけるために使用されます。次のようにプロトタイプは次のとおりです。
// 函数的参数是一个编码器的ID,返回查找到的编码器(没有找到就返回NULL)。
AVCodec *avcodec_find_encoder(enum AVCodecID id);
// 函数的参数是一个解码器的ID,返回查找到的解码器(没有找到就返回NULL)。
AVCodec *avcodec_find_decoder(enum AVCodecID id);
1.4 avcodec_open2()
ビデオとオーディオコーデック、位置宣言libavcodecの\あるutils.cを初期化するためのAVCodecContext。次のようにプロトタイプは次のとおりです。
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
- avctx:AVCodecContext初期化が必要です。
- コーデック:AVCodec入力。
- オプション:いくつかのオプション。例えば、libx264符号化を使用して、「プリセット」、「曲」ので、このパラメータによって提供することができますで。
1.5 avcodec_close()
エンコーダを閉じるために、文はあるutils.c \ libavcodecの位置しています。次のようにプロトタイプは次のとおりです。
int avcodec_close(AVCodecContext *avctx)
関数は、単一のパラメータを取り、エンコーダはAVCodecContextを終了する必要があります。
第二に、デコードAPI
ここでは関数宣言ははlibavformat \ avformat.hであるデコーディングを使用するには、いくつかの必要があります。
2.1 avformat_open_input()
オープンフローリードヘッドと情報出力。次のようにプロトタイプは次のとおりです。
int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options)
- PS:関数呼び出しの後に処理が成功したAVFormatContext構造です。
- URL:オープンビデオとオーディオストリームへのURL。
- FMT:のAVInputFormatにAVFormatContextを施行。一般的に、このパラメータがNULLに設定することができ、これは自動的にFFmpeg AVInputFormatを検出することができます。
- オプション:通常の状況下ではNULLに設定することができ、という追加のオプション。
関数が成功した場合、戻り値は0以上です。
2.2 avformat_find_stream_info()
いくつかの関連情報を取得するには、オーディオおよびビデオデータを読み込みます。次のようにプロトタイプは次のとおりです。
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
2.3 av_read_frame
フレームまたはビデオにオーディオストリームを読み込みます。例えば、ビデオ、各フレームを復号ビデオをデコードするとき、あなたはデータが復号化される前に圧縮された映像データを取得するために)(av_read_frameを呼び出す必要があります。次のようにプロトタイプは次のとおりです。
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
2.4 avformat_close_input()
オープンストリームを閉じます。次のようにプロトタイプは次のとおりです。
void avformat_close_input(AVFormatContext **s)
第三に、コーディングAPI
FFmpegのベースのビデオエンコーダ、オーディオプログラム、avformat_alloc_output_context2()関数は、()成分登録機能av_register_allに加えて()一般に、第1の関数呼び出しです。また、3つの機能を使用FFmpegの書き込みファイルを導入し、宣言ははlibavformat \ avformat.hにあります。
- 映像データを書き込むためのav_write_frame();
- avformat_write_header()ビデオファイルヘッダを書き込みます。
- av_write_trailer() - ビデオファイルの終わりを書き込むために使用。
3.1 avformat_alloc_output_context2()
AVFormatContextは、出力のための構造を初期化します。次のようにプロトタイプは次のとおりです。
int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat * oformat, const char * format_name, const char * filename)
3.2 avformat_write_header()
メディアファイル出力にプライベートデータと書き込みヘッダストリームのストリームを割り当てます。次のようにプロトタイプは次のとおりです。
int avformat_write_header(AVFormatContext *s, AVDictionary ** options)
3.3 av_write_frame()
映像と音声データを出力します。次のようにプロトタイプは次のとおりです。
int av_write_frame(AVFormatContext *s, AVPacket *pkt)
パラメータsはAVFormatContext、出力用AVPacketに出力するためのPKTパラメータです。
3.4 av_write_trailer()
ファイルの出力端。次のようにプロトタイプは次のとおりです。
int av_write_trailer(AVFormatContext *s)
それは唯一つのパラメータを指定する必要があり、即ちAVFormatContextための出力、通常の関数値に実行戻り、0に等しいです。
第四に、画像処理API
libswscaleは、画像ピクセルデータを処理するためのメインライブラリの一つです。写真は、変換ピクセルフォーマットを完了することができ、画像はストレッチのように。一般的に使用される機能の数は、文libswscale \ swscale.hに位置している、3の上に、一般的には、めったにありませんlibswscale:
sws_getContext():分配和返回一个SwsContext。
sws_scale():处理图像数据。
sws_freeContext():释放一个SwsContext。
前記sws_getContextは())(sws_getCachedContextで置換されてもよいです。
4.1 sws_getContext()
割り当てとSwsContextを返します。次のようにプロトタイプは次のとおりです。
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
)
4.2 sws_scale()
画像データを処理します。次のようにプロトタイプは次のとおりです。
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[]) )
4.3 sws_freeContext()
SwsContextをリリース。次のようにプロトタイプは次のとおりです。
void sws_freeContext(struct SwsContext *swsContext)
V.その他のAPI
5.1ログ出力システム(av_log()、等)
av_log()は、ログ出力のFFmpegの関数です。一般的にはFFmpegのライブラリのソースコードが許可されていないのprintf()この関数は、常にすべての出力av_log()を使用します。av_log()文は、そのプロトタイプは次のようであるLOG.H、\ libavutilあります。
void av_log(void* avcl, int level, const char *fmt, ...)
関数の最後のパラメータは、「....」
C言語では、不確実性の場合の引数の数「...」パラメータを表します。例えばのprintf()のプロトタイプは以下のように定義されます:int printf (const char*, ...)
。
参考:
記事のソースコード解析ライブラリ関数リストのFFmpegのレイシャオフアグレート神:
[GM]
FFmpegの簡単なソースコード分析:av_register_all()
FFmpegの簡単なソースコード分析:avcodec_register_all()
FFmpegの簡単なソースコード分析:メモリの割り当て及び解除(av_malloc()、av_free()、等)
FFmpegのソースコード解析は単純で:初期化し、共通の構造を破壊する(AVFormatContext、AVFrame、等)
FFmpegの簡単なソースコード分析:avio_open2()
FFmpegの簡単なソースコード分析:av_find_decoder()およびav_find_encoder()
FFmpegの簡単なソースコード分析:avcodec_open2()
FFmpegの簡単なソースコード分析:avcodec_close()
[デコーダ]
Open関数は、FFMPEGメディアavformat_open_inputを示します
FFmpegの簡単なソースコード分析:avformat_open_input()
FFmpegの簡単なソースコード分析:avformat_find_stream_info()
FFmpegの簡単なソースコード分析:av_read_frame()
FFmpegの簡単なソースコード分析:avcodec_decode_video2()
FFmpegの簡単なソースコード分析:avformat_close_input()
[符号化]
FFmpegの簡単なソースコード分析:avformat_alloc_output_context2()
FFmpegの簡単なソースコード分析:avformat_write_header()
FFmpegの簡単なソースコード分析:avcodec_encode_video()
FFmpegの簡単なソースコード分析:av_write_frame()
FFmpegの簡単なソースコード分析:av_write_trailer()
[その他]
FFmpegの簡単なソースコード分析:ログ出力システム(av_log()、等)
FFmpegのソースコード解析は単純である:構造部材管理システム-AVClass
FFmpegのソースコード解析は単純である:構造部材管理システム-AVOption
FFmpegの簡単なソースコード分析:(のsws_getContextのlibswscale)
FFmpegの簡単なソースコード分析:(のsws_scale libswscale)
FFmpegの簡単なソースコード分析:(のavdevice_register_all libavdevice)
簡単な分析のためのFFmpegのソースコード:gdigrabのlibavdevice
シンプルブック - FFmpegのAPI-共通のデータ構造と機能