如何设计音频数据和控制信号的实时传输协议?

2015-09-07 16:02:08 +08:00
 joshz

整体框架是这样的,利用 Android 作为数据采集终端,用蓝牙或者 wifi-direct 作为网络传输的媒介, PC 上位机需要同时获取几个终端的录音数据和位置(暂时是人工输入的)数据,同时还要控制终端采集进程的开始、暂停和结束状态,怎么样设计上位机和采集终端的应答方式才能同时传输音频流、坐标数据以及控制信号呢?

我是 Android 新手,目前已经可以采集音频,也可以开启蓝牙连接并发送数据,写了个简单的 Python 服务器程序可以接收到数据了,现在就卡在数据应答的设计上了。不知道用 Socket 编程会不会特别复杂,有没有可以使用或者参考的库?我没有网络编程的经验,希望可以给些提示或者文档给我参考,谢谢。

11405 次点击
所在节点    Android
15 条回复
hienchu
2015-09-07 16:15:20 +08:00
joshz
2015-09-07 16:20:44 +08:00
@hienchu 音频流数据可以这样传输,那坐标更新数据和控制信号怎么传呢?应该要分开吧?
menc
2015-09-07 16:39:58 +08:00
请参考 mqtt 协议,为物联网和低网络条件量身定制的协议
hewwcn
2015-09-07 17:20:56 +08:00
udp 就好了。不会很复杂。之前做过类似硬件设备,是自己实现的通讯协议,可以实现简单的视频通话了。关于音频其实也可以走简单的走 udp ,然后接收端组帧再播放就可以了。

流媒体的播放控制是用 RTSP 这个协议。还有个 RTCP 协议。我觉得应该可以满足你的要求。
其实你想实现的功能就是一个没有视频流的 ip camera 吧。
joshz
2015-09-07 17:49:52 +08:00
@menc 谢谢,看上去有些相关,我去看看
joshz
2015-09-07 17:52:46 +08:00
@hewwcn ,不单单是播放,需要对音频数据做进一步分析,对数据的完整性有要求,当然如果算法鲁棒性好的话可能 udp 也可以。
joshz
2015-09-07 17:58:09 +08:00
其实我的困扰是这些不同类型的数据如何混在一起传输,流数据要尽量保证实时性,其它数据发送的频率倒是不高,是分时切换呢还是用什么技术并行传输呢?哎,怪自己网络没学好。
jimzhong
2015-09-07 18:11:14 +08:00
以前做过一个音频传输的程序。主要参考了 shairport ,把控制和数据分开。我用的是 TCP ,因为对数据完整性要求比较高,而且只在内网使用,基本不拥塞。
wizardoz
2015-09-07 18:17:34 +08:00
为何要设计这种东西?选一种成熟的使用不好吗?
joshz
2015-09-07 18:23:53 +08:00
@jimzhong 你的意思是用多线程把数据和控制分别传输?会不会导致流数据的实时性下降呢?
jimzhong
2015-09-07 18:31:06 +08:00
@joshz 实时性会下降。你可以把控制加到数据流里面,不过我不知道是否会有提升。
joshz
2015-09-07 18:36:35 +08:00
@jimzhong 我就是不知道怎么加,不过谢谢你的实践经验,开多线程传输似乎是最简单的了。
jimzhong
2015-09-07 22:00:23 +08:00
@joshz 我并没有尝试过。个人认为可以参考一下 HTTP 协议。
joshz
2015-09-08 21:59:39 +08:00
@menc 你好, mqtt 协议我大致翻了一遍,用在我的项目上似乎是挺合适,但有个关键的问题是, mqtt 需要基于 TCP/IP 网络,在 Android 蓝牙和 wifi-direct 上可以使用吗?还是只能使用更定制化的 mqtt-sn ,但 mqtt-sn 似乎目前还不成熟。可能我没找到很详细的 mqtt 文档,可以提供吗?
joshz
2015-09-08 22:43:23 +08:00
@menc 补充一下,在 Android 上使用 wifi 连接公共网络然后再使用 mqtt 交换数据是可行的,虽然我用于测试的 APP https://www.eclipse.org/paho/clients/android/ 很不稳定。所以应该感谢你的建议。不过如果能使用蓝牙这种相对低功耗的通信就更好了,不知道你有没有尝试过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX