You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/deepch/vdk/av"
|
|
)
|
|
|
|
//Fragment struct
|
|
type Fragment struct {
|
|
Independent bool //Fragment have i-frame (key frame)
|
|
Finish bool //Fragment Ready
|
|
Duration time.Duration //Fragment Duration
|
|
Packets []*av.Packet //Packet Slice
|
|
}
|
|
|
|
//NewFragment open new fragment
|
|
func (element *Segment) NewFragment() *Fragment {
|
|
res := &Fragment{}
|
|
element.Fragment[element.CurrentFragmentID] = res
|
|
return res
|
|
}
|
|
|
|
//GetDuration return fragment dur
|
|
func (element *Fragment) GetDuration() time.Duration {
|
|
return element.Duration
|
|
}
|
|
|
|
//WritePacket to fragment func
|
|
func (element *Fragment) WritePacket(packet *av.Packet) {
|
|
//increase fragment dur
|
|
element.Duration += packet.Duration
|
|
//Independent if have key
|
|
if packet.IsKeyFrame {
|
|
element.Independent = true
|
|
}
|
|
//append packet to slice of packet
|
|
element.Packets = append(element.Packets, packet)
|
|
}
|
|
|
|
//Close fragment block func
|
|
func (element *Fragment) Close() {
|
|
//TODO add callback func
|
|
//finalize fragment
|
|
element.Finish = true
|
|
}
|