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 ...
随机推荐
- Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- 关于Vue单页面实现微信分享的Bug
// 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的“#”会被去掉并追加?from= & Timeline= 之类的后缀参数,这就造成了分享出去的链接只能 ...
- nginx的命令
- 把一个syn报文给rst掉
下面展示一个极其简单的例子,看如何使用netfilter来将一个指定端口的syn报文给rst掉. //************************************************* ...
- VB6 Collection实现百万文本去重
上一篇数组的去重说到,对于千次计算以上的去重基本上特别的吃力,这里就介绍一种方法,通过Collection集合对象来过滤重复. Option Explicit '//By: InkHin '// 参考 ...
- 解决ajax请求默认不支持重定向问题
1,Ajax默认是不支持重定向的,只局部刷新数据,不跳转页面. 2,后台代码处理: @RequestMapping("/updateCurrentUser") public Str ...
- MIP如何为页面加速?
MIP是近日由百度发起的开源项目,它的核心是一套应用于移动网页的开放性技术标准,通过提供MIP-HTML规范.MIP-JS运行环境以及MIP-Cache页面缓存系统,实现移动网页加速. 换言之就是,M ...
- C# 加载静态资源问题
加载的格式是这样:
- 使用拦截器对前端传入的字符串进行trim操作
@Before("apiItf()") public void before(JoinPoint joinPoint) throws Exception { Object[] ar ...
- 服务器端AJAX的Servlet代码实现
package com.itheima.servlet; import java.io.IOException; import javax.servlet.ServletException; impo ...