mirror of https://bitbucket.org/ausocean/av.git
working on flv
This commit is contained in:
parent
1a083d3059
commit
2bb1d4cfe0
|
@ -0,0 +1,46 @@
|
||||||
|
package flv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"../tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
headerLength = 72
|
||||||
|
version = 0x01
|
||||||
|
)
|
||||||
|
|
||||||
|
type Header struct {
|
||||||
|
audioFlag bool
|
||||||
|
videoFlag bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Header) toByteSlice() []byte {
|
||||||
|
output = make([]byte, 0, headerLength)
|
||||||
|
output = append(output, []byte{ 0x46, 0x4C, 0x56,
|
||||||
|
version,
|
||||||
|
0x00 | tools.boolToByte(h.audioFlag) << 3 | tools.boolToByte(h.videoFlag),
|
||||||
|
0x00, 0x00, 0x00, byte(72),
|
||||||
|
}...)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoTag struct {
|
||||||
|
prevTagSize uint32
|
||||||
|
tagType uint
|
||||||
|
dataSize uint32
|
||||||
|
timeStamp uint32
|
||||||
|
timestampExtended uint32
|
||||||
|
data []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *VideoTag) toByteSlice() (output []byte) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
type AudioTag struct {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *AudioTage) toByteSlice() (output []byte) {
|
||||||
|
|
||||||
|
}
|
|
@ -1,3 +1,51 @@
|
||||||
type FLVGenerator struct {
|
package generator
|
||||||
|
|
||||||
|
type flvGenerator struct {
|
||||||
|
fps uint
|
||||||
|
inputChan chan []byte
|
||||||
|
outputChan chan []byte
|
||||||
|
headerChan []
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *flvGenerator)GetInputChan() chan []byte {
|
||||||
|
return g.inputChan
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *flvGenerator)GetOutputChan() chan []byte {
|
||||||
|
return g.outputChan
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFlvGenerator() (g *flvGenerator) {
|
||||||
|
g = new(flvGenerator)
|
||||||
|
g.timestamp = 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *flvGenerator) Start(){
|
||||||
|
g.GenHeader()
|
||||||
|
go g.generate()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *flvGenerator) GenHeader(){
|
||||||
|
header = flv.Header{
|
||||||
|
}
|
||||||
|
g.outputChan <- header
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *flvGenerator) GetNextTimestamp() (timestamp uint32){
|
||||||
|
timestamp = g.currentTimestamp
|
||||||
|
g.currentTimeStamp += 100*time.Millisecond() / g.fps
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *flvGenerator) ResetTimestamp() {
|
||||||
|
g.timestamp = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *tsGenerator) generate() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case videoFrame := <-g.inputChan
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue