V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joshz
V2EX  ›  Android

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

  •  
  •   joshz · 2015-09-07 16:02:08 +08:00 · 11338 次点击
    这是一个创建于 3394 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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