ffmpegを使ってプログラムでストリーミングする感覚を得るために、小さなデモを作成しようとしています。私はこの質問のコードを基礎として使用しています。コードをコンパイルすることはできますが、実行しようとすると、常に次のエラーが発生します。
[rtp@0xbeb480]タイムベースが設定されていません
問題は、タイムベースパラメータを設定したことです。ストリーム(およびストリームに関連付けられたコーデック)にもそれらを設定しようとしましたが、私が理解している限り、これは必要ではないはずです。これは私のコードの関連セクションです:
AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext* c = avcodec_alloc_context3(codec);
c->pix_fmt = AV_PIX_FMT_YUV420P;
c->flags = CODEC_FLAG_GLOBAL_HEADER;
c->width = WIDTH;
c->height = HEIGHT;
c->time_base.den = FPS;
c->time_base.num = 1;
c->gop_size = FPS;
c->bit_rate = BITRATE;
avcodec_open2(c, codec, NULL);
struct AVStream* stream = avformat_new_stream(avctx, codec);
// TODO: causes an error
avformat_write_header(avctx, NULL);
最後の方で「avformat_write_header」を呼び出すとエラーが発生します。失敗する可能性のあるすべてのメソッド(avcodec_open2など)がチェックされます。コードを読みやすくするために、チェックを削除しました。
グーグルとffmpegのソースコードを掘り下げても、有用な結果は得られませんでした。本当に基本的なことだと思いますが、行き詰まっています。誰が私を助けられるか?