Android:通过 RTP (G.711 PCMU) 将 .wav 发送到 SIP 电话,基于 SipDroid/MjSIP,声音非常嘈杂、噼啪作响

2023-11-29

我想将 .wav 文件从我的 Android 传输(仅发送)到软件电话 (x-lite),以便 x-lite 上的被叫方可以听到 .wav 文件的声音。

场景如下: Android 和 x-lite 都在同一个 WLAN 中,并且都连接到 FreeSwitch。我可以从 Android 手机呼叫 x-lite。如果 x-lite 上接受呼叫,android 会发送 .wav 文件,我可以在wireshark 中看到 RTP 数据包(G.711 PCMU)从手机发送到 x-lite。我能听到一些声音,但不是我期望的声音。相反,它发出噼啪声、嘈杂声和一些嘟嘟声。

那么我发送给x-lite的SDP有问题吗?

v=0
o=sip:[email protected] 0 0 IN IP4 192.168.2.100
s=MySession
c=IN IP4 192.168.2.110
t=0 0
m=audio 8000 RTP/AVP 0 8 101
a=rtpmap:101 telephone-event/8000

或者是我发送 .wav 的方式有问题?

DatagramSocket socket = null;
RtpStreamSender sender = null;
int port =8000;
int payload_type = 0;
int frameSize = 64;
int frameRate =32; 
socket = new DatagramSocket(port);
FileInputStream audioInput = new FileInputStream(f); //f is the .wav
sender = new RtpStreamSender(audioInput, true, payload_type, frameRate, frameSize, remoteAddress, remotePort);
sender.setSyncAdj(2);
sender.start();

如果我在 Wireshark 中跟踪 UDP 流,开头看起来像这样:

........M...RIFF....WAVEfmt ……D…………数据0……………… ..M................................................. ………………>M……………… ...................................................... ...]M........................................................ ......................|M...................... .. …………………………………… .M………… …………………… ………………M………… ................................................ …………………………………… ...................... .......+...5...8.........M...6...+.'...-...(.... .#...-...+... …………………… ………………………………………… ................................ ...6M............ ...................................................... ……嗯……-...1...0...,...)...'...0... ?...=.#.'.$. 。!....................Tm值........................... ..$...................... ………………M……………… …………………………M.. .=...I...W...J.../.................#...<...t.. .z...b....m.....>……”…… …… ......5.W.L...N......M...C...8.m.'.R...>...O... p...~...e...我...3...…………………………………… ...................................... ………………M…… ...5...R...L...3.../...B...Z...b......X...B...!.........{............MM.........$...2...(........................................................lM...............................-.!.R.J.].s.Z.t.U.c.b..q.v.....y...........M...h...V...Y...c...l.f.E.*........................ ...................(...E...X...........M...J...5.H .7.5.^...~...j.................(.=.h.........F.....Q ...(...M...E.X...{...L.2.........................:..... ..问..v.......... ......M......0...SK...7.+.B.. ...................&...O...]...........M...r.B....... w...8.Q...?...A...>.................).../。

所以我猜它不空。信号开始后,一些信号从 x-lite 发送到 android,然后再次从 android 发送一些数据包到 x-lite...等等

谁能告诉我为什么我听不到声音?

(也欢迎其他解决方案) 编辑:

这是 MjSip 的 RTPStramSender 的实现:http://pastebin.com/xU4EdEex

编辑2: 我将 RFC 中的 SDP 更改为:

     m=audio 54874 RTP/AVP 96 97 0 8
     a=rtpmap:96 PCMU-WB/16000
     a=rtpmap:97 PCMA-WB/16000
     a=rtpmap:0 PCMU/8000
     a=rtpmap:8 PCMA/8000

但什么也没发生。我更改了帧大小和帧速率,但噼啪声只会变得更快或更慢

编辑3: RtpPacket的实现:http://pastebin.com/tDLr5CYF


我的怀疑是打包。

该 RFC 告诉您应该如何完成:RFC 5391

