mirror of https://bitbucket.org/ausocean/av.git
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
|
package h264
|
||
|
|
||
|
import (
|
||
|
// "github.com/nareix/joy4/av"
|
||
|
// "github.com/nareix/joy4/codec/h264parser"
|
||
|
// "github.com/nareix/joy4/format/ts"
|
||
|
"io"
|
||
|
"log"
|
||
|
"net"
|
||
|
"os"
|
||
|
"os/signal"
|
||
|
|
||
|
"github.com/ausocean/h264decode/h264/bits"
|
||
|
)
|
||
|
|
||
|
// InitialNALU indicates the start of a h264 packet
|
||
|
// 0 - Forbidden 0 bit; always 0
|
||
|
// 1,2 - NRI
|
||
|
// 3,4,5,6,7 - Type
|
||
|
var (
|
||
|
InitialNALU = []byte{0, 0, 0, 1}
|
||
|
Initial3BNALU = []byte{0, 0, 1}
|
||
|
logger *log.Logger
|
||
|
streamOffset = 0
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
logger = log.New(os.Stderr, "streamer ", log.Lshortfile|log.Lmicroseconds)
|
||
|
}
|
||
|
|
||
|
func ByteStreamReader(connection net.Conn) {
|
||
|
logger.Printf("opened bytestream\n")
|
||
|
defer connection.Close()
|
||
|
handleConnection(connection)
|
||
|
}
|
||
|
|
||
|
func handleConnection(connection io.Reader) {
|
||
|
logger.Printf("debug: handling connection\n")
|
||
|
streamFilename := "/home/bruce/devel/go/src/github.com/mrmod/cvnightlife/output.mp4"
|
||
|
_ = os.Remove(streamFilename)
|
||
|
debugFile, err := os.Create(streamFilename)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
streamReader := &H264Reader{
|
||
|
Stream: connection,
|
||
|
// TODO: need to give this an io.Reader, not nil.
|
||
|
BitReader: bits.NewBitReader(nil),
|
||
|
DebugFile: debugFile,
|
||
|
}
|
||
|
c := make(chan os.Signal, 1)
|
||
|
signal.Notify(c)
|
||
|
go func() {
|
||
|
logger.Printf("debug: waiting on signals\n")
|
||
|
s := <-c
|
||
|
logger.Printf("info: %v received, closing stream file\n", s)
|
||
|
streamReader.DebugFile.Close()
|
||
|
os.Exit(0)
|
||
|
}()
|
||
|
|
||
|
defer func() {
|
||
|
if r := recover(); r != nil {
|
||
|
logger.Printf("fatal: recovered: %v\n", r)
|
||
|
logger.Printf("info: closing streamfile\n")
|
||
|
streamReader.DebugFile.Close()
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
}()
|
||
|
streamReader.Start()
|
||
|
}
|