forked from emiago/diago
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayback_test.go
106 lines (85 loc) · 2.75 KB
/
playback_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// SPDX-License-Identifier: MPL-2.0
// SPDX-FileCopyrightText: Copyright (c) 2024, Emir Aganovic
package diago
import (
"io"
"net"
"os"
"testing"
"github.com/emiago/diago/audio"
"github.com/emiago/diago/media"
"github.com/emiago/diago/media/sdp"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestIntegrationStreamWAV(t *testing.T) {
fh, err := os.Open("testdata/files/demo-echodone.wav")
require.NoError(t, err)
sess, err := media.NewMediaSession(&net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 0})
require.NoError(t, err)
defer sess.Close()
codec := media.CodecFromSession(sess)
rtpWriter := media.NewRTPPacketWriter(sess, codec)
sess.Raddr = &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 9999}
udpDump, err := net.ListenUDP("udp4", sess.Raddr)
require.NoError(t, err)
defer udpDump.Close()
go func() {
io.ReadAll(udpDump)
}()
written, err := streamWavRTP(fh, rtpWriter, codec)
require.NoError(t, err)
require.Greater(t, written, int64(10000))
}
func TestIntegrationPlaybackStreamWAV(t *testing.T) {
fh, err := os.Open("testdata/files/demo-echodone.wav")
require.NoError(t, err)
sess, err := media.NewMediaSession(&net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 0})
require.NoError(t, err)
defer sess.Close()
codec := media.CodecFromSession(sess)
rtpWriter := media.NewRTPPacketWriter(sess, codec)
sess.Raddr = &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 9999}
enc, err := audio.NewPCMEncoderWriter(codec.PayloadType, rtpWriter)
require.NoError(t, err)
p := NewAudioPlayback(enc, codec)
udpDump, err := net.ListenUDP("udp4", sess.Raddr)
require.NoError(t, err)
defer udpDump.Close()
go func() {
io.ReadAll(udpDump)
}()
written, err := p.Play(fh, "audio/wav")
require.NoError(t, err)
require.Greater(t, written, int64(10000))
}
func TestIntegrationPlaybackFile(t *testing.T) {
r, w := io.Pipe()
go func() {
io.ReadAll(r)
}()
dialog := &DialogServerSession{
DialogMedia: DialogMedia{
mediaSession: &media.MediaSession{Formats: sdp.NewFormats(sdp.FORMAT_TYPE_ULAW)},
// audioReader: bytes.NewBuffer(make([]byte, 9999)),
audioWriter: w,
RTPPacketWriter: media.NewRTPPacketWriter(nil, media.CodecAudioUlaw),
},
}
t.Run("withControl", func(t *testing.T) {
playback, err := dialog.PlaybackControlCreate()
require.NoError(t, err)
playback.Stop()
written, err := playback.PlayFile("testdata/files/demo-echodone.wav")
require.NoError(t, err)
assert.EqualValues(t, 0, written)
})
t.Run("default", func(t *testing.T) {
playback, err := dialog.PlaybackCreate()
require.NoError(t, err)
written, err := playback.PlayFile("testdata/files/demo-echodone.wav")
require.NoError(t, err)
require.Greater(t, written, int64(10000))
t.Log("Written on RTP stream", written)
})
}