8

私はこのコードに従ってCのFFmpegライブラリを操作しています。FFmpegライブラリにはドキュメントがほとんどなく、各関数が正確に何をするのかを理解するのは困難です。

私はコード(何が行われているのか)を理解しています。しかし、私は明確さを欠いています。誰か助けてくれませんか?

Q1)** struct AVFrameContext ****とファイル名(必要な最小の非NULLパラメーター)が関数avformat_open_input()に渡されます。名前が示すように、入力ファイルは「開かれています」。どのように ?

4

2 に答える 2

6

file_openで行われる主なことは次のとおりです。

  • AVFormatContextにメモリを割り当てます。
  • ファイルからデータのprobe_sizeについて読み取ります(入力URL)
  • 入力ファイル形式、入力ファイルのコーデックパラメータを推測しようとします。これは、各デマルチプレクサのread_probe関数ポインタを呼び出すことによって行われます。
  • コーデックコンテキスト、デマックスコンテキスト、I/Oコンテキストを割り当てます。
于 2013-01-03T10:05:02.663 に答える
4

libavformat\utils.cFFmpegで実際に何が起こっているかを調べることができます。

int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
{
    AVFormatContext *s = *ps;
    int ret = 0;
    AVDictionary *tmp = NULL;
    ID3v2ExtraMeta *id3v2_extra_meta = NULL;

    if (!s && !(s = avformat_alloc_context()))
        return AVERROR(ENOMEM);
        // on and on
于 2013-01-03T07:35:10.130 に答える