无音频

This commit is contained in:
cxh 2025-11-26 09:44:56 +08:00
parent 9cfc4f2a8a
commit 364ee4c81a

View File

@ -77,34 +77,60 @@ GstElement* RTMPManager::create_pipeline(const Camera& cam)
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 "
// 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=\"" +
// // --- 分支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 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 "
// ------ 分支1live ------
"t. ! queue max-size-buffers=5 leaky=downstream "
" ! flvmux streamable=true name=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=\"" +
// ------ 分支2record ------
"t. ! queue max-size-buffers=5 leaky=downstream "
" ! flvmux streamable=true name=mux_record "
" ! rtmpsink location=\"" +
record_rtmp +
"\" sync=false async=false "
// --- 可选第三分支AI/检测 ---
// ------ 分支3AI ------
"t. ! queue ! fakesink sync=false";
GError* error = nullptr;