将音频流输入到FFMPEG

时间:2018-02-08 06:26:34

标签: c# ffmpeg microsoft-speech-api

我正在使用C#和ffmpeg.exe构建实时聊天应用程序。我的要求是从Microsoft Speech API获取内存流并实时将其提供给ffmpeg进程。我可以从Microsoft Speech API获取内存流。我正在使用以下代码来创建内存流。

        using (MemoryStream stream = new MemoryStream())
        {
            MemoryStream streamAudio = new MemoryStream();
            System.Media.SoundPlayer m_SoundPlayer = new System.Media.SoundPlayer();
            _speechSynthesizerVisemesSender.SetOutputToWaveStream(streamAudio);
            _speechSynthesizerVisemesSender.SetOutputToNull();
            stream.WriteTo(proc.StandardInput.BaseStream);
        }   

我已经使用另一个数据管道与另一个命令将视频内容提供给ffmpeg。但我无法找到一个稳定的解决方案来通过数据管道提供音频。 This文章简要介绍了音频数据管道。我正在使用以下命令来传输音频。

"ffmpeg -re -f s16le -i pipe:wav -f mpegts udp://127.0.0.1:1234"

但它不适用于数据管道。如果我尝试使用mp3或wav文件的命令,它的工作原理。

1 个答案:

答案 0 :(得分:0)

由于Microsoft Speech API是专为桌面应用程序设计的,并且不支持Web应用程序,因此您无法从语音API获取连续音频流。因此,只有选项是使用SAPI创建一个wav文件,并将音频文件与流组合。

当您有音频文件时,可以在ffmpeg中使用音频输入选项。

ffmpeg -re -f s16le -i pipe:wav -i audio.mp3 -r 10 -vcodec mpeg4 -f mpegts udp://127.0.0.1:1234

但问题是你赢了,无法用视频流映射你的音频。如果您不必将音频与视频同步,则可以使用上述命令。