//https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming
var streamO psync.Map
+// 获取实例的Common
func StreamOCommon(roomid int) (array []c.Common) {
if roomid != -1 { //返回特定房间
if v, ok := streamO.Load(roomid); ok {
return
}
+// 实例操作
func init() {
//使用带tag的消息队列在功能间传递消息
c.C.Danmu_Main_mq.Pull_tag(msgq.FuncMap{
if roomid, ok := data.(int); ok {
if v, ok := streamO.Load(roomid); ok {
if v.(*M4SStream).Status.Islive() {
+ Ass_f("", "", time.Now()) //停止ass
v.(*M4SStream).Stop()
streamO.Delete(roomid)
}
common.Roomid = roomid
tmp.LoadConfig(common, c.C.Log)
streamO.Store(roomid, tmp)
+ Ass_f(tmp.Current_save_path, tmp.Current_save_path+"0", time.Now()) //开始ass
go tmp.Start()
}
} else {
})
}
+// 获取实例的录制状态
func StreamOStatus(roomid int) bool {
v, ok := streamO.Load(roomid)
return ok && (v.(*M4SStream).Status.Islive() || v.(*M4SStream).exitSign.Islive())
}
+// 停止实例
func StreamOStop(roomid int) {
if roomid != -1 { // 针对某房间
if v, ok := streamO.Load(roomid); ok {
Newst_m4s *msgq.Msgq //m4s消息 tag:m4s
first_m4s []byte //m4s起始块
common c.Common //通用配置副本
+ Current_save_path string //明确的直播流保存目录
}
type M4SStream_Config struct {
}
}
t.config.save_path = path + "/"
+ t.Current_save_path = path + "/" + strconv.Itoa(common.Roomid) + "_" + time.Now().Format("2006_01_02_15-04-05-000") + `/`
} else {
t.log.L(`E: `, `直播流保存位置错误`, err)
return
func (t *M4SStream) saveStream() {
// 设置保存路径
- var save_path = t.config.save_path + strconv.Itoa(t.common.Roomid) + "_" + time.Now().Format("2006_01_02_15-04-05-000") + `/`
+ var save_path = t.Current_save_path
// 显示保存位置
if rel, err := filepath.Rel(t.config.save_path, save_path); err == nil {