如何设计音频数据和控制信号的实时传输协议? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joshz
V2EX    Android

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

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

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

    我是 Android 新手,目前已经可以采集音频,也可以开启蓝牙连接并发送数据,写了个简单的 Pyton 服务器程序可以接收到数据了,现在就卡在数据应答的设计上了。不知道用 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     Solana     5157 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 05:58 PVG 13:58 LAX 21:58 JFK 00:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86