FFMPEG流媒体RTP:未设置时基

FFMPEG流媒体RTP:未设置时基,ffmpeg,streaming,h.264,rtp,Ffmpeg,Streaming,H.264,Rtp,我正在尝试创建一个小的演示,以获得使用ffmpeg编程流媒体的感觉。我使用的是来自的代码作为基础。我可以编译我的代码,但当我尝试运行它时,总是会出现以下错误: [rtp@0xbeb480]未设置时基 问题是,我已经设置了时基参数。我甚至还尝试为流(以及与流相关联的编解码器)设置它们,尽管据我所知,这不是必需的。这是我的代码中的相关部分: AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264); AVCodecContext* c = avc

我正在尝试创建一个小的演示,以获得使用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\u write\u header”时发生错误。所有可能失败的方法(如avcodec_open2)都会被检查,我只是删除了这些检查以使代码更具可读性

翻阅谷歌和ffmpeg源代码并没有得到任何有用的结果。我觉得这很基本,但我被卡住了。谁能帮我?

试试:

c->time_base = (AVRational) {1, FPS};

您在错误的编解码器上下文中进行设置

avformat\u new\u stream()
创建的流有其自己的内部编解码器上下文,使用
avcodec\u alloc\u context3()
创建的流是不必要的,对
avformat\u write\u header()的工作没有影响

要正确设置变量,请按以下方式设置:

AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264);
struct AVStream* stream = avformat_new_stream(avctx, codec);
stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
stream->codec->flags = CODEC_FLAG_GLOBAL_HEADER;
stream->codec->width = WIDTH;
stream->codec->height = HEIGHT;
stream->codec->time_base = (AVRational){1,FPS};
stream->codec->gop_size = FPS;
stream->codec->bit_rate = BITRATE;

这为我解决了这个特殊的问题,我在这里也添加了另一个答案,我就是这样设置的,虽然如果您使用正确的编解码器上下文,您设置
时间基数的方法可能也会起作用。

抱歉,这没有帮助。