声音部分的代码仍需调试,现在panic
This commit is contained in:
@@ -23,7 +23,7 @@ const BitsPerByte = 8
|
||||
|
||||
type WavFIFODriver struct {
|
||||
PCM <-chan [BufferSize]byte
|
||||
WaveHeader <-chan *WavHeader
|
||||
WaveHeader *WavHeader
|
||||
closed <-chan struct{}
|
||||
cancel func()
|
||||
}
|
||||
@@ -42,19 +42,19 @@ func (w *WavFIFODriver) Open() error {
|
||||
}
|
||||
|
||||
func (w *WavFIFODriver) Close() error {
|
||||
defer w.cancel()
|
||||
w.cancel()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *WavFIFODriver) Properties() []prop.Media {
|
||||
waveHeader := <-w.WaveHeader
|
||||
logrus.Debugf("wave header: %v", waveHeader)
|
||||
logrus.Debugf("wave header: %v", w.WaveHeader)
|
||||
return []prop.Media{
|
||||
{
|
||||
Audio: prop.Audio{
|
||||
SampleRate: int(waveHeader.SampleRate),
|
||||
ChannelCount: int(waveHeader.NumChannels),
|
||||
Latency: waveHeader.GetLatnecy(),
|
||||
SampleRate: int(w.WaveHeader.SampleRate),
|
||||
ChannelCount: int(w.WaveHeader.NumChannels),
|
||||
SampleSize: int(w.WaveHeader.BitsPerSample),
|
||||
Latency: w.WaveHeader.GetLatnecy(),
|
||||
IsFloat: false, // just 8bit or 16bit with qemu
|
||||
IsBigEndian: false, // qemu should be little endian
|
||||
IsInterleaved: true,
|
||||
@@ -64,13 +64,14 @@ func (w *WavFIFODriver) Properties() []prop.Media {
|
||||
}
|
||||
|
||||
func (w *WavFIFODriver) AudioRecord(p prop.Media) (audio.Reader, error) {
|
||||
a := wave.NewInt16Interleaved(wave.ChunkInfo{
|
||||
Len: BufferSize / int(p.SampleSize/BitsPerByte),
|
||||
Channels: p.ChannelCount,
|
||||
SamplingRate: p.SampleRate,
|
||||
})
|
||||
logrus.Debug(p)
|
||||
|
||||
reader := func() (wave.Audio, func(), error) {
|
||||
a := wave.NewInt16Interleaved(wave.ChunkInfo{
|
||||
Len: BufferSize / int(p.SampleSize/BitsPerByte),
|
||||
Channels: p.ChannelCount,
|
||||
SamplingRate: p.SampleRate,
|
||||
})
|
||||
select {
|
||||
case <-w.closed:
|
||||
return nil, func() {}, io.EOF
|
||||
|
@@ -29,7 +29,7 @@ type CommandLine struct {
|
||||
}
|
||||
|
||||
func ParseEvent(b []byte) (*Event, error) {
|
||||
var event *Event
|
||||
event := &Event{}
|
||||
if err := json.Unmarshal(b, event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@ import (
|
||||
"github.com/pion/mediadevices/pkg/codec/opus"
|
||||
"github.com/pion/mediadevices/pkg/codec/x264"
|
||||
"github.com/pion/mediadevices/pkg/driver"
|
||||
"github.com/pion/mediadevices/pkg/prop"
|
||||
"github.com/pion/webrtc/v3"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@@ -45,7 +46,10 @@ func New(o *Options) (*Connection, error) {
|
||||
}
|
||||
|
||||
s, err := mediadevices.GetUserMedia(mediadevices.MediaStreamConstraints{
|
||||
Video: func(mtc *mediadevices.MediaTrackConstraints) {},
|
||||
Video: func(mtc *mediadevices.MediaTrackConstraints) {
|
||||
mtc.Height = prop.Int(o.Video.Height)
|
||||
mtc.Width = prop.Int(o.Video.Width)
|
||||
},
|
||||
Audio: func(mtc *mediadevices.MediaTrackConstraints) {},
|
||||
Codec: codecSelector,
|
||||
})
|
||||
@@ -84,7 +88,7 @@ func (c *Connection) Regist(offer *webrtc.SessionDescription) (*webrtc.SessionDe
|
||||
|
||||
for _, track := range c.stream.GetTracks() {
|
||||
track.OnEnded(func(err error) {
|
||||
logrus.Errorf("Track (ID: %s) ended with error: %v", track.ID(), err)
|
||||
logrus.Errorf("Track (ID: %s, kind: %s) ended with error: %v", track.ID(), track.Kind().String(), err)
|
||||
})
|
||||
_, err := rtc.AddTransceiverFromTrack(track, webrtc.RTPTransceiverInit{
|
||||
Direction: webrtc.RTPTransceiverDirectionSendonly,
|
||||
|
Reference in New Issue
Block a user