mirror of
https://github.com/hsnks100/liveflow.git
synced 2025-09-27 04:26:24 +08:00
136 lines
2.5 KiB
Go
136 lines
2.5 KiB
Go
package hub
|
|
|
|
import (
|
|
"github.com/deepch/vdk/codec/aacparser"
|
|
)
|
|
|
|
type FrameData struct {
|
|
H264Video *H264Video
|
|
AACAudio *AACAudio
|
|
OPUSAudio *OPUSAudio
|
|
}
|
|
|
|
type H264Video struct {
|
|
PTS int64
|
|
DTS int64
|
|
VideoClockRate uint32
|
|
Data []byte
|
|
SPS []byte
|
|
PPS []byte
|
|
SliceTypes []SliceType
|
|
CodecData []byte
|
|
}
|
|
|
|
func (h *H264Video) RawTimestamp() int64 {
|
|
if h.VideoClockRate == 0 {
|
|
return h.PTS
|
|
} else {
|
|
return int64(float64(h.PTS) / float64(h.VideoClockRate) * 1000)
|
|
}
|
|
}
|
|
|
|
func (h *H264Video) RawPTS() int64 {
|
|
if h.VideoClockRate == 0 {
|
|
return h.PTS
|
|
} else {
|
|
return int64(float64(h.PTS) / float64(h.VideoClockRate/1000.0))
|
|
}
|
|
}
|
|
func (h *H264Video) RawDTS() int64 {
|
|
if h.VideoClockRate == 0 {
|
|
return h.DTS
|
|
} else {
|
|
return int64(float64(h.DTS) / float64(h.VideoClockRate/1000.0))
|
|
}
|
|
}
|
|
|
|
type OPUSAudio struct {
|
|
PTS int64
|
|
DTS int64
|
|
AudioClockRate uint32
|
|
Data []byte
|
|
}
|
|
|
|
func (a *OPUSAudio) RawTimestamp() int64 {
|
|
if a.AudioClockRate == 0 {
|
|
return a.PTS
|
|
} else {
|
|
return int64(float64(a.PTS) / float64(a.AudioClockRate) * 1000)
|
|
}
|
|
}
|
|
|
|
func (a *OPUSAudio) RawPTS() int64 {
|
|
if a.AudioClockRate == 0 {
|
|
return a.PTS
|
|
} else {
|
|
return int64(float64(a.PTS) / float64(a.AudioClockRate/1000.0))
|
|
}
|
|
}
|
|
|
|
func (a *OPUSAudio) RawDTS() int64 {
|
|
if a.AudioClockRate == 0 {
|
|
return a.DTS
|
|
} else {
|
|
return int64(float64(a.DTS) / float64(a.AudioClockRate/1000.0))
|
|
}
|
|
}
|
|
|
|
type AACAudio struct {
|
|
Data []byte
|
|
SequenceHeader bool
|
|
MPEG4AudioConfigBytes []byte
|
|
MPEG4AudioConfig *aacparser.MPEG4AudioConfig
|
|
PTS int64
|
|
DTS int64
|
|
AudioClockRate uint32
|
|
}
|
|
|
|
func (a *AACAudio) RawTimestamp() int64 {
|
|
if a.AudioClockRate == 0 {
|
|
return a.PTS
|
|
} else {
|
|
return int64(float64(a.PTS) / float64(a.AudioClockRate) * 1000)
|
|
}
|
|
}
|
|
|
|
func (a *AACAudio) RawPTS() int64 {
|
|
if a.AudioClockRate == 0 {
|
|
return a.PTS
|
|
} else {
|
|
return int64(float64(a.PTS) / float64(a.AudioClockRate/1000.0))
|
|
}
|
|
}
|
|
|
|
func (a *AACAudio) RawDTS() int64 {
|
|
if a.AudioClockRate == 0 {
|
|
return a.DTS
|
|
} else {
|
|
return int64(float64(a.DTS) / float64(a.AudioClockRate/1000.0))
|
|
}
|
|
}
|
|
|
|
type AudioCodecData struct {
|
|
Timestamp uint32
|
|
Data []byte
|
|
}
|
|
|
|
type VideoCodecData struct {
|
|
Timestamp uint32
|
|
Data []byte
|
|
}
|
|
type MetaData struct {
|
|
Timestamp uint32
|
|
Data []byte
|
|
}
|
|
|
|
type MediaInfo struct {
|
|
VCodec VideoCodecType
|
|
}
|
|
|
|
type VideoCodecType int
|
|
|
|
const (
|
|
H264 VideoCodecType = iota
|
|
VP8
|
|
)
|