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 ... 
随机推荐
- Android短信过滤项目中的观察者模式
			观察者模式: 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式提供了一种对象设计, 让主题和观察者之间松耦合.主题只知道观察者实现了某个接 ... 
- azkaban使用--邮件发送配置
			前置条件:你的服务器是可以连外网. 当任务是异步定时的,我们对于结果的感知往往没有手动跑脚本那么及时,但是如果任何一个任务运行失败可能都会引起一些列问题,在这个情况下消息通知就很重要了,azkaban ... 
- leetcode974
			这道题目描述很清晰,直接两层循环,代码如下: class Solution(object): def subarraysDivByK(self, A: 'List[int]', K: int) -&g ... 
- Jeecg-Boot 1.0版本发布,企业级快速开发平台
			Jeecg-Boot 一款基于代码生成器的J2EE快速开发框架! 采用前后端分离技术: SpringBoot,Mybatis-plus,Shiro,JWT,Vue & Ant Design. ... 
- JAVA的第二次作业
			1.编写“人”类及其测试类.1.1 “人”类: 类名:Person 属性:姓名.性别.年龄.身份证号码 方法:在控制台输出各个信息1.2 测试类 类名:TestPerson 方法:main ... 
- Code First 不自动生成数据库
			工具--〉程序包管理器控制台 k1. 启用迁移: Enable-Migrations Enable-Migrations -ContextTypeName Mvc4WebSite.Models.Mvc ... 
- vuecli3.0安装搭建项目
			1. npm install -g @vue/cli 2. vue create wechat Linter / Formatter 可以不选 检查空格的 //选择less //标准eslint // ... 
- Django SCRF跨站点请求伪造
			使用Django发POSTt请求的时候经常会遇到Forbidden的错误,然后直接了当的方法就是去setting里面吧csrf中间件注释掉,其实csrf是django给我们提供的防护措施. CSRF就 ... 
- vue_element_vue 引入路径@
			build/webpack.base.conf.js resolve: { extensions: ['.js', '.vue', '.json'], alias: { '@': resolve('s ... 
- Python学习—数据库篇之初识mysql
			一.下载与安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好 ... 
