FFmpegの共通API

まず、共通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-共通のデータ構造と機能


おすすめ

転載: www.cnblogs.com/linuxAndMcu/p/12041359.html