zhuizhu 6 月之前
父节点
当前提交
1f54896b30
共有 5 个文件被更改,包括 23 次插入21 次删除
  1. 2 2
      config/networkconfig.cpp
  2. 12 12
      libs/Recorder/encoder_video_nvenc.cpp
  3. 2 0
      libs/Recorder/encoder_video_x264.cpp
  4. 2 2
      libs/Recorder/muxer_ffmpeg.cpp
  5. 5 5
      main.cpp

+ 2 - 2
config/networkconfig.cpp

@@ -94,8 +94,8 @@ void NetworkConfig::initDefaults()
     
     // 流媒体配置 (默认使用RTMP协议)
     m_streamConfig.protocol = StreamProtocol::RTSP;
-    m_streamConfig.host = "127.0.0.1"; // 使用项目中的生产服务器
-    m_streamConfig.port = 554;
+    m_streamConfig.host = "106.55.186.74"; // 使用项目中的生产服务器
+    m_streamConfig.port = 8554;
     m_streamConfig.app = "stream";
     m_streamConfig.streamKey = "V1";
     

+ 12 - 12
libs/Recorder/encoder_video_nvenc.cpp

@@ -49,9 +49,9 @@ int encoder_video_nvenc::init(
         // ffmpeg -h encoder=h264_nvenc show all encoder options
 
         const char *rate_control = "cbr"; // cbr | cqp | vbr | lossless
-        const char *profile = "baseline"; // baseline | main | high |high444p
-        const char *preset = "ultrafast";   // default | slow | medium | fast |
-                                          // hp | hq | bd | 11 | 11hq | 11hp | lossless | losslesshp
+        const char *profile = "high"; // baseline | main | high | high444p
+        const char *preset = "ll";   // NVENC 低延迟预设:ll | llhq | llhp 等
+                                           // hp | hq | bd | 11 | 11hq | 11hp | lossless | losslesshp
 
 #if 0 //USE_CBR
 			av_opt_set_int(_encoder_ctx->priv_data, "cbr", true, 0);
@@ -73,11 +73,11 @@ int encoder_video_nvenc::init(
 
         av_opt_set(_encoder_ctx->priv_data, "profile", profile, 0);
         av_opt_set(_encoder_ctx->priv_data, "preset", preset, 0);
-+        // use NVENC low-latency tune and disable lookahead for minimum latency
-+        av_opt_set(_encoder_ctx->priv_data, "tune", "ll", 0);
-+        av_opt_set_int(_encoder_ctx->priv_data, "rc-lookahead", 0, 0);
-
-        av_opt_set(_encoder_ctx->priv_data, "level", "auto", 0);
+        // NVENC 低延迟优化:开启低延迟tune并关闭lookahead
+        av_opt_set(_encoder_ctx->priv_data, "tune", "ll", 0);
+        av_opt_set_int(_encoder_ctx->priv_data, "rc-lookahead", 0, 0);
+ 
+        av_opt_set(_encoder_ctx->priv_data, "level", "4.1", 0);
         av_opt_set_int(_encoder_ctx->priv_data, "2pass", false, 0);
         av_opt_set_int(_encoder_ctx->priv_data, "gpu", 0, 0);
 
@@ -85,14 +85,14 @@ int encoder_video_nvenc::init(
         _encoder_ctx->height = pic_height;
         _encoder_ctx->time_base.num = 1;
         _encoder_ctx->time_base.den = frame_rate;
-        _encoder_ctx->framerate = {frame_rate, 1};
+        _encoder_ctx->framerate.num = frame_rate;
+        _encoder_ctx->framerate.den = 1;
         _encoder_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
 
         if (key_pic_sec == 0)
-            _encoder_ctx->gop_size = 250;
+            _encoder_ctx->gop_size = 30; // 固定为30帧,与x264一致
         else
-            _encoder_ctx->gop_size = key_pic_sec * _encoder_ctx->time_base.den
-                                     / _encoder_ctx->time_base.num;
+            _encoder_ctx->gop_size = 30; // 固定为30帧,与x264一致
 
         _encoder_ctx->max_b_frames = 0; //NO B Frame
         _encoder_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;

+ 2 - 0
libs/Recorder/encoder_video_x264.cpp

@@ -43,6 +43,8 @@ int encoder_video_x264::init(
     av_dict_set(&options, "x264-params", "keyint=30:min-keyint=30:no-scenecut=1", 0);
     av_dict_set(&options, "profile", "high", 0);
     av_dict_set(&options, "level", "4.1", 0);
+    // 与命令行一致,明确设置CRF为18
+    av_dict_set(&options, "crf", "18", 0);
 
     do {
         _encoder = avcodec_find_encoder(AV_CODEC_ID_H264);

+ 2 - 2
libs/Recorder/muxer_ffmpeg.cpp

@@ -838,13 +838,13 @@ int muxer_ffmpeg::add_audio_stream(const MUX_SETTING_T &setting,
         std::string url_str(output_file);
         if (url_str.find("rtsp://") == 0) {
             // RTSP推流超低延迟参数设置
-            av_dict_set(&opt, "rtsp_transport", "tcp", 0);  // 使用TCP传输,更稳定
-            av_dict_set(&opt, "muxdelay", "0", 0);          // 设置最小复用延迟
             av_dict_set(&opt, "fflags", "+genpts+flush_packets+nobuffer", 0); // 生成PTS、立即刷新包、无缓冲
             av_dict_set(&opt, "max_delay", "0", 0);         // 最小延迟
             av_dict_set(&opt, "tune", "zerolatency", 0);    // 零延迟调优
             av_dict_set(&opt, "buffer_size", "512000", 0);  // 减小缓冲区到512KB
             av_dict_set(&opt, "max_interleave_delta", "0", 0); // 最小交错延迟
+            // 与播放器保持一致,优先使用TCP传输,提升稳定性并与解码端设置对齐
+            av_dict_set(&opt, "rtsp_transport", "tcp", 0);
             al_debug("RTSP output detected, setting ultra-low-latency parameters");
         } else if (url_str.find("rtmp://") == 0) {
             // RTMP推流超低延迟参数设置

+ 5 - 5
main.cpp

@@ -106,13 +106,13 @@ docker run -itd  --name zlmediakit --restart=always
 -v /data/zlmediakit/media/conf:/opt/media/conf
 zlmediakit/zlmediakit:master
 */
-    // MainWindow w;
-    // w.show();
+    MainWindow w;
+    w.show();
 
-    MainPanel MainPanel;
-    MainPanel.show();
+    // MainPanel MainPanel;
+    // MainPanel.show();
 
-    MainPanel.startStreamingTest();
+    // MainPanel.startStreamingTest();
 
     // RecorderWidget testRecorder;
     // testRecorder.show();