mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-10-04 20:22:41 +08:00

- Refactor frame converter implementation - Update mp4 track to use ICodex - General refactoring and code improvements 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
36 lines
924 B
Go
36 lines
924 B
Go
package mpegps
|
|
|
|
import (
|
|
mpegts "m7s.live/v5/pkg/format/ts"
|
|
"m7s.live/v5/pkg/util"
|
|
)
|
|
|
|
type MpegpsPESFrame struct {
|
|
StreamType byte // Stream type (e.g., video, audio)
|
|
mpegts.MpegPESHeader
|
|
}
|
|
|
|
func (frame *MpegpsPESFrame) WritePESPacket(payload util.Memory, allocator *util.RecyclableMemory) (err error) {
|
|
frame.DataAlignmentIndicator = 1
|
|
|
|
pesReader := payload.NewReader()
|
|
var outputMemory util.Buffer = allocator.NextN(PSPackHeaderSize)
|
|
outputMemory.Reset()
|
|
MuxPSHeader(&outputMemory)
|
|
for pesReader.Length > 0 {
|
|
currentPESPayload := min(pesReader.Length, MaxPESPayloadSize)
|
|
var pesHeadItem util.Buffer
|
|
pesHeadItem, err = frame.WritePESHeader(currentPESPayload)
|
|
if err != nil {
|
|
return
|
|
}
|
|
copy(allocator.NextN(pesHeadItem.Len()), pesHeadItem)
|
|
// 申请输出缓冲
|
|
outputMemory = allocator.NextN(currentPESPayload)
|
|
pesReader.Read(outputMemory)
|
|
frame.DataAlignmentIndicator = 0
|
|
}
|
|
|
|
return nil
|
|
}
|