事实证明,这有一点帮助,但不是全部。如果有人可以提供帮助并且有效,请接受他的答案而不是我的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:通过 RTP (G.711 PCMU) 将 .wav 发送到 SIP 电话,基于 SipDroid/MjSIP,声音非常嘈杂、噼啪作响 的相关文章

  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne
  • Java:带注释的注释(和传递值)

    我有一个注释 其中包含其他几个注释 与此处的注释非常相似 Component Spring Component Interface OsgiService boolean isFactory 意味着所有带有注释的类 OsgiService也
  • Visual Studio Code:运行 Maven 时无法识别环境变量

    我正在尝试为 Maven 重新创建 Eclipse 运行配置 我在launch json中添加了环境变量 env environment test applicationname asset misc api log level debug
  • Cocos2d-x:如何将使用XCode开发的Cocos2d-x项目移植到Android(通过Eclipse)?

    我使用 XCode 开发了一个 Cocos2d X 应用程序 当我在 iOS 设备上从 XCode 启动它时 它可以完美运行 现在 我想把它移植到Android上 我的理解是 我必须找到一种方法将我的 XCode 项目 导入 Eclipse
  • JSONObject 文本必须以“{”开头错误

    我有来自我们的 REST 服务之一的 JSON category name Industry Components categoryId 1 category name Business Components categoryId 2 ca
  • 浓缩咖啡测试失败

    我正在 Android 中进行一些 Espresso 测试 测试失败并出现以下错误 java lang ClassCastException androidx fragment app testing FragmentScenario Em
  • Java Stream 相当于 ReactiveX Observable#scan

    ReactiveX 有一个非常简洁的运算符 称为Scan http reactivex io documentation operators scan html 这类似于reduce 只不过它发出每个中间累加器 我如何使用 Java Str
  • 与其他布局相比,约束布局是否昂贵?

    当我意识到 ConstraintLayout 有 更好的布局拖放 通过更好的命名 top toBottomOf 更好地查看相对设置 更好的布局结构与比率和百分比指南 还有更多不能在这里说明或者我只是不知道 我一直想不断地使用它 因为它太舒服
  • 为什么 SequenceFile 被截断?

    我在学习Hadoop这个问题困扰了我一段时间 基本上我正在写一个SequenceFile到磁盘然后读回 然而 每次我收到EOFException阅读时 深入观察发现 在写入序列文件时 它被过早截断 并且总是发生在写入索引962之后 并且文件
  • 更改 JComboBox 中选择的颜色(选择后)

    我正在使用 Swing 编写 GUI 我有一个定制的写法JComboBox用一个ListCellRenderer and a BasicComboBoxEditor In my getListCellRendererComponent 方法
  • 具有全局上下文的 Android 单例

    根据 Android 文档 它指出 通常不需要子类化应用程序 在大多数情况下 静态单例可以以更加模块化的方式提供相同的功能 方式 如果您的单例需要全局上下文 例如注册 广播接收器 检索它的函数可以给出 内部使用的上下文Context get
  • 更改首选项的背景颜色

    我有一个PreferenceCategory xml 文件 我已经在其中定义了所有首选项 我从扩展的类中调用它PreferenceActivity 我无法设置设置屏幕的背景 该屏幕是在如下所示的 xml 文件的帮助下显示的 请看我已经定义了
  • 有哪些好方法可以控制 GridBagConstraints?

    我对 Swing 编程有点陌生 我发现尽管我很喜欢 GridBagLayout 的强大功能 但如果您有很多组件 那么就会有很多代码行只是设置布局的约束 除了使用可视化编辑器之外 还有哪些好方法可以控制这种情况 请记住 当您添加GridBag
  • SWT - 灰显并禁用当前 shell

    当我在后台运行一个操作时 我将光标设置为忙碌 直到该过程完成 有没有办法也灰显并禁用当前的显示 对话框 外壳 直到该过程完成 我想以视觉方式让用户知道某些东西正在运行 他们必须等待 EDIT plotButton addListener S
  • Java“tail -f”包装器

    我需要将 Unix 命令 tail f 包装在 BufferedInputStream 中 我不想模拟或模仿尾巴 如所述这个问题 https stackoverflow com questions 557844 java io implem
  • Java Spring Web 服务客户端故障处理

    我编写了一个与 UPS Web 服务配合使用的 Web 服务客户端 使用 Java Spring 和 JAXB Marshaller 当我发送有效请求时 一切正常 当我发送无效请求 重量 gt 150 磅 时 UPS Web 服务会响应 S
  • 始终保持 TreeSet 中可变对象的排序

    我注意到 如果稍后更改对象属性值 TreeSet 不会按排序顺序保留可变对象 例如 public class Wrap static TreeSet
  • Java 的类加载器与 jars-with-jars

    我们有一个可执行的 JAR 文件有时包含其他 JAR 文件 整个事情依赖于另外四个下载的 JAR 骑在太空中一只巨大的部署乌龟的背上 在运行时 我们动态加载嵌套的 JAR 文件 执行以下操作 wearyingly verbose error
  • 如何使用 (a)smack 在 Android 上保持 XMPP 连接稳定?

    我使用适用于 Android 的 asmack android 7 beem 库 我有一个后台服务正在运行 例如我的应用程序保持活动状态 但 XMPP 连接迟早会在没有任何通知的情况下消失 服务器表示客户端仍然在线 但没有发送或接收数据包
  • Java - 基类和子类中的 equals 方法

    我有一个简单的基类 后来由许多单独的类扩展 这些类可能会引入新的字段 但不一定 我在基类中定义了一个 equals 方法 但也为一些子类重写了该方法 可以在基类 子类中混合定义吗 就我而言 这是为了避免代码重复检查相同的字段 看一眼 实现

随机推荐