]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve 录制控制重写
authorqydysky <32743305+qydysky@users.noreply.github.com>
Sun, 29 Jan 2023 12:27:12 +0000 (20:27 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Sun, 29 Jan 2023 12:27:12 +0000 (20:27 +0800)
Reply/F.go
Reply/Reply.go
cmd/cmd.go

index a18e314a4a55eb8210a1221f44e1149f19b06afb..81523c176a69a570d70a0c8dfeaf575228ab6f9f 100644 (file)
@@ -282,57 +282,6 @@ type SavestreamO struct {
        IsRec  bool
 }
 
-// 实例操作
-func init() {
-       //使用带tag的消息队列在功能间传递消息
-       c.C.Danmu_Main_mq.Pull_tag(msgq.FuncMap{
-               `savestream`: func(data interface{}) bool {
-                       if item, ok := data.(SavestreamO); ok {
-                               if v, ok := streamO.Load(item.Roomid); item.IsRec && !ok {
-                                       var (
-                                               tmp    = new(M4SStream)
-                                               common = c.C
-                                       )
-                                       common.Roomid = item.Roomid
-                                       tmp.LoadConfig(common, c.C.Log)
-                                       //录制回调,关于ass
-                                       tmp.Callback_startRec = func(ms *M4SStream) error {
-                                               StartRecDanmu(ms.Current_save_path + "0.csv")
-                                               Ass_f(ms.Current_save_path, ms.Current_save_path+"0", time.Now()) //开始ass
-                                               return nil
-                                       }
-                                       tmp.Callback_stopRec = func(_ *M4SStream) {
-                                               StopRecDanmu()
-                                               Ass_f("", "", time.Now()) //停止ass
-                                       }
-                                       //实例回调,避免重复录制
-                                       tmp.Callback_start = func(ms *M4SStream) error {
-                                               //流服务添加
-                                               if _, ok := streamO.LoadOrStore(ms.common.Roomid, tmp); ok {
-                                                       return fmt.Errorf("已存在此直播间(%d)录制", ms.common.Roomid)
-                                               }
-                                               return nil
-                                       }
-                                       tmp.Callback_stop = func(ms *M4SStream) {
-                                               streamO.Delete(ms.common.Roomid) //流服务去除
-                                       }
-                                       tmp.Start()
-                               } else if !item.IsRec && ok {
-                                       if v.(*M4SStream).Status.Islive() {
-                                               v.(*M4SStream).Stop()
-                                               streamO.Delete(item.Roomid)
-                                       }
-                               } else if !ok {
-                                       flog.L(`W: `, `未录制 `+strconv.Itoa(item.Roomid)+` 不能停止`)
-                               } else {
-                                       flog.L(`W: `, `已录制 `+strconv.Itoa(item.Roomid)+` 不能重复录制`)
-                               }
-                       }
-                       return false
-               },
-       })
-}
-
 // 获取实例的录制状态
 func StreamOStatus(roomid int) (Islive bool) {
        v, ok := streamO.Load(roomid)
@@ -342,6 +291,7 @@ func StreamOStatus(roomid int) (Islive bool) {
 // 开始实例
 func StreamOStart(roomid int) {
        if StreamOStatus(roomid) {
+               flog.L(`W: `, `已录制 `+strconv.Itoa(roomid)+` 不能重复录制`)
                return
        }
        var (
@@ -375,6 +325,10 @@ func StreamOStart(roomid int) {
 }
 
 // 停止实例
+//
+// -2 其他房间
+// -1 所有房间
+// 针对某房间
 func StreamOStop(roomid int) {
        switch roomid {
        case -2: // 其他房间
index 1cba69cfd786e315d8ea13d91b8e6d0c505443bf..822c66148309d4fcae32feeec5ebc5f5033acc0f 100644 (file)
@@ -700,7 +700,7 @@ func (replyF) preparing(s string) {
                msglog.L(`E: `, err)
                return
        } else {
-               { //附加功能 obs结束 `savestream`结束
+               { //附加功能 obs结束 savestream结束
                        Obs_R(false)
                        Obsf(false)
                        go ShowRevf()
@@ -737,10 +737,7 @@ func (replyF) live(s string) {
                        if v, ok := c.C.K_v.LoadV(`仅保存当前直播间流`).(bool); ok && v {
                                StreamOStop(-2) //停止其他房间录制
                        }
-                       c.C.Danmu_Main_mq.Push_tag(`savestream`, SavestreamO{
-                               Roomid: type_item.Roomid,
-                               IsRec:  true,
-                       })
+                       StreamOStart(c.C.Roomid)
                }()
 
                Gui_show(Itos([]interface{}{"房间", type_item.Roomid, "开播了"}), "0room")
index ef17ef5311994c2c8edba06eab23dc80beb47e83..1f17ca9400dab078452ba8da72dd99a1945e09be 100644 (file)
@@ -62,18 +62,20 @@ func Cmd() {
                                                continue
                                        }
                                        if room, err := strconv.Atoi(inputs[4:]); err == nil {
-                                               c.C.Danmu_Main_mq.Push_tag(`savestream`, reply.SavestreamO{
-                                                       Roomid: room,
-                                                       IsRec:  !reply.StreamOStatus(room),
-                                               })
+                                               if reply.StreamOStatus(room) {
+                                                       reply.StreamOStop(room)
+                                               } else {
+                                                       reply.StreamOStart(room)
+                                               }
                                                continue
                                        }
                                        cmdlog.L(`W: `, "输入错误", inputs)
                                } else {
-                                       c.C.Danmu_Main_mq.Push_tag(`savestream`, reply.SavestreamO{
-                                               Roomid: c.C.Roomid,
-                                               IsRec:  !reply.StreamOStatus(c.C.Roomid),
-                                       })
+                                       if reply.StreamOStatus(c.C.Roomid) {
+                                               reply.StreamOStop(c.C.Roomid)
+                                       } else {
+                                               reply.StreamOStart(c.C.Roomid)
+                                       }
                                }
                                continue
                        }