feat(video): enhance video frame handling with atomic reference counting and memory management

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
This commit is contained in:
luckfox-eng29
2026-05-15 18:46:51 +08:00
parent 40f5af2120
commit 2a2890e7b3
5 changed files with 95 additions and 29 deletions

5
web.go
View File

@@ -942,20 +942,23 @@ func handleVideoStream(c *gin.Context) {
for {
select {
case data, ok := <-ch:
case frame, ok := <-ch:
if !ok {
logger.Info().Int("total_frames", frameCount).Msg("video broadcaster channel closed")
return
}
data := frame.Data()
frameCount++
if frameCount == 1 {
logger.Info().Int("size", len(data)).Msg("first video frame received")
}
if _, err := c.Writer.Write(data); err != nil {
logger.Warn().Err(err).Int("total_frames", frameCount).Msg("error writing video data")
frame.Release()
return
}
c.Writer.Flush()
frame.Release()
case <-ctx.Done():
logger.Info().Int("total_frames", frameCount).Msg("client disconnected")
return