mirror of https://bitbucket.org/ausocean/av.git
Merged in write-psi-by-time (pull request #128)
stream/mts/encoder.go: writing psi based on time interval Approved-by: Alan Noble <anoble@gmail.com>
This commit is contained in:
commit
3f74b76eee
|
@ -122,7 +122,7 @@ var (
|
|||
)
|
||||
|
||||
const (
|
||||
psiSndCnt = 7
|
||||
psiInterval = 1 * time.Second
|
||||
)
|
||||
|
||||
// timeLocation holds time and location data
|
||||
|
@ -199,9 +199,9 @@ type Encoder struct {
|
|||
tsSpace [PacketSize]byte
|
||||
pesSpace [pes.MaxPesSize]byte
|
||||
|
||||
psiCount int
|
||||
|
||||
continuity map[int]byte
|
||||
|
||||
psiLastTime time.Time
|
||||
}
|
||||
|
||||
// NewEncoder returns an Encoder with the specified frame rate.
|
||||
|
@ -233,12 +233,15 @@ const (
|
|||
// generate handles the incoming data and generates equivalent mpegts packets -
|
||||
// sending them to the output channel.
|
||||
func (e *Encoder) Encode(nalu []byte) error {
|
||||
if e.psiCount <= 0 {
|
||||
now := time.Now()
|
||||
if now.Sub(e.psiLastTime) > psiInterval {
|
||||
err := e.writePSI()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.psiLastTime = now
|
||||
}
|
||||
|
||||
// Prepare PES data.
|
||||
pesPkt := pes.Packet{
|
||||
StreamID: streamID,
|
||||
|
@ -269,7 +272,6 @@ func (e *Encoder) Encode(nalu []byte) error {
|
|||
pusi = false
|
||||
}
|
||||
_, err := e.dst.Write(pkt.Bytes(e.tsSpace[:PacketSize]))
|
||||
e.psiCount--
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -318,7 +320,6 @@ func (e *Encoder) writePSI() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.psiCount = psiSndCnt
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue