mirror of
https://github.com/Monibuca/engine.git
synced 2025-10-07 01:22:51 +08:00
rtp音视频时间戳都减去起始偏移值
This commit is contained in:
2
main.go
2
main.go
@@ -17,7 +17,7 @@ import (
|
|||||||
. "github.com/logrusorgru/aurora"
|
. "github.com/logrusorgru/aurora"
|
||||||
)
|
)
|
||||||
|
|
||||||
const Version = "3.1.2"
|
const Version = "3.1.4"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
config = &struct {
|
config = &struct {
|
||||||
|
79
rtp.go
79
rtp.go
@@ -49,52 +49,60 @@ func (v *RTPVideo) push(payload []byte) {
|
|||||||
if err := v.Unmarshal(payload); err != nil {
|
if err := v.Unmarshal(payload); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
t := v.Timestamp / 90
|
t0 := v.Timestamp
|
||||||
if t < vt.Prev().Value.(*RingItem).Value.(*VideoPack).Timestamp {
|
v.Push = func(payload []byte) {
|
||||||
if vt.WaitIDR.Err() == nil {
|
if err := v.Unmarshal(payload); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var ts TSSlice
|
t1 := (v.Timestamp - t0)/90
|
||||||
//有B帧
|
if t1 < vt.Prev().Value.(*RingItem).Value.(*VideoPack).Timestamp {
|
||||||
tmpVT := v.Stream.NewVideoTrack(0)
|
if vt.WaitIDR.Err() == nil {
|
||||||
tmpVT.ExtraData = v.ExtraData
|
|
||||||
tmpVT.CodecID = v.CodecID
|
|
||||||
tmpVT.revIDR = func() {
|
|
||||||
l := ts.Len()
|
|
||||||
sort.Sort(ts)
|
|
||||||
start := tmpVT.Move(-l)
|
|
||||||
for i := 0; i < l; i++ {
|
|
||||||
vp := start.Value.(*RingItem).Value.(*VideoPack)
|
|
||||||
pack := vt.current()
|
|
||||||
pack.IDR = vp.IDR
|
|
||||||
pack.Timestamp = ts[i]
|
|
||||||
pack.CompositionTime = vp.Timestamp - ts[i]
|
|
||||||
pack.NALUs = vp.NALUs
|
|
||||||
vt.push(pack)
|
|
||||||
start = start.Next()
|
|
||||||
}
|
|
||||||
ts = nil
|
|
||||||
}
|
|
||||||
v.Push = func(payload []byte) {
|
|
||||||
if err := v.Unmarshal(payload); err != nil {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
r := tmpVT.Ring
|
var ts TSSlice
|
||||||
t := v.Timestamp / 90
|
//有B帧
|
||||||
if tmpVT.PushNalu(t, 0, v.Payload); r != tmpVT.Ring {
|
tmpVT := v.Stream.NewVideoTrack(0)
|
||||||
ts = append(ts, t)
|
tmpVT.ExtraData = v.ExtraData
|
||||||
|
tmpVT.CodecID = v.CodecID
|
||||||
|
tmpVT.revIDR = func() {
|
||||||
|
l := ts.Len()
|
||||||
|
sort.Sort(ts)
|
||||||
|
start := tmpVT.Move(-l)
|
||||||
|
for i := 0; i < l; i++ {
|
||||||
|
vp := start.Value.(*RingItem).Value.(*VideoPack)
|
||||||
|
pack := vt.current()
|
||||||
|
pack.IDR = vp.IDR
|
||||||
|
pack.Timestamp = ts[i]
|
||||||
|
pack.CompositionTime = vp.Timestamp - ts[i]
|
||||||
|
pack.NALUs = vp.NALUs
|
||||||
|
vt.push(pack)
|
||||||
|
start = start.Next()
|
||||||
|
}
|
||||||
|
ts = nil
|
||||||
}
|
}
|
||||||
|
v.Push = func(payload []byte) {
|
||||||
|
if err := v.Unmarshal(payload); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r := tmpVT.Ring
|
||||||
|
t := (v.Timestamp - t0) / 90
|
||||||
|
if tmpVT.PushNalu(t, 0, v.Payload); r != tmpVT.Ring {
|
||||||
|
ts = append(ts, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
v.Push(payload)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
v.Push(payload)
|
vt.PushNalu(t1, 0, v.Payload)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
vt.PushNalu(t, 0, v.Payload)
|
v.Push(payload)
|
||||||
}
|
}
|
||||||
func (v *RTPAudio) push(payload []byte) {
|
func (v *RTPAudio) push(payload []byte) {
|
||||||
at := v.AudioTrack
|
at := v.AudioTrack
|
||||||
if err := v.Unmarshal(payload); err != nil {
|
if err := v.Unmarshal(payload); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
startTime := v.Timestamp
|
||||||
switch at.CodecID {
|
switch at.CodecID {
|
||||||
case 10:
|
case 10:
|
||||||
v.Push = func(payload []byte) {
|
v.Push = func(payload []byte) {
|
||||||
@@ -102,7 +110,7 @@ func (v *RTPAudio) push(payload []byte) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, payload = range codec.ParseRTPAAC(v.Payload) {
|
for _, payload = range codec.ParseRTPAAC(v.Payload) {
|
||||||
at.PushRaw(v.Timestamp/90, payload)
|
at.PushRaw((v.Timestamp-startTime)/90, payload)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case 7, 8:
|
case 7, 8:
|
||||||
@@ -110,7 +118,8 @@ func (v *RTPAudio) push(payload []byte) {
|
|||||||
if err := v.Unmarshal(payload); err != nil {
|
if err := v.Unmarshal(payload); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
at.PushRaw(v.Timestamp/8, v.Payload)
|
at.PushRaw((v.Timestamp-startTime)/8, v.Payload)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
v.Push(payload)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user