want_qn int //直播流清晰度
want_type string //直播流类型
save_as_mp4 bool //直播hls流保存为MP4
- banlance_host bool //直播hls流均衡
+ banlance_host bool //直播hls流故障转移
}
type m4s_link_item struct {
if v, ok := common.K_v.LoadV(`直播hls流保存为MP4`).(bool); ok {
t.config.save_as_mp4 = v
}
- if v, ok := common.K_v.LoadV(`直播hls流均衡`).(bool); ok {
+ if v, ok := common.K_v.LoadV(`直播hls流故障转移`).(bool); ok {
t.config.banlance_host = v
}
if v, ok := common.K_v.LoadV(`直播流清晰度`).(float64); ok {
link.status = 1 // 设置切片状态为正在下载
- // 均衡负载
+ // 故障转移
if link_url, e := url.Parse(link.Url); e == nil {
if t.stream_hosts.Len() != 1 {
- t.stream_hosts.Range(func(key, _ interface{}) bool {
- // 故障转移
- if link.status == 3 && link_url.Host == key.(string) {
- return true
+ t.stream_hosts.Range(func(key, v interface{}) bool {
+ if link.status == 3 {
+ if link_url.Host == key.(string) {
+ t.stream_hosts.Store(key, false)
+ return true
+ } else if v != nil {
+ return true
+ } else {
+ link_url.Host = key.(string)
+ return false
+ }
+ }
+
+ if v != nil {
+ t.stream_hosts.Store(key, nil)
}
- // 随机
- link_url.Host = key.(string)
return false
})
}
continue
}
- // 设置å\9d\87è¡¡è´\9fè½½
+ // 设置å\85¨é\83¨æ\9c\8då\8a¡
for _, v := range t.common.Live {
if url_struct, e := url.Parse(v); e == nil {
t.stream_hosts.Store(url_struct.Hostname(), nil)
}
- if !t.config.banlance_host {
- break
- }
}
// 保存流