From: qydysky <32743305+qydysky@users.noreply.github.com> Date: Sun, 29 Jan 2023 12:27:12 +0000 (+0800) Subject: Improve 录制控制重写 X-Git-Tag: v0.5.11~14 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=f61013315881080b62d2dfb091022e67488fdb69;p=bili_danmu%2F.git Improve 录制控制重写 --- diff --git a/Reply/F.go b/Reply/F.go index a18e314..81523c1 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -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: // 其他房间 diff --git a/Reply/Reply.go b/Reply/Reply.go index 1cba69c..822c661 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -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") diff --git a/cmd/cmd.go b/cmd/cmd.go index ef17ef5..1f17ca9 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -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 }