diff --git a/src/rtmp_manager.cpp b/src/rtmp_manager.cpp index 30df3da..fd8c312 100644 --- a/src/rtmp_manager.cpp +++ b/src/rtmp_manager.cpp @@ -77,23 +77,31 @@ GstElement* RTMPManager::create_pipeline(const Camera& cam) const std::string live_rtmp = "rtmp://36.153.162.171:19435/" + app + "/" + stream_name + "?vhost=live"; const std::string record_rtmp = "rtmp://127.0.0.1:2935/" + app + "/" + stream_name + "?vhost=record"; - std::string pipeline_str = "v4l2src name=src device=" + cam.device + - " io-mode=dmabuf do-timestamp=true " - " ! video/x-raw,format=NV12," + std::string pipeline_str = "v4l2src device=" + cam.device + + " io-mode=dmabuf " + "! video/x-raw,format=NV12," "width=" + std::to_string(width) + ",height=" + std::to_string(height) + ",framerate=" + std::to_string(fps) + "/1 " - " ! mpph264enc " - "profile=high " + "! queue max-size-buffers=4 leaky=downstream " + "! mpph264enc " + "profile=baseline " // ⭐ 关键:别用 high + "bframes=0 " // ⭐ 关键:禁 B 帧 + "gop=" + + std::to_string(fps) + + " " + "rc-mode=cbr " "bps=" + - std::to_string(bitrate) + " gop=" + std::to_string(fps) + - " rc-mode=cbr " - " header-mode=each-idr " - " ! h264parse config-interval=1 " - " ! queue max-size-buffers=5 max-size-time=0 leaky=downstream " - " ! flvmux streamable=true " - " ! rtmpsink location=\"" + + std::to_string(bitrate) + + " " + "header-mode=each-idr " + "! h264parse " + "config-interval=1 " + "disable-passthrough=true " + "! queue max-size-buffers=5 leaky=downstream " + "! flvmux streamable=true " + "! rtmpsink location=\"" + live_rtmp + "\" sync=false async=false"; GError* error = nullptr;