手机有对讲机功能吗的开源框架吗

: 想到采用音频流媒体加长连接, 是鈈是效果很差?

更简单了不就是直播吗,如果你多人都要说话就做WebRTC群聊就完了。

那有没有可以采用的开源框架?

: 更简单了不就是直播吗,如果你多人都要说话就做WebRTC群聊就完了。

WebRTC就可以它本来是用来做视频聊天的,你把视频关了只传语音就OK了。支持Web、移动app虽然它不能称之为框架,但它是标准有一大堆框架支持。

当然同时国内一大堆支持视聊语聊的第三方 但是开放性和连线数量无法自己控制。

: 那囿没有可以采用的开源框架?

了解, 多谢! 最终还是流媒体加长连接

: WebRTC就可以它本来是用来做视频聊天的,你把视频关了只传语音就OK了。支持Web、移动app虽然它不能称之为框架,但它是标准有一大堆框架支持。

: 当然同时国内一大堆支持视聊语聊的第三方 但是开放性和连线数量無法自己控制。

WebRTC其实替你屏蔽掉了网络层和视频编码层的绝大多数细节

}

  上个星期公司给出了一个项目需求做一个基于socket通讯协议的网络对讲机。于是在项目开始前计划了一下基本的实现流程

  1、从手机麦中采集音频数据;2、将PCM音频數据编码压缩;3、将压缩好的音频通过无线网络发送出去;4、其他手机接收音频数据并解码;5、将音频数据写入到音轨中播放。项目虽然簡单但其中的一些小问题也折腾了我不少时间。

  首先我们创建一个线程用来采集音频数据通过android提供的AudioRecord可以实时采集音频流。AudioRecord类在Java應用程序中管理音频资源用来记录从平台音频输入设备产生的数据。其实调用AudioRecord很简单首先创建AudioRecord对象,AudioRecord会初始化并连接音频缓冲区用來缓冲新的音频数据。根据指定的缓冲区的大小来决定AudioRecord能够记录多长的数据

  AudioRecord初始化工作完毕后启用录制线程,并且调用startRecording ()开始进行音頻录制调用read(short,intint)方法从音频硬件录制缓冲区读取数据。拿到音频数据后直接通过网络发送出去是不行的,我们在这里还要做一项工作僦是实现音频压缩在网上提供了很多音频的编码库,我们可以将源码导入到项目中通过android ndk编译成.so文件最后通过jni来调用。我这里直接用sipdroid开源项目提供的SILK编解码库()

  接下来,我们创建一个socket udp实例为什么这里选择udp而不是tcp呢?从我们本身的项目需求出发我们做的这个项目的通讯方式是相互收发数据的,属于手机与手机两“客户端“之间的通讯并且,在这种音频通信过程中我们要传输的数据量是比较龐大的,因此采用资源消耗少处理速度快的UDP协议是合理的。指定发送的端口号我们将数据封装成报文发送出去,整个采集发送的过程洳下:

  接下来我们要接收目标机器发送过来的音频数据了同样,创建一个线程用来接收网络中的音频数据并且对音频数据进行解碼。

返回值          解码后的数据大小 

  得到解码后的PCM音频流我们就可以使用AudioTrack将音频播放出来了。

  AudioTrack类在java应用程序中管理和播放音频资源将PCM音频数据写入到缓冲区来播放音频设备。首先创建AudioTrack对象AudioTrack会初始化并连接音频缓冲区,根据指定的缓冲区大小来决定audioTrack能夠播放多长的数据调用getMinBufferSize(int,int,int)返回最小的缓冲区大小。然后根据得到的最小缓冲区大小来创建audioTrack对象:

  AudioTrack初始化工作完毕后启用接收线程并苴调用play()开始播放。调用write(short[]int,int)方法将PCM音频数据写入到音频硬件中

   最后,退出应用后别忘了释放资源

  好了,网络对讲机的实现过程差不多就是这个样子了马上动手试一下效果吧^_^

  访问者可将本主页()提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途但同时应遵守著作权法及其他相关法律的规定,不得侵犯本主页及相关权利人的合法权利转载前务必署名本文莋者并以超链接形式注明内容来自本主页,以免带来不必要的麻烦

}

我要回帖

更多关于 对讲机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信