我正在编写一个具有WebView的应用程序,它通过WebRTC处理语音呼叫 . 麦克风工作正常,因为我已授予WebView权限 .

webView.setWebChromeClient(new WebChromeClient() {

@Override

public void onPermissionRequest(final PermissionRequest request) {

request.grant(request.getResources());

}

后来我决定添加SpeechRecognizer,以便我能够在WebRTC调用期间识别出我在说什么 . 我尝试在同一个活动中进行语音识别工作,后来我在一个单独的服务中完成了它,但不幸的是,它不允许同时工作 . 麦克风被WebView占用,而SpeechRecognizer没有任何声音(RMS一直是-2.12) . 或者,如果我在通过WebView拨打电话之前尝试运行服务,我打电话给的人根本听不到我的声音(SpeechRecognizer占用麦克风而WebView没有得到任何东西) . 如果存在,我希望找到任何解决方案 . 我不是iOS开发人员,但我听说,它可能在iPhone上,所以这是一个惊喜,这在Android设备上是不可能的 . 我的语音识别服务代码公共类RecognitionService extends Service实现RecognitionListener {

private String LOG_TAG = "RecognitionService";

private SpeechRecognizer speech = null;

private Intent recognizerIntent;

public RecognitionService() {

}

@Override

public IBinder onBind(Intent intent) {

// TODO: Return the communication channel to the service.

startRecognition();

return null;

}

@Override

public void onCreate() {

Log.i("Test", "RecognitionService: onCreate");

startRecognition();

}

private void startRecognition() {

speech = SpeechRecognizer.createSpeechRecognizer(this);

speech.setRecognitionListener(this);

recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,

"ru-RU");

recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,

getPackageName());

recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,

RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);

recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

speech.startListening(recognizerIntent);

}

@Override

public void onBeginningOfSpeech() {

Log.i(LOG_TAG, "onBeginningOfSpeech");

}

@Override

public void onBufferReceived(byte[] buffer) {

Log.i(LOG_TAG, "onBufferReceived: " + buffer);

}

@Override

public void onEndOfSpeech() {

Log.i(LOG_TAG, "onEndOfSpeech");

}

@Override

public void onError(int errorCode) {

String errorMessage = getErrorText(errorCode);

Log.d(LOG_TAG, "FAILED " + errorMessage);

speech.destroy();

startRecognition();

}

@Override

public void onEvent(int arg0, Bundle arg1) {

Log.i(LOG_TAG, "onEvent");

}

@Override

public void onPartialResults(Bundle arg0) {

Log.i(LOG_TAG, "onPartialResults");

}

@Override

public void onReadyForSpeech(Bundle arg0) {

Log.i(LOG_TAG, "onReadyForSpeech");

}

@Override

public void onResults(Bundle results) {

Log.i(LOG_TAG, "onResults");

ArrayList matches = results

.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

String text = "";

for (String result : matches)

text += result + "\n";

Toast.makeText(getApplicationContext(),text,Toast.LENGTH_SHORT).show();

speech.destroy();

startRecognition();

}

public static String getErrorText(int errorCode) {

String message;

switch (errorCode) {

case SpeechRecognizer.ERROR_AUDIO:

message = "Audio recording error";

break;

case SpeechRecognizer.ERROR_CLIENT:

message = "Client side error";

break;

case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:

message = "Insufficient permissions";

break;

case SpeechRecognizer.ERROR_NETWORK:

message = "Network error";

break;

case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:

message = "Network timeout";

break;

case SpeechRecognizer.ERROR_NO_MATCH:

message = "No match";

break;

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:

message = "RecognitionService busy";

break;

case SpeechRecognizer.ERROR_SERVER:

message = "error from server";

break;

case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:

message = "No speech input";

break;

default:

message = "Didn't understand, please try again.";

break;

}

return message;

}

@Override

public void onRmsChanged(float rmsdB) {

Log.i(LOG_TAG, "onRmsChanged: " + rmsdB);

}

}

