首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >播放g711 a-law流的波涛汹涌

播放g711 a-law流的波涛汹涌
EN

Stack Overflow用户
提问于 2018-05-04 17:01:30
回答 1查看 444关注 0票数 0

在我的一个项目中,我遇到了一个问题--很可能我只是忽略了一个微小的错误,但是我没有抓住它,所以我可以请求一些帮助。

我正在进行一个项目,以接收(并进一步处理)通过网络接收到的音频流。该流用G.711a法则使用8 8kHz和8位编码,并以20毫秒(或每秒50包)的微小碎片发送。

以下代码通过UDP接收流(基本上每当接收到UDP数据包时,就从套接字读取它并添加到n音频BufferedWaveProvider中):

代码语言:javascript
复制
Private Provider As New NAudio.Wave.BufferedWaveProvider(NAudio.Wave.WaveFormat.CreateALawFormat(8000, 1))
Private Sub FT636VOIP_U_Auslesen(ByVal ar As IAsyncResult)
    sample = FT636VOIPUSocket.EndReceive(ar, New Net.IPEndPoint("10.48.11.43", 60001))
    Provider.AddSamples(sample, 0, sample.Count)
    FT636VOIPUSocket.BeginReceive(New AsyncCallback(AddressOf FT636VOIP_U_Auslesen), FT636VOIPUSocket)
End Sub

在另一个线程中启动(以避免阻塞主应用程序),WaveOutEvent与BufferedWaveProvider链接以进行回放。

代码语言:javascript
复制
Private Sub Audio()
    Dim wo As New NAudio.Wave.WaveOutEvent
    wo.DesiredLatency = 1000
    wo.Init(Provider)
    wo.Play()
    Do While wo.PlaybackState = NAudio.Wave.PlaybackState.Playing
        Threading.Thread.Sleep(500)
    Loop
End Sub

嗯,网络连接已经启动,并迅速填充缓冲区,回放在所需的延迟之后开始,但只会产生“波涛汹涌的声音”,尽管本质上应该只有沉默……

我是否必须在某个阶段对流进行解码(尽管BufferedWaveProvider是用正确的编码初始化的)?还是我错过了别的什么..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-05 09:28:22

你会得到最好的结果,如果你解码音频,当它到达,并将它作为16位音频放入BufferedWaveProvider。另外,您是否确定在接收的网络数据包中没有周围的元数据?如果是这样的话,那就需要去掉,否则就会产生噪音。

NAudio演示项目包含这个确切场景的示例,因此如果需要进一步的帮助,可以将其用作参考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50179897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档