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)
// 开始实例
func StreamOStart(roomid int) {
if StreamOStatus(roomid) {
+ flog.L(`W: `, `已录制 `+strconv.Itoa(roomid)+` 不能重复录制`)
return
}
var (
}
// 停止实例
+//
+// -2 其他房间
+// -1 所有房间
+// 针对某房间
func StreamOStop(roomid int) {
switch roomid {
case -2: // 其他房间
msglog.L(`E: `, err)
return
} else {
- { //附加功能 obs结束 `savestream`结束
+ { //附加功能 obs结束 savestream结束
Obs_R(false)
Obsf(false)
go ShowRevf()
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")
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
}