m3u8 use bufferpool

This commit is contained in:
notch
2020-12-28 12:05:19 +08:00
parent a595aee216
commit 63ec15051b
2 changed files with 15 additions and 6 deletions

View File

@@ -254,10 +254,18 @@ func (muxer *Muxer) isSegmentAbsolutelyOverflow() bool {
return res
}
var m3u8Pool = sync.Pool{
New: func() interface{} {
return bytes.NewBuffer(make([]byte, 0, 512))
},
}
// M3u8 获取 m3u8 播放列表
func (muxer *Muxer) M3u8() ([]byte, error) {
muxer.lastAccessTime = time.Now()
w := &bytes.Buffer{}
w := m3u8Pool.Get().(*bytes.Buffer)
w.Reset()
defer m3u8Pool.Put(w)
muxer.l.RLock()
defer muxer.l.RUnlock()

View File

@@ -25,19 +25,19 @@ type segmentFile interface {
}
type memorySegmentFile struct {
buff *bytes.Buffer
file *bytes.Buffer
w mpegts.FrameWriter
}
func newMemorySegmentFile() segmentFile {
return &memorySegmentFile{
buff: bytes.NewBuffer(nil),
file: bytes.NewBuffer(nil),
}
}
func (mf *memorySegmentFile) open(path string) (err error) {
mf.buff.Reset()
mf.w, err = mpegts.NewWriter(mf.buff)
mf.file.Reset()
mf.w, err = mpegts.NewWriter(mf.file)
return
}
@@ -51,7 +51,7 @@ func (mf *memorySegmentFile) close() (err error) {
}
func (mf *memorySegmentFile) get() (io.Reader, int, error) {
data := mf.buff.Bytes()
data := mf.file.Bytes()
return bytes.NewReader(data), len(data), nil
}
@@ -116,5 +116,6 @@ func (pf *persistentSegmentFile) get() (reader io.Reader, size int, err error) {
}
func (pf *persistentSegmentFile) delete() error {
pf.close()
return os.Remove(pf.path)
}