我正在研究一些C ++项目,该项目依赖于Wi-Fi RAK5206电子板。我正在使用ffmpeg库获取视频和音频流,但遇到了我可以四次启动和停止流的问题,但是当我想第五次启动时,出现错误。错误描述为Invalid data found when processing input
,当我调用avformat_open_input
功能并且需要重新启动电子板,重新连接到Wi-Fi等时会发生。
我通过Wireshark应用程序发现VLC正在工作,并且在调用TEARDOWN
时它正在发送一些BYE数据包。我想知道错误是否取决于他们,因为我没有从我的应用程序发送信息。我如何进行设置以强制ffmpeg发送BYE数据包?
我在rtpenc.h文件中找到了一些声明,当我想连接时可以设置并尝试使用哪些选项,但显然没有成功。我用于设置选项和打开输入的代码:
AVDictionary* stream_opts = 0;
av_dict_set(&stream_opts, "rtpflags", "send_bye", 0);
avformat_open_input(&format_ctx, url.c_str(), NULL, &stream_opts);
请确保您正在从应用程序中调用此av_write_trailer函数。
如果不是,请调试并检查。
/ *编写预告片(如果有)。预告片必须在您之前写好*关闭编写标头时打开的CodecContext;除此以外* av_write_trailer()可能会尝试使用已释放的内存* av_codec_close()。 * /av_write_trailer(oc);