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流转换采样率实时发送到服务端的更多相关文章

  1. node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

  2. cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

  3. cookie是如何保存到客户端,又是如何发送到服务端

    Cookie相关的Http头     有 两个Http头部和Cookie有关:Set-Cookie和Cookie.     Set-Cookie由服务器发送,它包含在响应请求的头部中.它用于在客户端创 ...

  4. 微信小程序填坑之路其一:wx.request发送与服务端接受

    一.序言 应公司要求要求,要用小程序开发一个信息录入系统.没办法只能听话来填坑. 先介绍一下环境:客户端——小程序:服务端——java:数据库——mysql:服务器——centos7 需求:客户端输入 ...

  5. C#socket客户端自己输入消息发送到服务端通信实现通信

    一,服务端代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  6. 记录下httpclient 发送请求 服务端用@RequestBody 自动接收参数 报415

    注解是post方式,那么检查以下内容:1. 你是否用了post请求2. 请求是否发送了数据3. 请求内容格式需要是 application/json .jquery 设置 contentType,-- ...

  7. 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据

    这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...

  8. PHP-Socket服务端客户端发送接收通信实例详解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fighter.blog.51cto.com/1318618/1533957 So ...

  9. rtsp实时流通过rtmp推送到服务端

    很多朋友都会问到rtsp如何通过rtmp协议推送到服务端,正好前段时间开发了这个功能写在这里,和大家分享下. 首先我想说的是:ffmpeg可以实现这个功能.ffmpeg支持rtsp协议,也支持rtmp ...

随机推荐

  1. POIUtils 导出 poi Test 100w 600w 条数据

    依赖: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-l ...

  2. 阿里云 RDS for MySQL 物理备份文件恢复到自建数据库

    想把阿里云的Mysql 生成的RAS 文件.tar文件 恢复到本地自建mysql, 遇到的坑.希望帮助大家 阿里云提供的地址 https://help.aliyun.com/knowledge_det ...

  3. MM-物料分类帐差异分摊

    物料分类帐差异分摊-MR21-MR22: https://wenku.baidu.com/view/6599e8f326fff705cc170ad8.html

  4. python之路:数据类型初识

    python开发之路:数据类型初识 数据类型非常重要.不过我这么说吧,他不重要我还讲个屁? 好,既然有人对数据类型不了解,我就讲一讲吧.反正这东西不需要什么python代码. 数据类型我讲的很死板.. ...

  5. Linux命令:source

    语法 source filename 说明 . 的同义词

  6. DDB---查询与优化

    摘要:分布式数据库(Distributed DB)是数据库中非常重要的一个部分,随着要处理的数据越来越多,分布式逐渐成为了一种策略.主要有:分布式操作系统,分布式程序设计语言,分布式文件系统,分布式数 ...

  7. 20175314 《Java程序设计》第九周学习总结

    20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...

  8. 杭电oj 4004---The Frog Games java解法

    import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...

  9. 47 【golang】mysql操作

    新做了个demo,可以简单了解下mysql的操作:https://github.com/helww/mylab/tree/master/go/mysql

  10. excel 上传读写到数据库

    <HTML> <div class="input-group"> <form id="abc" action="http ...