getUserMedia Android Webview 离子

Posted

技术标签:

【中文标题】getUserMedia Android Webview 离子【英文标题】:getUserMedia Android Webview Ionic 【发布时间】:2015-05-10 03:17:59 【问题描述】:

我正在尝试通过使用 getUserMedia 获取 android 设备的相机流来做一些基本的事情。据我了解,我正在运行的 Android Lollipop 应该支持此功能,但即使权限设置为允许视频和音频,我对媒体流的请求也会被自动拒绝。

所以我尝试使用带有 Ionic 的 Crosswalk,我可以获得媒体流。数据只是空的。据我了解,这应该得到支持。还有其他人有使用 Cordova / Ionic 获取相机视频流数据的经验吗?

【问题讨论】:

您是否成功获取了麦克风数据?使用 AudioContext 和 ScriptNode 处理数据,但缓冲区包含所有零。设置权限并没有解决问题。 【参考方案1】:

确保您在platforms/android/AndroidManifest.xml 中拥有RECORD_AUDIO 和CAMERA 权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />

Cordova 负责 Cordova API 的必要权限并将它们添加到清单文件中,但它不用于 html5 API。

【讨论】:

你好 oaleynik,谢谢你的这篇文章。我的 ionic 应用程序也在尝试获取用户媒体,但是在完成了这里所说的所有操作之后,我的手机(Android、Nexus5)上的应用程序无法获取 getUserMedia(从 chrome 远程检查时我可以看到它)。你能帮我解决这个问题吗?将不胜感激! 这对我有用!我还必须以编程方式触发提示以接受权限,否则用户将不得不转到应用程序设置并手动进行。【参考方案2】:

在更改 Android 权限之前,接受的答案肯定会起作用。您现在可以在使用时请求使用本机功能(老实说,这比在启动时更有意义),因此我强烈建议您使用Android Permissions plugin,它允许您以编程方式和按需检查和请求权限。

对于已接受答案中的相同用例,您将执行以下操作:

var permissions = cordova.plugins.permissions;

var permList = [
  permissions.CAMERA,
  permissions.RECORD_AUDIO
];

permissions.requestPermissions(permList, permCallBackSuccess, permCallBackError);

我希望这对以后的人有所帮助,因为它为我节省了很多时间!

【讨论】:

谢谢伙计。此外,对于 android 6 这还不够。您还需要在 AndroidManifest.xml 中复制权限。这是我的权限列表:permissions.CAMERA、permissions.MICROPHONE、permissions.MODIFY_AUDIO_SETTINGS、permissions.RECORD_AUDIO、permissions.CAPTURE_VIDEO_OUTPUT、permissions.CAPTURE_SECURE_VIDEO_OUTPUT、permissions.CAPTURE_AUDIO_OUTPUT【参考方案3】:

问题已由https://github.com/MobileChromeApps/cordova-plugin-chrome-apps-audioCapture修复

$ cordova plugin add cordova-plugin-chrome-apps-audiocapture --save
$ cordova build
$ cordova run android

现在可以使用audioContext.createScriptProcessor 处理麦克风流。

ps。看来,要使此功能起作用,仅RECORD_AUDIO 权限是不够的,该插件还使用了MODIFY_AUDIO_SETTINGS

【讨论】:

我认为这仅适用于 AudioContext-我在 WebRTC 的上下文中使用我的应用程序,因此上述权限对我来说很好。很高兴知道这一点!

以上是关于getUserMedia Android Webview 离子的主要内容,如果未能解决你的问题,请参考以下文章

(Android) / Chrome getUserMedia() 约束应该如何格式化?

替换移动浏览器的 getUserMedia()

undefined 不是对象(评估“navigation.mediaDevices.getUserMedia”)

React Native:Webview getUserMedia无法正常工作(onPermissionRequest覆盖?)

React Native:Webview getUserMedia 不起作用(onPermissionRequest 覆盖?)

通过cordova访问android/ios/win设备摄像头