H5采集pcm流转换采样率实时发送到服务端
function startTalk(ws2, button) {
var arrBuffer = new ArrayBuffer(320 * 2);
var sendBuffer = new DataView(arrBuffer);
var sendBufferindex = 0;
if (navigator.getUserMedia) {
navigator.getUserMedia(
{ audio: true },
function (stream) {
button.text("挂 断")
button.attr("status","doing")
var context = new AudioContext();
var audioInput = context.createMediaStreamSource(stream);
var recorder = context.createScriptProcessor(1024, 1, 1);
audioInput.connect(recorder);
recorder.connect(context.destination);
recorder.onaudioprocess = function (e) {
var buffer = e.inputBuffer.getChannelData(0);
var arrayBuffer = context.createBuffer(1, 1024, context.sampleRate);
var nowBuffering = arrayBuffer.getChannelData(0);
for (var i = 0; i < arrayBuffer.length; i++) {
nowBuffering[i] = buffer[i]
}
var offctx = new OfflineAudioContext(1, parseInt(1024*16000/context.sampleRate), 16000);
var source = offctx.createBufferSource();
source.buffer = arrayBuffer;
source.connect(offctx.destination);
source.start();
offctx.startRendering().then(function(renderedBuffer) {
var channetData = renderedBuffer.getChannelData(0)
source.stop();
var index = 0
var length = channetData.length
while (index < length) {
var selectBuffer = channetData[index]
var s = Math.max(-1, Math.min(1, selectBuffer));
var point = s < 0 ? s * 0x8000 : s * 0x7FFF;
if (sendBufferindex < 320 * 2) {
sendBuffer.setInt16(sendBufferindex, point, true);
} else {
var sendData = {
"cmd":"pcm",
"data":{
"buffer": Array.from(new Int16Array(arrBuffer)),
"timestamp": new Date().getTime(),
}
}
if(ws2.readyState == ws2.CLOSING || ws2.readyState == ws2.CLOSED) {
recorder.disconnect()
return
}
ws2.send(JSON.stringify(sendData))
sendBuffer = new DataView(arrBuffer);
sendBufferindex = 0;
sendBuffer.setInt16(sendBufferindex, point, true);
}
index++;
sendBufferindex = sendBufferindex + 2;
}
})
}
},
function() {
ws2.close()
button.attr("status","close")
button.text("通 话")
alert('请插入耳机');
H5采集pcm流转换采样率实时发送到服务端的更多相关文章
- node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
- cropper.js实现图片裁剪预览并转换为base64发送至服务端。
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
- cookie是如何保存到客户端,又是如何发送到服务端
Cookie相关的Http头 有 两个Http头部和Cookie有关:Set-Cookie和Cookie. Set-Cookie由服务器发送,它包含在响应请求的头部中.它用于在客户端创 ...
- 微信小程序填坑之路其一:wx.request发送与服务端接受
一.序言 应公司要求要求,要用小程序开发一个信息录入系统.没办法只能听话来填坑. 先介绍一下环境:客户端——小程序:服务端——java:数据库——mysql:服务器——centos7 需求:客户端输入 ...
- C#socket客户端自己输入消息发送到服务端通信实现通信
一,服务端代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 记录下httpclient 发送请求 服务端用@RequestBody 自动接收参数 报415
注解是post方式,那么检查以下内容:1. 你是否用了post请求2. 请求是否发送了数据3. 请求内容格式需要是 application/json .jquery 设置 contentType,-- ...
- 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据
这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...
- PHP-Socket服务端客户端发送接收通信实例详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fighter.blog.51cto.com/1318618/1533957 So ...
- rtsp实时流通过rtmp推送到服务端
很多朋友都会问到rtsp如何通过rtmp协议推送到服务端,正好前段时间开发了这个功能写在这里,和大家分享下. 首先我想说的是:ffmpeg可以实现这个功能.ffmpeg支持rtsp协议,也支持rtmp ...
随机推荐
- Java JTable列顺序和列宽度保存在用户本地
上周碰到了一个棘手的需求,就是要把用JTable的列顺序和列宽度保存下来,这次用户调整了列宽度,关闭程序,下次再打开时,这个列的宽还是要保持,因为SWing的特性,都是在程序启动时就确定了列顺序和列宽 ...
- Nginx之 try_files 指令
location / { try_files $uri $uri/ /index.php; } 当用户请求 http://localhost/example 时,这里的 $uri 就是 /exampl ...
- [Linux]系统管理: 进程管理(ps/top/pstree/kill/pkill), 工作管理, 系统资源查看, 系统定时任务
进程管理:查看与终止 进程查看 1. 进程是正在执行的程序或命令. 2. 进程管理的作用: 判断服务器健康状态, 查看系统中所有进程 杀死进程 3. 查看系统中所有进程 ps aux # 查看系 ...
- 网络yum源制作
思路:在网络上准备一个主机,在其中安装一个web服务器软件(比如apache),然后创建一个目录,在这个目录中准备上yum仓库的全部资源,如果用户可以通过网络访问到该主机的这个目录,那么这个目录就成为 ...
- 20175213 2018-2019-2 《Java程序设计》第4周学习总结
## 教材学习内容总结 在第四周的学习过程中,我学习了第五章的内容. 第五章内容总结: 1.子类继承的方法只能操作子类继承和隐藏的成员变量. 2.子类和父类在同一包的继承性 子类自然继承了其父类中不是 ...
- 安卓出现错误: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText
Caused by: Java.lang.ClassCastException: Android.widget.TextView cannot be cast to android.widget.Ed ...
- failed to find global analyzer [uax_url_email]
ES的默认分词设置是standard,这个在中文分词时就比较尴尬了,会单字拆分,比如我搜索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分词,然后搜出来的都是些“清清的河水”,“中华儿 ...
- centos7 tomcat8+jdk1.8
(1) 下载Tomcat8压缩包进入 http://tomcat.apache.org/download-80.cgi 在binary Distributions下面,选择tar.gz包下载 [tar ...
- day48 前端高级选择器优先级
复习 1. 基础选择器 标签选择器(div) | 类选择器(.div1) | id选择器(#div2) <div class="div1" id="div2&quo ...
- React中this.props的主要属性
this.props主要包含:history属性.location属性.match属性 ①history属性又包含 ②location属性又包含 ③match属性又包含