代码拉取完成,页面将自动刷新
package videostream
import (
"log"
"time"
"github.com/deepch/vdk/av"
"github.com/deepch/vdk/format/mp4f"
"github.com/gin-gonic/gin"
"golang.org/x/net/websocket"
)
func HttpServer() {
router := gin.Default()
gin.SetMode(gin.ReleaseMode)
router.GET("/ws/:suuid", func(c *gin.Context) {
handler := websocket.Handler(WS)
handler.ServeHTTP(c.Writer, c.Request)
})
err := router.Run(Config.Server.HTTPPort)
if err != nil {
log.Fatalln(err)
}
}
func WS(ws *websocket.Conn) {
defer ws.Close()
suuid := ws.Request().FormValue("suuid")
log.Println("Request", suuid)
if !Config.ext(suuid) {
log.Println("Stream Not Found")
return
}
Config.RunIFNotRun(suuid)
ws.SetWriteDeadline(time.Now().Add(5 * time.Second))
cuuid, ch := Config.clAd(suuid)
defer Config.clDe(suuid, cuuid)
codecs := Config.coGe(suuid)
if codecs == nil {
log.Println("Codecs Error")
return
}
for i, codec := range codecs {
if codec.Type().IsAudio() && codec.Type() != av.AAC {
log.Println("Track", i, "Audio Codec Work Only AAC")
}
}
muxer := mp4f.NewMuxer(nil)
err := muxer.WriteHeader(codecs)
if err != nil {
log.Println("muxer.WriteHeader", err)
return
}
meta, init := muxer.GetInit(codecs)
err = websocket.Message.Send(ws, append([]byte{9}, meta...))
if err != nil {
log.Println("websocket.Message.Send", err)
return
}
err = websocket.Message.Send(ws, init)
if err != nil {
return
}
var start bool
go func() {
for {
var message string
err := websocket.Message.Receive(ws, &message)
if err != nil {
ws.Close()
return
}
}
}()
noVideo := time.NewTimer(10 * time.Second)
var timeLine = make(map[int8]time.Duration)
for {
select {
case <-noVideo.C:
log.Println("noVideo")
return
case pck := <-ch:
if pck.IsKeyFrame {
noVideo.Reset(10 * time.Second)
start = true
}
if !start {
continue
}
timeLine[pck.Idx] += pck.Duration
pck.Time = timeLine[pck.Idx]
ready, buf, _ := muxer.WritePacket(pck, false)
if ready {
err = ws.SetWriteDeadline(time.Now().Add(10 * time.Second))
if err != nil {
return
}
err := websocket.Message.Send(ws, buf)
if err != nil {
return
}
}
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。