var AllF = map[string]bool{
"Qtd":true,//Qt弹幕窗口
"Saveflv":true,//保存直播流(默认高清,有cookie默认蓝光)
- /*
- Saveflv需要外部组件
- ffmpeg http://ffmpeg.org/download.html
- */
+ "Ass":true,//Ass弹幕生成,由于时间对应关系,仅开启流保存时生效
"Obs":false,//obs组件(仅录播)
/*
Obs需要外部组件:
obs https://obsproject.com/download
obs-websocket https://github.com/Palakis/obs-websocket/releases
*/
- "Ass":true,//Ass弹幕生成,由于时间对应关系,仅开启流保存时生效
"Autoban":true,//自动封禁(仅提示,未完成)
"Jiezou":true,//带节奏预警,提示弹幕礼仪
"Danmuji":true,//反射型弹幕机,回应弹幕
l := p.Logf().New().Open("danmu.log").Base(-1, "saveflv")
api := F.New_api(c.Roomid)
- retry := 10
- for api.Get_live().Live_status == 1 && retry > 0 {
- retry -= 1
+ for api.Get_live().Live_status == 1 {
c.Live = api.Live
saveflv.path = strconv.Itoa(c.Roomid) + "_" + time.Now().Format("2006_01_02_15:04:05.000")
} else {
Cookie = Cookie[:i] + Cookie[i + d + 1:]
}
- }
+ }
- ST := time.Now()
- done := make(chan struct{})
- go func(){
- select{
- case <-time.After(time.Duration(5) * time.Second):
- l.I("直播流获取")
- Ass_f(saveflv.path, ST)//ass
- case <-done:;
+ {//重试
+ retry := 20
+ for retry > 0 && rr.ResponseCode != 200 {
+ if e := rr.Reqf(p.Rval{
+ Url:c.Live,
+ Retry:10,
+ SleepTime:5,
+ Cookie:Cookie,
+ Timeout:-1,
+ JustResponseCode:true,
+ }); e != nil{l.W(e)}
+ p.Sys().Timeoutf(5)
+ retry -= 1
}
- }()
+ if retry == 0 {continue}
+ }
+
+ Ass_f(saveflv.path, time.Now())
+ l.I("直播流保存到", saveflv.path)
if e := rr.Reqf(p.Rval{
Url:c.Live,
Cookie:Cookie,
SaveToPath:saveflv.path + ".flv",
Timeout:-1,
- }); e != nil{l.E(e)}
-
- close(done)
- if time.Since(ST) < time.Duration(5) * time.Second {//刚开始直播断流
- l.I("重试直播流", retry)
- os.Remove(saveflv.path+".flv")
- p.Sys().Timeoutf(5)
- continue
- }
- l.I("直播流保存到", saveflv.path)
+ }); e != nil{l.W(e)}
+
l.I("结束")
Ass_f("", time.Now())//ass
- if p.Checkfile().IsExist(saveflv.path+".flv"){
- l.I("转码中")
- p.Exec().Run(false, "ffmpeg", "-i", saveflv.path+".flv", "-c", "copy", saveflv.path+".mkv")
- // os.Remove(saveflv.path+".flv")
- }
-
- l.I("转码结束")
+ /*
+ Saveflv需要外部组件
+ ffmpeg http://ffmpeg.org/download.html
+ */
+ // if p.Checkfile().IsExist(saveflv.path+".flv"){
+ // l.I("转码中")
+ // p.Exec().Run(false, "ffmpeg", "-i", saveflv.path+".flv", "-c", "copy", saveflv.path+".mkv")
+ // if p.Checkfile().IsExist(saveflv.path+".mkv"){os.Remove(saveflv.path+".flv")}
+ // }
+
+ // l.I("转码结束")
saveflv.wait.Done()
saveflv.cancel.Done()
}
// res = append(res, pt)
pt1 := cross(s, autoban.buf);
- if pt + pt1 > 0.5 {return false}//历史重复高去除
+ if pt + pt1 > 0.3 {return false}//历史重复高去除
res = append(res, pt, pt1)
}
{
//Msg类型数据处理方法map
var Msg_map = map[string]func(replyF, string) {
+ "MATCH_ROOM_CONF":nil,//赛事房间配置
+ "HOT_ROOM_NOTIFY":nil,//热点房间
+ "MATCH_TEAM_GIFT_RANK":nil,//赛事人气比拼
+ "ACTIVITY_MATCH_GIFT":nil,//赛事礼物
"PK_BATTLE_PRE":nil,//人气pk
"PK_BATTLE_START":nil,//人气pk
"PK_BATTLE_PROCESS":nil,//人气pk
sh = append(sh, "购买了")
case 2:
sh = append(sh, "续费了")
+ case 3:
+ sh = append(sh, "自动续费了")
default:
+ msglog.W(s)
sh = append(sh, op_type)
}
}
--- /dev/null
+{
+ "cmd": "ACTIVITY_MATCH_GIFT",
+ "data": {
+ "action": "match_ing",
+ "status": 1,
+ "detail": {
+ "home": {
+ "ratio": "0.41",
+ "team_id": 664,
+ "score": 1000
+ },
+ "visit": {
+ "ratio": "99.59",
+ "team_id": 663,
+ "score": 240000
+ },
+ "match_id": 2956
+ },
+ "match_tab": {
+ "type": "match",
+ "desc": "\u5bf9\u6297"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "cmd": "HOT_ROOM_NOTIFY",
+ "data": {
+ "ttl": 300,
+ "exit_no_refresh": 1,
+ "random_delay_req": []
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "cmd": "MATCH_ROOM_CONF",
+ "data": {
+ "type": "3",
+ "close_button": "0",
+ "force_push": "0",
+ "button_name": "",
+ "background": "https:\/\/i0.hdslb.com\/bfs\/live\/e766a84d78e01cc82d051351c55ac89b5dc2e6fe.jpg",
+ "conf_id": "7ac321b52b121919e075c10b103256fa",
+ "conf_name": "S10 \u4e3b\u623f\u95f4",
+ "rooms_info": [
+ {
+ "room_id": "7734200",
+ "room_name": "\u4e3b\u623f\u95f4",
+ "live_status": 1
+ },
+ {
+ "room_id": "8016907",
+ "room_name": "\u9ad8\u80fd\u89c2\u8d5b\u56e2",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532177",
+ "room_name": "TES.\u4e0a\u8def",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532179",
+ "room_name": "TES.\u6253\u91ce",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532181",
+ "room_name": "TES.\u4e2d\u8def",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532182",
+ "room_name": "TES.\u4e0b\u8def",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532185",
+ "room_name": "TES.\u8f85\u52a9",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532143",
+ "room_name": "FLY.\u4e0a\u8def",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532159",
+ "room_name": "FLY.\u6253\u91ce",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532163",
+ "room_name": "FLY.\u4e2d\u8def",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532166",
+ "room_name": "FLY.\u4e0b\u8def",
+ "live_status": 1
+ },
+ {
+ "room_id": "22532173",
+ "room_name": "FLY.\u8f85\u52a9",
+ "live_status": 1
+ }
+ ],
+ "season_info": [],
+ "button_link": "",
+ "rooms_color": {
+ "font_color": "#ffffff",
+ "background_color": "#000000",
+ "border_color": "#ffffff"
+ },
+ "state": 0
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "cmd": "MATCH_TEAM_GIFT_RANK",
+ "data": [
+ {
+ "id": 469,
+ "score": 123107,
+ "rank": 1
+ },
+ {
+ "id": 474,
+ "score": 77290,
+ "rank": 2
+ },
+ {
+ "id": 482,
+ "score": 49407,
+ "rank": 3
+ }
+ ]
+}
\ No newline at end of file
"payflow_id": "2009252032523462163948355",
"svga_block": 0
}
+ },
+ {
+ "cmd": "USER_TOAST_MSG",
+ "data": {
+ "op_type": 3,
+ "uid": 34426186,
+ "username": "超心塞的信仰",
+ "guard_level": 3,
+ "is_show": 0,
+ "anchor_show": true,
+ "user_show": true,
+ "toast_msg": "\u003c%超心塞的信仰%\u003e 自动续费了舰长",
+ "num": 1,
+ "price": 138000,
+ "role_name": "舰长",
+ "unit": "月",
+ "start_time": 1601723267,
+ "end_time": 1601723267,
+ "target_guard_count": 16,
+ "color": "#00D1F1",
+ "payflow_id": "2010031907365752161865485",
+ "svga_block": 0
+ }
}
]
\ No newline at end of file
来签名婕光了啊免费
自拍洗造点浅
不穿内騒
+打开看黄色
0123456789
\ No newline at end of file