initial
This commit is contained in:
77
stream_enregistre.go
Normal file
77
stream_enregistre.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
const stream_url = "http://streaming.rolandradio.net/rolandradio"
|
||||
const stream_file = "./rolanradio_%s.mp3"
|
||||
const sizeGeneriqueToStrip = 0x702A0 //octets
|
||||
const bufferSize = 2048 //octets
|
||||
|
||||
func stopRecording() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// Enregistre le stream_url dans stream_file en ajoutant la date (%s)
|
||||
// prend un channel de type booleen en entrée : true a la fin de la fonction OK, false si erreur
|
||||
func Enregistre_stream(done chan bool, errChan chan error, filename string) {
|
||||
// Obtenir la réponse HTTP depuis l'URL
|
||||
resp, err := http.Get(stream_url)
|
||||
if err != nil {
|
||||
fmt.Println("Error fetching stream:", err)
|
||||
done <- false
|
||||
errChan <- err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Créer un fichier local pour écrire les données du flux audio
|
||||
file, err := os.Create(filename)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error creating file : %s", err)
|
||||
done <- false
|
||||
errChan <- err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
//fmt.Println("Rejet des ", sizeGeneriqueToStrip, " premiers octets du stream")
|
||||
fmt.Println("Recording...")
|
||||
|
||||
// met a la poubelle les premiers octets du stream (entete + generique roland radio)
|
||||
_, err = io.CopyN(io.Discard, resp.Body, sizeGeneriqueToStrip)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur du strip de l'entête et générique du stream: %s", err)
|
||||
done <- false
|
||||
errChan <- err
|
||||
}
|
||||
|
||||
buffer := make([]byte, bufferSize)
|
||||
|
||||
var totalBytes int64
|
||||
for {
|
||||
n, err := resp.Body.Read(buffer)
|
||||
if err != nil && err != io.EOF {
|
||||
fmt.Fprintf(os.Stderr, "Error lecture buffer stream : %s", err)
|
||||
done <- false
|
||||
errChan <- err
|
||||
}
|
||||
|
||||
_, err = file.Write(buffer[:n])
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error copying stream : %s", err)
|
||||
done <- false
|
||||
errChan <- err
|
||||
}
|
||||
|
||||
totalBytes += int64(n)
|
||||
|
||||
if stopRecording() {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
done <- true
|
||||
}
|
||||
Reference in New Issue
Block a user