)
var (
- ActionInitFmp4 pe.Action = `InitFmp4`
- ActionGetIndexFmp4 pe.Action = `GetIndexFmp4`
- ActionSeekFmp4 pe.Action = `SeekFmp4`
- ActionOneFFmp4 pe.Action = `OneFFmp4`
+ fmp4BoxLenSize = 4
+ fmp4BoxNameSize = 4
+)
+
+var (
+ ActionInitFmp4 pe.Action = `InitFmp4`
+ ActionGetIndexFmp4 pe.Action = `GetIndexFmp4`
+ ActionGenFastSeedFmp4 pe.Action = `GenFastSeedFmp4`
+ ActionSeekFmp4 pe.Action = `SeekFmp4`
+ ActionOneFFmp4 pe.Action = `OneFFmp4`
)
var boxs map[string]bool
t.buf.Reset()
haveKeyframe = false
cu = m[0].i
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
if e := check_set_maxT(ts, func(_ timeStamp) error {
cu = m[0].i
return errors.New("skip")
}); e != nil {
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
if keyframeMoof {
if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() {
if e := t.buf.AppendTo(keyframe); e != nil {
- return pe.Join(ErrDealIEBreak.New(), e)
+ return pe.Join(ErrDealIEBreak, e)
}
cu = m[0].i
t.buf.Reset()
}
if haveKeyframe {
if e := t.buf.Append(buf[m[0].i:m[6].e]); e != nil {
- return pe.Join(ErrDealIEBreak.New(), e)
+ return pe.Join(ErrDealIEBreak, e)
}
}
return nil
t.buf.Reset()
haveKeyframe = false
cu = m[0].i
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
switch handlerType {
cu = m[0].i
return errors.New("skip")
}); e != nil {
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
{
t.buf.Reset()
haveKeyframe = false
cu = m[0].i
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
switch handlerType {
cu = m[0].i
return errors.New("skip")
}); e != nil {
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
t.AVTDiff = 0.1
}
if diff := math.Abs(video.getT() - audio.getT()); diff > t.AVTDiff {
- return pe.Join(ErrDealIEBreak.New(), fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
+ return pe.Join(ErrDealIEBreak, fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
// copy(video.data, F.Itob64(int64(audio.getT()*float64(video.timescale))))
}
if keyframeMoof {
if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() {
if e := t.buf.AppendTo(keyframe); e != nil {
- return pe.Join(ErrDealIEBreak.New(), e)
+ return pe.Join(ErrDealIEBreak, e)
}
cu = m[0].i
t.buf.Reset()
}
if haveKeyframe {
if e := t.buf.Append(buf[m[0].i:m[10].e]); e != nil {
- return pe.Join(ErrDealIEBreak.New(), e)
+ return pe.Join(ErrDealIEBreak, e)
}
}
return nil
t.buf.Reset()
haveKeyframe = false
cu = m[0].i
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
switch handlerType {
cu = m[0].i
return errors.New("skip")
}); e != nil {
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
{
t.buf.Reset()
haveKeyframe = false
cu = m[0].i
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
switch handlerType {
cu = m[0].i
return errors.New("skip")
}); e != nil {
- return pe.Join(ErrDealIESkip.New(), e)
+ return pe.Join(ErrDealIESkip, e)
}
}
t.AVTDiff = 0.1
}
if diff := math.Abs(video.getT() - audio.getT()); diff > t.AVTDiff {
- return pe.Join(ErrDealIEBreak.New(), fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
+ return pe.Join(ErrDealIEBreak, fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
// copy(video.data, F.Itob64(int64(audio.getT()*float64(video.timescale))))
}
}
if haveKeyframe {
if e := t.buf.Append(buf[m[0].i:m[10].e]); e != nil {
- return pe.Join(ErrDealIEBreak.New(), e)
+ return pe.Join(ErrDealIEBreak, e)
}
}
return nil
if firstFT == -1 {
firstFT = t
}
- return save(time.Second*time.Duration(t-firstFT), int64(totalRead-buff.Size()+index))
+ return pe.Join(ActionGenFastSeedFmp4, save(time.Second*time.Duration(t-firstFT), int64(totalRead-buff.Size()+index)))
}); e != nil {
- return pe.New(e.Error(), ActionOneFFmp4)
+ return pe.Join(ActionGenFastSeedFmp4, ActionOneFFmp4, e)
} else {
if dropOffset != 0 {
_ = buff.RemoveFront(dropOffset)
func decode(buf []byte, reSyncboxName string) (m []ie, err error) {
var cu int
- for cu < len(buf)-3 {
+ for cu < len(buf)-fmp4BoxLenSize-fmp4BoxNameSize {
boxName, i, e, E := searchBox(buf, &cu)
if E != nil {
if errors.Is(E, io.EOF) {
func searchBox(buf []byte, cu *int) (boxName string, i int, e int, err error) {
i = *cu
- e = i + int(F.Btoi(buf, *cu, 4))
- boxName = string(buf[*cu+4 : *cu+8])
+ e = i + int(F.Btoi(buf, *cu, fmp4BoxLenSize))
+ boxName = string(buf[*cu+fmp4BoxLenSize : *cu+fmp4BoxLenSize+fmp4BoxNameSize])
isPureBoxOrNeedSkip, ok := boxs[boxName]
if !ok {
err = ErrUnkownBox.WithReason("未知包: " + boxName)