streaming

This commit is contained in:
gauthiier
2019-01-03 14:21:24 +01:00
parent 5e4f9b8862
commit 683cce60ab
5 changed files with 175 additions and 94 deletions
+34 -30
View File
@@ -8,15 +8,9 @@ import (
"../icecast"
)
// type stream_t struct {
// filepath string
// bitrate int
// channels int
// encoding_src string
// encoding_dst string
// }
type Next func() (string, error)
func Play(filename string) {
func Start(next_cb Next) {
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, os.Kill)
@@ -26,41 +20,51 @@ func Play(filename string) {
channels := 1
bytes_per_sec := int(samplerate) * channels * bytes_per_sample
r, e := os.Open(filename)
chk(e)
defer r.Close()
_, er := icecast.Connect()
chk(er)
audio := make([]byte, 2 * 1024)
dt := time.Second * time.Duration(len(audio)) / time.Duration(bytes_per_sec)
now := time.Now()
for fname, exit := next_cb(); exit == nil; fname, exit = next_cb() {
for {
r, e := os.Open(fname)
chk(e)
defer r.Close()
now := time.Now()
for {
n, err := r.Read(audio)
if n == 0 {
break
}
chk(err)
pre := time.Now()
icecast.Send(audio)
post := time.Now()
lag := time.Duration((post.Sub(pre)))
select {
case <-sig:
return
default:
}
dt = (time.Second * time.Duration(n) / time.Duration(bytes_per_sec)) - lag
time.Sleep(dt)
n, err := r.Read(audio)
if n == 0 {
break
}
chk(err)
icecast.Send(audio)
select {
case <-sig:
return
default:
}
time.Sleep(dt)
fmt.Println(time.Duration(time.Now().Sub(now)))
}
fmt.Println(time.Duration(time.Now().Sub(now)))
}