非https或直接使用ip网址不能使用浏览器录音,比如getUserMedia

在现代浏览器的安全策略中,存在一些限制,这些限制会影响非HTTPS网站的功能,包括录音功能。

1. 安全上下文:浏览器要求某些强大的API,如getUserMedia(用于访问摄像头和麦克风),只能在安全上下文中运行。安全上下文通常指的是通过HTTPS加载的页面,而不是通过HTTP或直接通过IP地址访问的页面。

2. HTTPS要求:为了保护用户隐私和数据安全,许多浏览器强制要求使用HTTPS来访问敏感的API,如录音、地理位置、推送通知等。这是为了防止中间人攻击和数据泄露。

3. 混合内容:即使你的页面是通过HTTPS加载的,如果你尝试从HTTP资源加载内容(如脚本、样式表或媒体),浏览器可能会阻止这些请求,因为这可能导致混合内容问题,同样威胁到用户的安全。

4. 浏览器策略:不同的浏览器可能有不同的策略和实现细节,但大多数现代浏览器都遵循这些基本的安全原则。

因此,如果你尝试在一个非HTTPS的IP网址上使用浏览器的录音功能,很可能会遇到权限拒绝或功能不可用的情况。为了确保这些功能正常工作,建议将网站迁移到HTTPS。

如果需要在本地开发环境中测试这些功能,一些浏览器可能允许在非HTTPS环境下使用这些API,但这通常需要你在浏览器的高级设置中调整相关权限或安全策略。这些设置通常不适用于生产环境,仅用于开发和测试目的。

