gpt4 book ai didi

Cordova Android WebRTC 无法捕获视频 - 仅限 AUDO。权限问题?

转载 作者:行者123 更新时间:2023-12-04 12:50:54 25 4
gpt4 key购买 nike

我有一个 cordova 应用程序,它使用 WebRTC 和 RTCPeerConnection 连接两个客户端以允许他们聊天。它在浏览器和 iOS 上(使用 webRTC shim)成功运行。但是,在 Android 上仅捕获和发送音频,没有视频!这是代码。该视频甚至没有附加到#localVideo 元素(which might be a whole other problem in and of itself)!

navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia
navigator.getUserMedia({video: true, audio: true}, function (stream) {
var video = document.getElementById('localVideo')
video.src = window.URL.createObjectURL(stream)
video.play()
window.myRTC.pc1.addStream(stream)
console.log(stream)
console.log('adding stream to pc1')
window.myRTC.setupDC1()
window.myRTC.pc1.createOffer(function (desc) {
window.myRTC.pc1.setLocalDescription(desc, function () {}, function () {})
console.log('created local offer', desc)
},
function () { console.warn("Couldn't create offer") },
window.myRTC.sdpConstraints)
}, function (error) {
console.log('Error adding stream to pc1: ' + error)
})

我相当确信这是一个权限问题。这是我手机上应用程序权限的屏幕截图: my app's permissions

您可以看到“录制音频”存在,但没有摄像头或捕获视频。

这是我的 config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="org.unicomm" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
....
<platform name="android">
<config-file parent="/manifest" target="AndroidManifest.xml">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
</config-file>
</platform>
</widget>

奇怪的是,并不是所有这些权限都写入了我的 AndroidManifest.xml:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="org.unicomm" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
</manifest>

作为最后的努力,我尝试使用 permissions plugin :

var permissions = cordova.plugins.permissions;
permissions.requestPermissions(
[permissions.CAMERA,permissions.RECORD_AUDIO,permissions.RECORD_VIDEO],
function(status) {console.log(status)
if(!status.hasPermission) {
errorCallback();
} else {
run();
}
},
function() {
alert("We need those permissions!")
}
);

但它只是返回 {hasPermission: true}!

最佳答案

不知道那个 clown 是谁被否决了……尤其是在没有发表评论或理由的情况下。如果我的问题不好,或者在某种程度上是错误的,我真的很想知道为什么。

最终是权限问题。我不知道我的 config.xml 做错了什么,以为我在关注 cordova 文档。结束安装 this plugin .它最终根据我的 config.xml 对 AndroidManifest.xml 进行了更改。

这是我使用的 config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="org.unicomm" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
...
<plugin name="cordova-plugin-settings-hook" spec="~0.2.3" />
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-intent href="stun:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-permission android:name="android.permission.INTERNET" />
</config-file>
</platform>
...
</widget>

WebRTC 现在工作了!哇!

关于Cordova Android WebRTC 无法捕获视频 - 仅限 AUDO。权限问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38820234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com