diff --git a/src/Common/MediaSource.h b/src/Common/MediaSource.h
index 36a0ea5..f3d6e14 100644
--- a/src/Common/MediaSource.h
+++ b/src/Common/MediaSource.h
@@ -126,9 +126,9 @@ public:
     // 该流无人观看
     void onNoneReader();
     // 开启或关闭录制
-    bool setupRecord(Recorder::type type, bool start, const string &custom_path);
+    virtual bool setupRecord(Recorder::type type, bool start, const string &custom_path);
     // 获取录制状态
-    bool isRecording(Recorder::type type);
+    virtual bool isRecording(Recorder::type type);
 
     // 同步查找流
     static Ptr find(const string &schema, const string &vhost, const string &app, const string &id, bool bMake = true) ;
diff --git a/src/Rtmp/RtmpMediaSourceImp.h b/src/Rtmp/RtmpMediaSourceImp.h
index e3c7496..954180b 100644
--- a/src/Rtmp/RtmpMediaSourceImp.h
+++ b/src/Rtmp/RtmpMediaSourceImp.h
@@ -80,6 +80,33 @@ public:
     }
 
     /**
+     * 设置录制状态
+     * @param type 录制类型
+     * @param start 开始或停止
+     * @param custom_path 开启录制时,指定自定义路径
+     * @return 是否设置成功
+     */
+    bool setupRecord(Recorder::type type, bool start, const string &custom_path) override{
+        if(_muxer){
+            return _muxer->setupRecord(*this,type, start, custom_path);
+        }
+        return RtmpMediaSource::setupRecord(type, start, custom_path);
+    }
+
+    /**
+     * 获取录制状态
+     * @param type 录制类型
+     * @return 录制状态
+     */
+    bool isRecording(Recorder::type type) override{
+        if(_muxer){
+            return _muxer->isRecording(*this,type);
+        }
+        return RtmpMediaSource::isRecording(type);
+    }
+
+
+    /**
      * 设置协议转换
      * @param enableRtsp 是否转换成rtsp
      * @param enableHls  是否转换成hls
diff --git a/src/Rtsp/RtspMediaSourceImp.h b/src/Rtsp/RtspMediaSourceImp.h
index 5791323..495158f 100644
--- a/src/Rtsp/RtspMediaSourceImp.h
+++ b/src/Rtsp/RtspMediaSourceImp.h
@@ -71,6 +71,33 @@ public:
     }
 
     /**
+     * 设置录制状态
+     * @param type 录制类型
+     * @param start 开始或停止
+     * @param custom_path 开启录制时,指定自定义路径
+     * @return 是否设置成功
+     */
+    bool setupRecord(Recorder::type type, bool start, const string &custom_path) override{
+        if(_muxer){
+            return _muxer->setupRecord(*this,type, start, custom_path);
+        }
+        return RtspMediaSource::setupRecord(type, start, custom_path);
+    }
+
+    /**
+     * 获取录制状态
+     * @param type 录制类型
+     * @return 录制状态
+     */
+    bool isRecording(Recorder::type type) override{
+        if(_muxer){
+            return _muxer->isRecording(*this,type);
+        }
+        return RtspMediaSource::isRecording(type);
+    }
+
+
+    /**
      * 设置协议转换
      * @param enableRtmp 是否转换成rtmp
      * @param enableHls  是否转换成hls