android 局域网对讲机
http://hkk.iteye.com/blog/1248259
参考了一些代码,实现了局域网的实时语音对讲功能,只要同网段局域网即可通话,文字聊天,传输文件等,包含了飞鸽传输的功能。
主要是录音发送和接收播放录音比较重要。录音线程:
![](http://hkk.iteye.com/images/icon_star.png)
- public class AudioSend extends Thread {
- Person person = null;
- public AudioSend(Person person) {
- this.person = person;
- // android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
- }
- @Override
- public void run() {
- super.run();
- Socket socket = null;
- OutputStream os = null;
- AudioRecord recorder = null;
- try {
- socket = new Socket(person.ipAddress, Constant.AUDIO_PORT);
- socket.setSoTimeout(5000);
- os = socket.getOutputStream();
- // 获得录音缓冲区大小
- int bufferSize = AudioRecord.getMinBufferSize(FlyGeonApplication.getInstance().sampRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
- AudioFormat.ENCODING_PCM_16BIT);
- Log.e("", "录音缓冲区大小"+bufferSize);
- // 获得录音机对象
- recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, FlyGeonApplication.getInstance().sampRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
- AudioFormat.ENCODING_PCM_16BIT, bufferSize * 10);
- recorder.startRecording();// 开始录音
- byte[] readBuffer = new byte[640];// 录音缓冲区
- int length = 0;
- while (!isStopTalk) {
- length = recorder.read(readBuffer, 0, 640);// 从mic读取音频数据
- if (length > 0 && length % 2 == 0) {
- os.write(readBuffer, 0, length);// 写入到输出流,把音频数据通过网络发送给对方
- }
- }
- recorder.stop();
- recorder.release();
- recorder = null;
- os.close();
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
接收播放线程
![](http://hkk.iteye.com/images/icon_star.png)
- public class AudioPlay extends Thread {
- Socket socket = null;
- public AudioPlay(Socket socket) {
- this.socket = socket;
- // android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
- }
- @Override
- public void run() {
- super.run();
- try {
- InputStream is = socket.getInputStream();
- // 获得音频缓冲区大小
- int bufferSize = android.media.AudioTrack.getMinBufferSize(FlyGeonApplication.getInstance().sampRate,
- AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
- Log.e("", "播放缓冲区大小"+bufferSize);
- // 获得音轨对象
- AudioTrack player = new AudioTrack(FlyGeonApplication.getInstance().getVoiceMode(), FlyGeonApplication.getInstance().sampRate,
- AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize,
- AudioTrack.MODE_STREAM);
- // 设置喇叭音量
- player.setStereoVolume(1.0f, 1.0f);
- // 开始播放声音
- player.play();
- byte[] audio = new byte[160];// 音频读取缓存
- int length = 0;
- while (!isStopTalk) {
- length = is.read(audio);// 从网络读取音频数据
- byte[] temp = audio.clone();
- if (length > 0 && length % 2 == 0) {
- // for(int
- // i=0;i<length;i++)audio[i]=(byte)(audio[i]*2);//音频放大1倍
- player.write(audio, 0, temp.length);// 播放音频数据
- }
- }
- player.stop();
- player.release();
- player = null;
- is.close();
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
AudioTrack player = new AudioTrack(FlyGeonApplication.getInstance().getVoiceMode(), FlyGeonApplication.getInstance().sampRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize,
AudioTrack.MODE_STREAM);
其中第二个参数与机器有关,一般为8000。我在解决这个问题时 就是遍历一遍常见的可能数值,直到正确为止。
第一个参数是声音的播放模式,可以为听筒模式和扬声器模式。由于扬声器模式会有回音,所以一般用听筒模式即可。
以下是软件截图
apk下载地址
- jywdjj.zip (762.3 KB)
android 局域网对讲机相关推荐
- android对讲机 服务端,Android的WIFI局域网对讲机
https://blog.csdn.net/z979451341/article/details/79280749 (三)Android局域网内语音对讲 基于UDP语音传输 https://blog. ...
- 基于 P2P 技术的 Android 局域网内设备通信实践
Android 局域网内的多设备通信方式有多种,其中常见的方式有: 基于 TCP/UDP 的 Socket 通信 基于 Bluetooth 的近场通信 基于 Wifi 的 Wi-Fi Direct 连 ...
- android 局域网 发现,局域网内android设备发现及通讯
最近一个项目需要实现在局域网内android手机操控另一个没有显示屏的android设备(音箱),具体实现就是手机端向音箱端发送命令字符串,音箱端通过解析命令字符串来完成操作,而手机端也要实时显示音箱 ...
- Android 局域网扫描
本篇简单介绍通过UDP广播扫描局域网设备IP,并且通过ZMQ进行通信. UDP连接 主要流程: 1.1 Step1:主机发送广播信息,并指定接收端的端口(9000) 广播地址(255.255.255. ...
- vlc android局域网rtsp,VLC mosaic分屏显示多路RTSP媒体流问题。
局域网环境内有两台Android机,装了Spydroid来获取传送RTSP媒体流,配置如下: Video Encoder: H.264 Resolution: 640*480 Framerate: 8 ...
- Android局域网实现FTP文件上传下载客户端与服务端
文章目录 前言 一.FTP是什么? 二.使用步骤 1 服务端 1.1 服务端的代码实现 2 客户端 2.1 客户端的代码实现 附件 前言 最近在公司的项目中,使用到了 局域网通信,不同的设备直接传递消 ...
- android局域网视频传输,[Android]如何通过局域网从计算机播放本地视频
与移动电话相比,计算机具有功能强大和存储容量大的优势,但是我们越来越依赖于移动电话等移动设备. 很少打开计算机. 我可以使用计算机为手机等移动设备服务吗?通过在同一网络中设置计算机文件夹共享,移动设备 ...
- Android局域网对讲,基于Android系统机器人局域网对讲方法与流程
本发明涉及智能机器人管理方法,具体涉及一种实现手机端与智能机器人对讲的方法. 背景技术: IP网络对讲采用领先的VOIP技术,将模拟音频信号转化成数字信号,在局域网和广域网上进行双向传送.IP网络对讲 ...
- android局域网udp视频对讲,Android基于UDP语音对讲系列(一)
Android 两部手机通过UDP在局域网内通信 最近学习了一下socket通信相关的知识,决定从UDP进行文字传输开始做起.华为手机效果如图: 我的另一部是小米手机:网络IP为192.168.1.1 ...
最新文章
- alert()的功能_前端实现简单的图片上传小图预览功能
- CentOS7 续续
- Druid 连接池的实用 配置详解
- adb启动失败 ADB server didn't ACK
- 定点c程序之五:定点数的字长效应
- Python的魔法方法 .
- x210-II WinCE启动10s,还可继续优化
- 【华为云技术分享】华为云多元计算+AI 打造企业级智能数据湖
- iOS 关于NSString的一些方法
- windows环境下kafka源代码开发环境搭建
- 【测试】ESP8266ESP32wifi中继器测试数据
- python 串口接收多线程与界面通信_Python之PyQT多线程串口代码分析
- 普莱得电器递交注册:上半年营收3.7亿 拟募资5.6亿
- 74hc595级联c语言程序,stm32使用三片74HC595级联程序代码
- 又是一年金九银十!一起看看这些大厂面试真题查漏补缺吧,程序员翻身之路
- vue实现PDF文件导出
- css 超出显示省略号
- opencv android安装教程,opencv for android安装教程.doc
- C++中常见异常错误
- 英语词组的日常积累(有点长,接近300个)