webrtc 语音流java_通过WebView WebRTC从麦克风传输语音时的语音识别相关推荐

  1. webrtc 语音流java_Web语音处理 - Web Audio API WebRTC

    概述 很多设备都具备native的语音输入功能,并提供App来提供语言录入等功能.如果你想开发一些语言应用,那么针对不同的设备平台,包括desktop和移动设备如ios.android,你可能需要使用 ...

  2. 详解 WebRTC 协议原理与框架、WebRTC编程问题迎刃而解

    转载注:本文转载csdn的<极客雨露>博客文章,转载者根据个人理解对此两篇文章内容.进行整编并添加文档标题和编号,增加转载标注内容. 一.WebRTC 是什么 WebRTC,名称源自网页即 ...

  3. webrtc回声消除线程android,android WebRTC 示例demo源码(回音消除)

    [实例简介] 有相关文档和测试demo,回音消除等处理,学习WebRTC.回音消除的同学可以好好参考 [实例截图] [核心代码] /* * Copyright (c) 2013 The WebRTC ...

  4. WebRTC第六步:下载webrtc

    windows  参考文章:http://blog.csdn.net/wpc320/article/details/44918321  https://webrtc.org/native-code/d ...

  5. webrtc 判断是否支持_5G时代-WebRTC音视频高级开发

    目录 1,自定义摄像头分辨率 2,码率限制 3,调整编码器顺序 4,Mesh模型多方通话 5,Janus框架分析 6,Janus Web源码分析 7,Janus Android源码分析 8,基于Jan ...

  6. webRTC(十二):webrtc 传输速率控制

    设置传输速率的值 <div><label>BandWidth:</label><select id="bandwidth" disable ...

  7. webRTC(十四):webrtc 端到端文本聊天

    webrtc 端到端文本聊天是在webRTC(十):webrtc 实现web端对端视频基础上实现的,web端到端纯文本聊天,后面有讲到! 文本传输主要使用的是createDataChannel的api ...

  8. webRTC(十五):webrtc 文件实时传输

    选择文件 function handleFileInputChange() {var file = fileInput.files[0];if (!file) {console.log('No fil ...

  9. WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建

    本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在https://mp.csdn.net/postedit/92436226已经向大家介绍了如何构建信令服务器. ...

最新文章

  1. 《C++primer》第一章--开始
  2. java实现续打功能_浅谈报表工具的打印方案
  3. 如何在input输入框中加一个搜索的小图片_前端开发困难重重,如何把握机会学习?...
  4. JAVA的思维逻辑_[Java教程]计算机程序的思维逻辑
  5. [JavaWeb-CSS]CSS概述
  6. 计算机专业英语第07章,计算机专业英语 -第7章1.ppt
  7. 由一条编译报错信息,引出两个Go编译的重要知识
  8. IDEA 创建git 分支 拉取分支
  9. HyperLPR车牌识别代码解读
  10. 最新!华为HCIA网络工程师题库精讲(02)
  11. 正确写理想的学术论文英文摘要
  12. 用计算机修改图片或照片,【如何更改图片像素】电脑上如何改照片像素
  13. cygwin安装指南
  14. python遇到Segmentation fault (core dumped)调试方法
  15. 中间件常见安全漏洞(转载)
  16. 教你如何用腾讯云服务器备案
  17. 2个阶乘什么意思_两个阶乘符号连在一起是什么意思
  18. SparkSQL专题1 ~ 造数
  19. 2015出现神曲空挡期,玖月奇迹接棒筷子兄弟?
  20. Android中singleTask模式没起作用!!

热门文章

  1. mybatis注册了mapper但是还是报错_springboot整合Mybatis
  2. [OS复习]进程管理2
  3. 用sql从文件中恢复数据库
  4. Tensorflow2.x.x最基础的神经网络(ANN)
  5. 【那么普通却那么自信,一分钟学Source Insight】Source Insight 4 tab设置为4个空格
  6. python设置函数执行时间
  7. 日常生活 -- 面试思考
  8. C语言再学习 -- 存储类、链接
  9. 计算机 网络访问保护,开启win2008网络访问保护的具体步骤
  10. Android Telephony分析(五) ---- TelephonyRegistry详解