好的,這是我最終做的,我的Go代碼通過一個ffmpeg過程將原始PCM數據傳輸到mp3。我假定packets
是,我的音頻數據出現在一個信道,和response
是http.ResponseWriter
cmd := exec.Command("ffmpeg", "-v", "verbose", "-f", "u16le", "-ar", "44100", "-ac", "1", "-i", "-", "-f", "mp3", "-")
audioIn, err := cmd.StdinPipe()
if err != nil {
log.Println("Failed to create stdin pipe")
}
audioOut, err := cmd.StdoutPipe()
if err != nil {
log.Println("Failed to create stdout pipe")
}
err = cmd.Start()
if err != nil {
log.Println("Failed to start ffmpeg command, error: ", err)
}
go func() {
for {
packet := <-packets
audioIn.Write(packet.Payload)
}
}
go func() {
amount, err := io.Copy(response, audioOut)
if err != nil {
log.Println("io copy terminated with an error", err)
}
log.Printf("Done copying audio data: %d bytes\n", amount)
}()
err = cmd.Wait()
if err != nil {
log.Println("ffmpeg command terminated incorrectly", err)
}
來源
2013-03-07 23:00:32
wxs
收件圍繞開源[libvorbis]的包裝(http://www.xiph.org/downloads /)庫並用它編碼你的流。也許有人已經做了一個包裝,搜索互聯網。 – thwd 2013-03-05 19:04:21
如果您自己解決了問題,請爲您的問題添加一個答案,並將其標記爲已接受的答案。這樣,同樣問題的其他人將能夠輕鬆看到解決方案。 – 2013-03-06 06:50:51
好吧,我現在接受了我自己的答案 – wxs 2013-03-07 23:00:58