Files
lkm/stream/hook_sink.go
2024-07-13 13:53:26 +08:00

61 lines
1.6 KiB
Go

package stream
import (
"github.com/lkmio/avformat/utils"
"github.com/lkmio/lkm/log"
"net/http"
)
func PreparePlaySink(sink Sink) (*http.Response, utils.HookState) {
var response *http.Response
if AppConfig.Hook.IsEnableOnPlay() {
hook, err := Hook(HookEventPlay, sink.UrlValues().Encode(), NewHookPlayEventInfo(sink))
if err != nil {
log.Sugar.Errorf("通知播放事件失败 err:%s sink:%s-%v source:%s", err.Error(), sink.Protocol().ToString(), sink.Id(), sink.SourceId())
return hook, utils.HookStateFailure
}
response = hook
}
source := SourceManager.Find(sink.SourceId())
if source == nil {
log.Sugar.Infof("添加sink到等待队列 sink:%s-%v source:%s", sink.Protocol().ToString(), sink.Id(), sink.SourceId())
{
sink.Lock()
defer sink.UnLock()
if SessionStateClosed == sink.State() {
log.Sugar.Warnf("添加到sink到等待队列失败, sink已经断开链接 %s", sink.Id())
return response, utils.HookStateFailure
} else {
sink.SetState(SessionStateWait)
AddSinkToWaitingQueue(sink.SourceId(), sink)
}
}
} else {
source.AddEvent(SourceEventPlay, sink)
}
return response, utils.HookStateOK
}
func HookPlayDoneEvent(sink Sink) (*http.Response, bool) {
var response *http.Response
if AppConfig.Hook.IsEnableOnPlayDone() {
hook, err := Hook(HookEventPlayDone, sink.UrlValues().Encode(), NewHookPlayEventInfo(sink))
if err != nil {
log.Sugar.Errorf("通知播放结束事件失败 err:%s sink:%s-%v source:%s", err.Error(), sink.Protocol().ToString(), sink.Id(), sink.SourceId())
return hook, false
}
response = hook
}
return response, true
}