forked from emiago/diago
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayback_test.go
104 lines (83 loc) · 2.61 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
// SPDX-License-Identifier: MPL-2.0
// SPDX-FileCopyrightText: Copyright (c) 2024, Emir Aganovic
package diago
import (
"bytes"
"io"
"net"
"os"
"testing"
"github.com/emiago/diago/media"
"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.IPv4(127, 0, 0, 1), 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)
}()
p := NewAudioPlayback(rtpWriter, codec)
written, err := p.Play(fh, "audio/wav")
// 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.IPv4(127, 0, 0, 1), 0)
require.NoError(t, err)
defer sess.Close()
codec := media.CodecFromSession(sess)
sess.Raddr = net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 9999}
p := NewAudioPlayback(bytes.NewBuffer(make([]byte, 0)), 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{Codecs: []media.Codec{media.CodecAudioUlaw}},
// 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)
})
}