我正在修补Android Things v1.0,并尝试在RaspberryPi 3上使用WebView让WebRTC正常工作。Which in theory should be possible。
我理解可能是RPi 3上的camera HAL pipeline only supports 1 stream,这可能是问题的一部分。但是,除非getUserMedia()尝试抓取的不仅仅是单个流,而且我认为不是,它应该只返回本地视频流:
navigator.mediaDevices.getUserMedia({
audio: false,
video: true
})
.then(
gotUserMedia,
didntGetUserMedia
);
永远不会调用 gotUserMedia
,只调用didntGetUserMedia
。此外:
If the browser cannot find all media tracks with the specified types that meet the
constraints given, then the returned promise is rejected with NotFoundError.
这不是抛出的错误:
object NavigatorUserMediaError
我正在使用可在Mac,Windows和Ubuntu上与Chrome浏览器配合使用的WebRTC Web应用程序来完成所有这些工作。问题似乎在RPi周围。如果我加载Raspbian操作系统并使用Chromium(which supports WebRTC),它仍然无法获取本地视频流。也许问题是相关的?
如果我使用Raspbian
上的原生应用打开相机 1>},如果我只是使用Android Things
预览它,那么也能正常工作来自Webview所在的同一个Android应用中的textureView
- 但不是同时进行的。
授予的权限已手动完成,并在Manifest中声明:
adb shell pm grant com.rpi.garagetinker android.permission.CAMERA
adb shell pm grant com.rpi.garagetinker android.permission.INTERNET
adb shell pm grant com.rpi.garagetinker android.permission.WRITE_EXTERNAL_STORAGE
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我没有挖掘Chromium上的错误,但Android Things RPi和Webview的logcat显示了权限问题,这可能与问题有关(鉴于上面的getUserMedia()错误):
12-31 18:00:07.491 772-772/? E//system/bin/webview_zygote32: Failed to make and chown /acct/uid_99000: Permission denied
12-31 18:00:07.491 299-310/? I/ActivityManager: Start proc 772:com.android.webview:sandboxed_process0/u0i0 for webview_service com.rpi.garagetinker/org.chromium.content.app.SandboxedProcessService0
我不知道这是不是问题,如果确定的话,我不确定如何修复。 我认为这是一个权限问题,但我可以授予哪些其他权限?任何指导都表示赞赏。
注意:
只有一个WebView正在使用中,这是安装在新Android Things图像上的唯一应用。
在涉及多个浏览器时解决问题的帖子like this没有直接帮助,但建议其他人可能正在使用媒体句柄。
另外,Raspbian上的Chromium也没有提示访问视频(不存在的音频),就像在Chrome其他操作系统上那样。
WebRTC正在使用Chromium开发Raspbian。
答案 0 :(得分:0)
我对WebRTC API与本机层的交互方式不是很熟悉,但是您可能需要其他权限才能成功进行调用。例如,Android WebRTC sample还请求访问音频的权限(除其他外):
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
我还建议您回顾一下Android Things video call sample,它展示了Android Things上的本机WebRTC SDK,而不是全部通过WebView进行管道传输。
最后,请澄清一下……
注意:Android Things在启动时会授予权限,因此Pi已多次重启。
这是不正确的;此行为已从开发人员预览中删除。危险权限必须由Android Things控制台或开发人员工具明确授予。例如,当Android Studio将APK部署到设备时,它会使用adb install -g <apk-file>
明确授予所有请求的权限。