3.1.1.1 在线语音转写接口(16K&16bit)(可对接) WebSocket: /cosmo-guidance/voice?bizId=1234&lang=chin&scene=ast&ip=客户端地址&appId=应用名称&props=area=区域编码,org=单位编码 接口功能 发送语音音频byte[] ,执行语音转写,将转。引擎端约定,发送空字节数组(new byte[])后,引擎端会关闭与服务端的websocket连接,所以语音发送完毕后需要发送空字节数组通知引擎端关闭连接 备注:接口支持多语种,中文支持16K采样率,不同场景入参lang值关系 chin:中文16K,engl:英文,uyhu:维语(暂不支持) 接口路径 ws://host:port/cosmo-guidance/voice?lang=chin&bizId=1234&scene=ast&ip=客户端地址&appId=应用名称&props=area=区域编码,org=单位编码 url说明 字段 必选/可选 类型 描述 lang 可选 string 语音转写语种,chin:汉语16K,chin-8k:汉语8K,engl:英文 bizId 必选 string 业务ID,针对语音转写场景为该业务ID scene 必选 string 业务场景 ip 可选 string 客户端ip地址,注意若直接请求guidance服务且guidance启用了参数拦截器则必须传入该参数,其它情况不需要传入 appId 可选 string 发出请求的应用名称,注意若直接请求guidance服务且guidance启用了参数拦截器则必须传入该参数,其它情况不需要传入 props 可选 string 扩展字段,键值对形式逗号隔开,现需填写两个字段,区域编码area(如340100),单位编码org(如C10),例子:props=area=340100,org=C10 返回结果 segId   段id msgtype String 消息类型: sentence最终结果  Progressive为中间结果 必须 bg Int 开始时间,单位10ms 结果为sentence时必须 ed Int 结束时间,单位10ms 结果为sentence时必须 sn Int 结果序号 结果为sentence时必须 ei Int 暂不使用 否 ls Bool 最后结果标志,true,false 否 metadata   暂不使用 否 vad   Vad信息: Ws 句子信息 Bg 句子开始时间 Ed 句子结束时间 结果为sentence时必须 ws   转写结果信息 必须  cw.sf 顺滑标志,顺滑词为一些语气词和重复词,应用端选择是否过滤 cw.w 独立词  cw.wp 顺滑词由wp字段值进行标识,s-顺滑字,n-普通字符,p标识标点符号,g语义分段标志wp为是s是内核对顺滑词的标记,sf为1是服务对顺滑词的标记。   cw.wb: 词的开始位置, cw.we: 词的结束位置 需要配置词边界资源,不然默认为0(数值帧数,*10为毫秒) speakerItem 说话人 value:说话人信息 消息事例 请求:ws://10.5.24.9:8090/cosmo-guidance/voice/test_path_query?lang=chin&bizId=1234 返回值:{ "segId":3, "bg":10380, "ed":10940, "ei":0, "ls":false, "metadata":"", "msgtype":"progressive", "sn":0, "pa":0, "vad":{ "ws":[{ "bg":1038, "ed":1094 }] }, "ws":[{ "bg":0, "cw":[{ "sc":"0.00", "sf":0, "w":",今天", "wb":0, "wc":"0.00", "we":56, "wp":"n" }] }], "speakerItem":{ "socre":0.0, "value":"" } }根据接口文档生成前端调用在线音频转写ws服务
03-19
根据提供的接口文档,以下是基于 WebSocket 的前端调用示例代码,并结合文档中的细节进行实现: ### 前端调用在线音频转写 WS 服务 (JavaScript 实现) ```javascript // 初始化 WebSocket 连接 function initWebSocket(urlParams) { const wsUrl = `ws://${urlParams.host}:${urlParams.port}/cosmo-guidance/voice?` + `lang=${urlParams.lang}&bizId=${urlParams.bizId}&scene=ast&` + `ip=${urlParams.ip || ''}&appId=${urlParams.appId || ''}&props=${urlParams.props || ''}`; let socket = new WebSocket(wsUrl); // 打开连接事件处理函数 socket.onopen = function () { console.log("WebSocket 已打开"); // 模拟读取麦克风数据并发送到服务器 startStreamingAudio(socket); }; // 接收消息事件处理函数 socket.onmessage = function (event) { try { const data = JSON.parse(event.data); // 解析返回的消息 handleResponse(data); } catch (e) { console.error("解析失败:", e.message); } }; // 关闭连接事件处理函数 socket.onclose = function () { console.log("WebSocket 已关闭"); }; return socket; } // 发送语音流到 WebSocket function startStreamingAudio(socket) { navigator.mediaDevices.getUserMedia({ audio: true }) .then(function(stream) { const mediaRecorder = new MediaRecorder(stream); // 将录音分割成小块并发送给服务器 mediaRecorder.ondataavailable = function(e) { if (e.data.size > 0) { const byteArray = new Uint8Array(e.data.arrayBuffer()); socket.send(byteArray.buffer); } }; mediaRecorder.start(100); // 每隔 100ms 录制一段音频 setTimeout(() => { mediaRecorder.stop(); // 结束录制 setTimeout(() => { socket.send(new Uint8Array([]).buffer); // 发送空字节告诉服务器结束传输 }, 1000); }, 10000); // 示例:录制持续时间为 10 秒钟 }); } // 处理从服务器接收的数据 function handleResponse(responseData) { console.log('收到响应:', responseData); if (responseData.msgtype === 'progressive') { console.log(`中间结果 - 时间范围:${responseData.bg}-${responseData.ed}, 内容: ${responseData.ws[0].cw.map(item => item.w).join(' ')}`); } if (responseData.ls && responseData.msgtype !== 'progressive') { console.log('最终结果已到达'); } } ``` --- ### 使用说明: 1. **创建 URL 参数** 根据需求设置必要的参数。例如: ```javascript const urlParams = { host: "10.5.24.9", // 主机地址 port: "8090", // 端口 lang: "chin", // 转写语言 bizId: "1234", // 业务 ID ip: "", // 客户端 IP 地址(可选) appId: "", // 应用名称(可选) props: "" // 扩展字段(可选) }; ``` 2. **初始化 WebSocket** 调用 `initWebSocket(urlParams)` 函数来建立 WebSocket 连接。 3. **启动音频采集** 调用浏览器设备权限并通过 `getUserMedia()` 获取用户的声音输入。通过 `startStreamingAudio()` 来定时向 WebSocket 发送语音二进制数据。 4. **停止传输** 当完成所有音频数据的发送后,发送一个空数组通知服务端断开 WebSocket 并释放资源。 --- ### 注意事项 - 如果需要长时间保持 WebSocket 开启状态,请定期检查网络状况。 - 若想过滤掉顺滑词标注标点符号,可以根据返回的 `wp` 字段来进行筛选。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值