diff --git a/src/rtmp_manager.cpp b/src/rtmp_manager.cpp index f4b9d32..aa9b5f2 100644 --- a/src/rtmp_manager.cpp +++ b/src/rtmp_manager.cpp @@ -77,53 +77,25 @@ 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"; - // 双路推流管线:一份流编码后 tee 分支分别送往两个 flvmux+rtmpsink - // std::string pipeline_str = - // "v4l2src name=src device=" + cam.device + - // " ! " - // "video/x-raw,format=NV12,width=" + - // std::to_string(width) + ",height=" + std::to_string(height) + ",framerate=" + std::to_string(fps) + - // "/1 ! " - // "mpph264enc bps=" + - // std::to_string(bitrate) + " gop=" + std::to_string(fps) + - // " rc-mode=cbr ! " - // "h264parse ! tee name=t " - - // // --- 分支1:低延时远控 SRS --- - // "t. ! queue max-size-buffers=5 leaky=downstream ! " - // "flvmux streamable=true name=mux_live " - // "audiotestsrc wave=silence ! audioconvert ! audioresample ! voaacenc ! aacparse ! mux_live. " - // "mux_live. ! rtmpsink location=\"" + - // live_rtmp + - // "\" sync=false async=false " - - // // --- 分支2:录像 SRS --- - // "t. ! queue max-size-buffers=5 leaky=downstream ! " - // "flvmux streamable=true name=mux_record " - // "audiotestsrc wave=silence ! audioconvert ! audioresample ! voaacenc ! aacparse ! mux_record. " - // "mux_record. ! rtmpsink location=\"" + - // record_rtmp + - // "\" sync=false async=false " - - // // --- 可选第三分支:AI/检测 --- - // "t. ! queue ! fakesink sync=false"; + std::string cmd = "v4l2-ctl -d " + cam.device + " --set-fmt-video=width=" + std::to_string(width) + + ",height=" + std::to_string(height) + ",pixelformat=NV12"; + system(cmd.c_str()); std::string pipeline_str = "v4l2src name=src device=" + cam.device + - " ! video/x-raw,format=NV12 " - " ! videoconvert " - " ! videoscale " - " ! video/x-raw,width=" + + " io-mode=dmabuf " + " ! video/x-raw,format=NV12," + "width=" + std::to_string(width) + ",height=" + std::to_string(height) + ",framerate=" + std::to_string(fps) + "/1 " - " ! videoconvert " " ! mpph264enc " + "profile=high " "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 leaky=downstream " + " ! queue max-size-buffers=5 max-size-time=0 leaky=downstream " " ! flvmux streamable=true " " ! rtmpsink location=\"" + live_rtmp + "\" sync=false async=false";