update plugins/input_rtsp/input_rtsp_node.cpp

This commit is contained in:
sladro 2025-12-16 16:13:55 +08:00
parent 831c47202e
commit 31a8a877d9

View File

@ -41,6 +41,7 @@ public:
height_ = config.ValueOr<int>("height", 1080);
use_ffmpeg_ = config.ValueOr<bool>("use_ffmpeg", false);
use_mpp_ = config.ValueOr<bool>("use_mpp", true);
ffmpeg_force_tcp_ = config.ValueOr<bool>("force_tcp", true);
if (ctx.output_queues.empty()) {
std::cerr << "[input_rtsp] no downstream queue configured for node " << id_ << "\n";
return false;
@ -76,10 +77,10 @@ public:
std::cout << "[input_rtsp] start url=" << url_ << " fps=" << fps_;
#if defined(RK3588_ENABLE_MPP)
if (use_mpp_) std::cout << " (ffmpeg demux + mpp decode)";
else if (use_ffmpeg_) std::cout << " (ffmpeg cpu decode)";
else if (use_ffmpeg_) std::cout << " (ffmpeg cpu decode" << (ffmpeg_force_tcp_ ? ", tcp" : ", udp") << ")";
else std::cout << " (stub)";
#else
if (use_ffmpeg_) std::cout << " (ffmpeg cpu decode)";
if (use_ffmpeg_) std::cout << " (ffmpeg cpu decode" << (ffmpeg_force_tcp_ ? ", tcp" : ", udp") << ")";
else std::cout << " (stub)";
#endif
std::cout << "\n";
@ -125,12 +126,16 @@ private:
int video_stream = -1;
AVRational time_base{1, 1000};
if (avformat_open_input(&fmt_ctx, url_.c_str(), nullptr, nullptr) < 0) {
AVDictionary* opts = nullptr;
if (ffmpeg_force_tcp_) av_dict_set(&opts, "rtsp_transport", "tcp", 0);
if (avformat_open_input(&fmt_ctx, url_.c_str(), nullptr, &opts) < 0) {
std::cerr << "[input_rtsp] avformat_open_input failed: " << url_ << "\n";
av_dict_free(&opts);
Cleanup(fmt_ctx, codec_ctx, pkt, frm);
LoopStub();
return;
}
av_dict_free(&opts);
if (avformat_find_stream_info(fmt_ctx, nullptr) < 0) {
std::cerr << "[input_rtsp] avformat_find_stream_info failed\n";
Cleanup(fmt_ctx, codec_ctx, pkt, frm);
@ -373,12 +378,16 @@ private:
int video_stream = -1;
AVRational time_base{1, 1000};
if (avformat_open_input(&fmt_ctx, url_.c_str(), nullptr, nullptr) < 0) {
AVDictionary* opts = nullptr;
if (ffmpeg_force_tcp_) av_dict_set(&opts, "rtsp_transport", "tcp", 0);
if (avformat_open_input(&fmt_ctx, url_.c_str(), nullptr, &opts) < 0) {
std::cerr << "[input_rtsp] avformat_open_input failed: " << url_ << "\n";
av_dict_free(&opts);
Cleanup(fmt_ctx, nullptr, pkt, nullptr);
LoopStub();
return;
}
av_dict_free(&opts);
if (avformat_find_stream_info(fmt_ctx, nullptr) < 0) {
std::cerr << "[input_rtsp] avformat_find_stream_info failed\n";
Cleanup(fmt_ctx, nullptr, pkt, nullptr);
@ -519,6 +528,7 @@ private:
uint64_t frame_id_ = 0;
bool use_ffmpeg_ = false;
bool use_mpp_ = true;
bool ffmpeg_force_tcp_ = true;
};
REGISTER_NODE(InputRtspNode, "input_rtsp");