首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFmpeg - RTCP数据包

FFmpeg - RTCP数据包
EN

Stack Overflow用户
提问于 2019-10-20 20:09:13
回答 2查看 250关注 0票数 0

我正在做一些依赖Wi-Fi RAK5206电子板的C++项目。我正在使用ffmpeg库来获取视频流和音频流,我有问题,我可以启动和停止流四次,但当我想启动第五次时,我得到错误。错误描述是Invalid data found when processing input,当我调用avformat_open_input函数并需要重新启动电子板、重新连接到Wi-Fi等时,就会发生这种情况。

我通过Wireshark应用程序了解到VLC正在工作,并且在调用TEARDOWN时它正在发送一些BYE数据包。我想知道错误是否与他们有关,因为我的应用程序没有发送。如何设置强制ffmpeg发送BYE数据包?

我在rtpenc.h文件中发现了一些声明,当我想要连接时,可以设置和尝试这些选项,但显然没有成功。我用来设置选项和打开输入的代码:

代码语言:javascript
复制
AVDictionary* stream_opts = 0;
av_dict_set(&stream_opts, "rtpflags", "send_bye", 0);
avformat_open_input(&format_ctx, url.c_str(), NULL, &stream_opts);
EN

回答 2

Stack Overflow用户

发布于 2019-10-21 04:54:22

确保从应用程序中调用此av_write_trailer函数。

如果没有,请调试并检查它。

代码语言:javascript
复制
/* Write the trailer, if any. The trailer must be written before you
     * close the CodecContexts open when you wrote the header; otherwise
     * av_write_trailer() may try to use memory that was freed on
     * av_codec_close(). */
    av_write_trailer(oc);

来自ffmpeg源的函数调用流代码片段:

代码语言:javascript
复制
    av_write_trailer -> 
    ....
    ret = s->oformat->write_trailer(s);
    } else {
        s->oformat->write_trailer(s);
    }
    ...
    .write_trailer  = rtp_write_trailer  -> 
    ...
    if (s1->pb && (s->flags & FF_RTP_FLAG_SEND_BYE))
       rtcp_send_sr(s1, ff_ntp_time(), 1)
票数 0
EN

Stack Overflow用户

发布于 2019-10-29 16:38:04

解决了向AVFormatContext对象的标志添加标志16 (二进制: 10000)的问题。

代码语言:javascript
复制
formatCtx->flags = formatCtx->flags | 16;

根据rtpenc.h的说法

代码语言:javascript
复制
#define FF_RTP_FLAG_SEND_BYE  16
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58472846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档