mirror of https://bitbucket.org/ausocean/av.git
mts: reordered, neatened and clarified code.
This commit is contained in:
parent
669a7d3c22
commit
7c990b3bb5
|
@ -29,9 +29,10 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"bitbucket.org/ausocean/av/container/mts/meta"
|
|
||||||
"github.com/Comcast/gots/packet"
|
"github.com/Comcast/gots/packet"
|
||||||
"github.com/Comcast/gots/pes"
|
"github.com/Comcast/gots/pes"
|
||||||
|
|
||||||
|
"bitbucket.org/ausocean/av/container/mts/meta"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestEncodePcm tests the mpegts encoder's ability to encode pcm audio data.
|
// TestEncodePcm tests the mpegts encoder's ability to encode pcm audio data.
|
||||||
|
@ -39,13 +40,12 @@ import (
|
||||||
func TestEncodePcm(t *testing.T) {
|
func TestEncodePcm(t *testing.T) {
|
||||||
Meta = meta.New()
|
Meta = meta.New()
|
||||||
|
|
||||||
var b []byte
|
var buf bytes.Buffer
|
||||||
buf := bytes.NewBuffer(b)
|
|
||||||
sampleRate := 48000
|
sampleRate := 48000
|
||||||
sampleSize := 2
|
sampleSize := 2
|
||||||
blockSize := 16000
|
blockSize := 16000
|
||||||
writeFreq := float64(sampleRate*sampleSize) / float64(blockSize)
|
writeFreq := float64(sampleRate*sampleSize) / float64(blockSize)
|
||||||
e := NewEncoder(buf, writeFreq, Audio)
|
e := NewEncoder(&buf, writeFreq, Audio)
|
||||||
|
|
||||||
inPath := "../../../test/test-data/av/input/sweep_400Hz_20000Hz_-3dBFS_5s_48khz.pcm"
|
inPath := "../../../test/test-data/av/input/sweep_400Hz_20000Hz_-3dBFS_5s_48khz.pcm"
|
||||||
inPcm, err := ioutil.ReadFile(inPath)
|
inPcm, err := ioutil.ReadFile(inPath)
|
||||||
|
@ -84,11 +84,34 @@ func TestEncodePcm(t *testing.T) {
|
||||||
for i+PacketSize <= len(clip) {
|
for i+PacketSize <= len(clip) {
|
||||||
|
|
||||||
// Check MTS packet
|
// Check MTS packet
|
||||||
if pkt.PID() == audioPid {
|
if !(pkt.PID() == audioPid) {
|
||||||
if pkt.PayloadUnitStartIndicator() {
|
i += PacketSize
|
||||||
|
if i+PacketSize <= len(clip) {
|
||||||
|
copy(pkt[:], clip[i:i+PacketSize])
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !pkt.PayloadUnitStartIndicator() {
|
||||||
|
i += PacketSize
|
||||||
|
if i+PacketSize <= len(clip) {
|
||||||
|
copy(pkt[:], clip[i:i+PacketSize])
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Copy the first MTS payload
|
||||||
|
payload, err := pkt.Payload()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unable to get MTS payload: %v", err)
|
||||||
|
}
|
||||||
|
pesPacket = append(pesPacket, payload...)
|
||||||
|
|
||||||
// Copy the first MTS payload
|
i += PacketSize
|
||||||
payload, err := pkt.Payload()
|
if i+PacketSize <= len(clip) {
|
||||||
|
copy(pkt[:], clip[i:i+PacketSize])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the rest of the MTS payloads that are part of the same PES packet
|
||||||
|
for (!pkt.PayloadUnitStartIndicator()) && i+PacketSize <= len(clip) {
|
||||||
|
payload, err = pkt.Payload()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unable to get MTS payload: %v", err)
|
t.Errorf("unable to get MTS payload: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -98,39 +121,15 @@ func TestEncodePcm(t *testing.T) {
|
||||||
if i+PacketSize <= len(clip) {
|
if i+PacketSize <= len(clip) {
|
||||||
copy(pkt[:], clip[i:i+PacketSize])
|
copy(pkt[:], clip[i:i+PacketSize])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the rest of the MTS payloads that are part of the same PES packet
|
|
||||||
for (!pkt.PayloadUnitStartIndicator()) && i+PacketSize <= len(clip) {
|
|
||||||
payload, err = pkt.Payload()
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unable to get MTS payload: %v", err)
|
|
||||||
}
|
|
||||||
pesPacket = append(pesPacket, payload...)
|
|
||||||
|
|
||||||
i += PacketSize
|
|
||||||
if i+PacketSize <= len(clip) {
|
|
||||||
copy(pkt[:], clip[i:i+PacketSize])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
i += PacketSize
|
|
||||||
if i+PacketSize <= len(clip) {
|
|
||||||
copy(pkt[:], clip[i:i+PacketSize])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Get the audio data from the current PES packet
|
|
||||||
pesHeader, err := pes.NewPESHeader(pesPacket)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unable to read PES packet: %v", err)
|
|
||||||
}
|
|
||||||
got = append(got, pesHeader.Data()...)
|
|
||||||
pesPacket = pesPacket[:0]
|
|
||||||
} else {
|
|
||||||
i += PacketSize
|
|
||||||
if i+PacketSize <= len(clip) {
|
|
||||||
copy(pkt[:], clip[i:i+PacketSize])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Get the audio data from the current PES packet
|
||||||
|
pesHeader, err := pes.NewPESHeader(pesPacket)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unable to read PES packet: %v", err)
|
||||||
|
}
|
||||||
|
got = append(got, pesHeader.Data()...)
|
||||||
|
pesPacket = pesPacket[:0]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare data from MTS with original data.
|
// Compare data from MTS with original data.
|
||||||
|
|
|
@ -147,8 +147,9 @@ type Encoder struct {
|
||||||
psiLastTime time.Time
|
psiLastTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEncoder returns an Encoder with the specified frame rate.
|
// NewEncoder returns an Encoder with the specified media type and rate eg. if a video stream
|
||||||
func NewEncoder(dst io.Writer, writeFreq float64, mediaType int) *Encoder {
|
// calls write for every frame, the rate will be the frame rate of the video.
|
||||||
|
func NewEncoder(dst io.Writer, rate float64, mediaType int) *Encoder {
|
||||||
var mPid int
|
var mPid int
|
||||||
var sid byte
|
var sid byte
|
||||||
switch mediaType {
|
switch mediaType {
|
||||||
|
@ -163,7 +164,7 @@ func NewEncoder(dst io.Writer, writeFreq float64, mediaType int) *Encoder {
|
||||||
return &Encoder{
|
return &Encoder{
|
||||||
dst: dst,
|
dst: dst,
|
||||||
|
|
||||||
writePeriod: time.Duration(float64(time.Second) / writeFreq),
|
writePeriod: time.Duration(float64(time.Second) / rate),
|
||||||
ptsOffset: ptsOffset,
|
ptsOffset: ptsOffset,
|
||||||
|
|
||||||
timeBasedPsi: true,
|
timeBasedPsi: true,
|
||||||
|
|
|
@ -26,7 +26,7 @@ LICENSE
|
||||||
|
|
||||||
package pes
|
package pes
|
||||||
|
|
||||||
const MaxPesSize = 65536
|
const MaxPesSize = 64 * 1 << 10
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The below data struct encapsulates the fields of an PES packet. Below is
|
The below data struct encapsulates the fields of an PES packet. Below is
|
||||||
|
|
Loading…
Reference in New Issue