streaming
This commit is contained in:
+34
-30
@@ -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)))
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user