mirror of
https://github.com/aler9/gortsplib
synced 2025-11-02 11:24:05 +08:00
remove h264 decoding and re-encoding (#144)
* stop re-encoding H264 * stop decoding H264 * improve tests
This commit is contained in:
@@ -216,14 +216,15 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
case <-sc.session.ctx.Done():
|
||||
}
|
||||
|
||||
var processFunc func(int, bool, []byte) error
|
||||
var processFunc func(*ServerSessionSetuppedTrack, bool, []byte) error
|
||||
|
||||
if sc.session.state == ServerSessionStatePlay {
|
||||
processFunc = func(trackID int, isRTP bool, payload []byte) error {
|
||||
processFunc = func(track *ServerSessionSetuppedTrack, isRTP bool, payload []byte) error {
|
||||
if !isRTP {
|
||||
if len(payload) > maxPacketSize {
|
||||
return fmt.Errorf("payload size (%d) is greater than maximum allowed (%d)",
|
||||
len(payload), maxPacketSize)
|
||||
onDecodeError(sc.session, fmt.Errorf("RTCP packet size (%d) is greater than maximum allowed (%d)",
|
||||
len(payload), maxPacketSize))
|
||||
return nil
|
||||
}
|
||||
|
||||
packets, err := rtcp.Unmarshal(payload)
|
||||
@@ -235,7 +236,7 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
for _, pkt := range packets {
|
||||
h.OnPacketRTCP(&ServerHandlerOnPacketRTCPCtx{
|
||||
Session: sc.session,
|
||||
TrackID: trackID,
|
||||
TrackID: track.id,
|
||||
Packet: pkt,
|
||||
})
|
||||
}
|
||||
@@ -247,7 +248,7 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
} else {
|
||||
tcpRTPPacketBuffer := newRTPPacketMultiBuffer(uint64(sc.s.ReadBufferCount))
|
||||
|
||||
processFunc = func(trackID int, isRTP bool, payload []byte) error {
|
||||
processFunc = func(track *ServerSessionSetuppedTrack, isRTP bool, payload []byte) error {
|
||||
if isRTP {
|
||||
pkt := tcpRTPPacketBuffer.next()
|
||||
err := pkt.Unmarshal(payload)
|
||||
@@ -255,28 +256,19 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
return err
|
||||
}
|
||||
|
||||
out, err := sc.session.setuppedTracks[trackID].cleaner.Process(pkt)
|
||||
if err != nil {
|
||||
onDecodeError(sc.session, err)
|
||||
// do not return
|
||||
}
|
||||
|
||||
if h, ok := sc.s.Handler.(ServerHandlerOnPacketRTP); ok {
|
||||
for _, entry := range out {
|
||||
h.OnPacketRTP(&ServerHandlerOnPacketRTPCtx{
|
||||
Session: sc.session,
|
||||
TrackID: trackID,
|
||||
Packet: entry.Packet,
|
||||
PTSEqualsDTS: entry.PTSEqualsDTS,
|
||||
H264NALUs: entry.H264NALUs,
|
||||
H264PTS: entry.H264PTS,
|
||||
})
|
||||
}
|
||||
h.OnPacketRTP(&ServerHandlerOnPacketRTPCtx{
|
||||
Session: sc.session,
|
||||
TrackID: track.id,
|
||||
Packet: pkt,
|
||||
PTSEqualsDTS: ptsEqualsDTS(track.track, pkt),
|
||||
})
|
||||
}
|
||||
} else {
|
||||
if len(payload) > maxPacketSize {
|
||||
return fmt.Errorf("payload size (%d) is greater than maximum allowed (%d)",
|
||||
len(payload), maxPacketSize)
|
||||
onDecodeError(sc.session, fmt.Errorf("RTCP packet size (%d) is greater than maximum allowed (%d)",
|
||||
len(payload), maxPacketSize))
|
||||
return nil
|
||||
}
|
||||
|
||||
packets, err := rtcp.Unmarshal(payload)
|
||||
@@ -285,7 +277,7 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
}
|
||||
|
||||
for _, pkt := range packets {
|
||||
sc.session.onPacketRTCP(trackID, pkt)
|
||||
sc.session.onPacketRTCP(track.id, pkt)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,8 +305,8 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
}
|
||||
|
||||
// forward frame only if it has been set up
|
||||
if trackID, ok := sc.session.tcpTracksByChannel[channel]; ok {
|
||||
err := processFunc(trackID, isRTP, twhat.Payload)
|
||||
if track, ok := sc.session.tcpTracksByChannel[channel]; ok {
|
||||
err := processFunc(track, isRTP, twhat.Payload)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user