开发者社区> 问答> 正文

Android容器获取不到 navigator.mediaDevices.getUserMedia

您好,关于同样一段代码,如下,


navigator.mediaDevices.getUserMedia(constraints).then((stream) => {
          this.video.addEventListener('loadedmetadata', () => {
          this.video.setAttribute('width', this.video.videoWidth);
          this.video.setAttribute('height', this.video.videoHeight);
          resolve();
      });
      this.video.srcObject = stream;
  })

安卓 报错 获取不到navigator.mediaDevices.getUserMedia

iOS 可以正常获取

展开
收起
helowold 2023-06-29 15:16:14 1662 0
4 条回答
写回答
取消 提交回答
  • 在 Android 容器中,如果您无法通过 navigator.mediaDevices.getUserMedia 方法获取到用户媒体(例如摄像头或麦克风)可能有以下几个原因和解决方法:

    1. 权限问题:确保您的应用已经请求了适当的权限。在 Android 上,您需要在应用的 manifest 文件中声明适当的权限,例如 CAMERA 和 RECORD_AUDIO 权限。同时,在运行时也要确保您的应用已经获得了这些权限。您可以使用系统提供的 API 请求这些权限,例如 requestPermissions

    2. WebView 配置问题:检查您的 WebView 配置是否允许访问用户媒体设备。您可以在创建 WebView 实例时设置相关配置,例如启用 JavaScript、启用媒体访问等。确保您已经正确配置了相关选项。

    3. WebRTC 支持:确保您的 Android 容器支持 WebRTC 技术。getUserMedia 方法是 WebRTC 的一部分,它允许访问用户媒体设备。确保您的容器支持 WebRTC,并且已正确配置和集成相应的库和功能。

    4. Android 版本支持:某些 Android 版本可能对 getUserMedia 的支持有所限制或差异。请检查您的目标 Android 版本以及 WebView 的版本,并确保它们与 getUserMedia 相关支持的最小要求相匹配。

    2023-07-13 22:03:49
    赞同 展开评论 打赏
  • 在 Android 上,navigator.mediaDevices.getUserMedia 方法可能无法直接使用,因为 Android 平台对于媒体设备的访问有一些限制。

    为了在 Android 上使用 getUserMedia 方法,您可以尝试使用 WebRTC 库或其他媒体库,如 cordova-plugin-media-capture

    以下是使用 cordova-plugin-media-capture 插件获取媒体流的示例代码:

    首先,在您的项目中安装 cordova-plugin-media-capture 插件:

    cordova plugin add cordova-plugin-media-capture
    

    然后,您可以使用以下代码获取媒体流:

    navigator.device.capture.captureVideo(
      (mediaFiles) => {
        // 获取到媒体文件后的处理逻辑
        const video = mediaFiles[0];
        const videoUrl = video.fullPath;
        // 可以将 videoUrl 赋值给 video 标签的 src 属性来显示视频
      },
      (error) => {
        // 获取媒体流失败的处理逻辑
        console.error('Error capturing video: ', error);
      },
      {
        limit: 1,
        duration: 10,
        quality: 1
      }
    );
    

    上述代码使用 navigator.device.capture.captureVideo 方法来捕获视频,您可以根据需要调整选项,如 limit(限制文件数量)、duration(限制录制时长)和 quality(录制质量)。

    请注意,使用 cordova-plugin-media-capture 插件可能需要您进行额外的配置和适配工作,具体取决于您的项目需求和环境。

    2023-06-29 18:01:08
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    这是因为Android浏览器的兼容性问题,可能不支持getUserMedia方法。您可以尝试使用polyfill或WebRTC库来解决这个问题。此外,您还可以检查您的浏览器是否支持getUserMedia方法,可以使用以下代码进行检测:

    if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { // 支持 getUserMedia 方法 } else { // 不支持 getUserMedia 方法 }

    2023-06-29 17:12:39
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    应该是你安卓的一些权限没有开放,你检查下。

    2023-06-29 17:03:52
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载