mirror of https://bitbucket.org/ausocean/av.git
revid: added PCM and ADPCM codecs
This commit is contained in:
parent
a60c65a6cf
commit
20c9e6c409
|
@ -108,7 +108,7 @@ func handleFlags() revid.Config {
|
|||
cpuprofile = flag.String("cpuprofile", "", "write cpu profile to `file`")
|
||||
|
||||
inputPtr = flag.String("Input", "", "The input type: Raspivid, File, v4l, Audio")
|
||||
inputCodecPtr = flag.String("InputCodec", "", "The codec of the input: H264, Mjpeg")
|
||||
inputCodecPtr = flag.String("InputCodec", "", "The codec of the input: H264, Mjpeg, PCM, ADPCM")
|
||||
rtmpMethodPtr = flag.String("RtmpMethod", "", "The method used to send over rtmp: Ffmpeg, Librtmp")
|
||||
quantizePtr = flag.Bool("Quantize", false, "Quantize input (non-variable bitrate)")
|
||||
verbosityPtr = flag.String("Verbosity", "Info", "Verbosity: Debug, Info, Warning, Error, Fatal")
|
||||
|
@ -194,12 +194,16 @@ func handleFlags() revid.Config {
|
|||
case "Audio":
|
||||
cfg.Rate = float64(*sampleRatePtr*sampleSize) / float64(blockSize)
|
||||
default:
|
||||
cfg.Rate = *frameRatePtr
|
||||
cfg.Rate = float64(*frameRatePtr)
|
||||
}
|
||||
|
||||
switch *inputCodecPtr {
|
||||
case "H264":
|
||||
cfg.InputCodec = revid.H264
|
||||
case "PCM":
|
||||
cfg.InputCodec = revid.PCM
|
||||
case "ADPCM":
|
||||
cfg.InputCodec = revid.ADPCM
|
||||
case "":
|
||||
default:
|
||||
log.Log(logger.Error, pkg+"bad input codec argument")
|
||||
|
|
|
@ -250,6 +250,8 @@ func MJPEG(dst io.Writer, src io.Reader, delay time.Duration) error {
|
|||
}
|
||||
}
|
||||
|
||||
// PCM reads from the given source and breaks the PCM into chunks that
|
||||
// are an appropriate size for mts and pes packets.
|
||||
func PCM(dst io.Writer, src io.Reader, delay time.Duration) error {
|
||||
var tick <-chan time.Time
|
||||
if delay == 0 {
|
||||
|
@ -274,3 +276,12 @@ func PCM(dst io.Writer, src io.Reader, delay time.Duration) error {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ADPCM reads from the given source and breaks the ADPCM into chunks that
|
||||
// are an appropriate size for mts and pes packets.
|
||||
// Since PCM and ADPCM are not any different when it comes to how they are
|
||||
// transmitted, ADPCM is just a wrapper for PCM.
|
||||
func ADPCM(dst io.Writer, src io.Reader, delay time.Duration) error {
|
||||
err := PCM(dst, src, delay)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ func (e *Encoder) TimeBasedPsi(b bool, sendCount int) {
|
|||
e.pktCount = e.psiSendCount
|
||||
}
|
||||
|
||||
// Write implements io.Writer. Write takes raw h264 and encodes into mpegts,
|
||||
// Write implements io.Writer. Write takes raw video or audio data and encodes into mpegts,
|
||||
// then sending it to the encoder's io.Writer destination.
|
||||
func (e *Encoder) Write(data []byte) (int, error) {
|
||||
if len(data) > pes.MaxPesSize {
|
||||
|
|
|
@ -119,6 +119,8 @@ const (
|
|||
Http
|
||||
H264
|
||||
Mjpeg
|
||||
PCM
|
||||
ADPCM
|
||||
None
|
||||
Mpegts
|
||||
Ffmpeg
|
||||
|
|
|
@ -263,6 +263,12 @@ func (r *Revid) setupPipeline(mtsEnc, flvEnc func(dst io.Writer, rate int) (io.W
|
|||
case Mjpeg:
|
||||
r.config.Logger.Log(logger.Info, pkg+"using MJPEG lexer")
|
||||
r.lexTo = lex.MJPEG
|
||||
case PCM:
|
||||
r.config.Logger.Log(logger.Info, pkg+"using PCM lexer")
|
||||
r.lexTo = lex.PCM
|
||||
case ADPCM:
|
||||
r.config.Logger.Log(logger.Info, pkg+"using ADPCM lexer")
|
||||
r.lexTo = lex.ADPCM
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -670,8 +676,7 @@ func (r *Revid) setupInputForFile() error {
|
|||
|
||||
// startAudioInput is used to start capturing audio from an audio device and processing it.
|
||||
func (r *Revid) startAudioInput() error {
|
||||
|
||||
ai := NewAudioInput()
|
||||
ai := NewAudioInput(audioParams)
|
||||
|
||||
go r.processFrom(ai, time.Second/time.Duration(r.config.Rate))
|
||||
return nil
|
||||
|
|
Loading…
Reference in New Issue