これは私がやったことですが、私のGoコードはraw PCMデータをmp3に変換するffmpegプロセスでパイプします。私は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
あなた自身で問題を解決した場合は、自分の質問に回答を追加し、それを受け入れられた回答としてマークしてください。そうすれば、同じ問題を抱えている他の人たちも簡単に解決策を見ることができます。 –
いいえ私は今自分の答えを受け入れた – wxs