Framework7 cordova работа с камерой

Добрый день всем, вопрос не по Framework7, сейчас работаю над видеочатом, вся работа ведется через сервис, от меня только требуется доступ к камере и микрофону. Сделал через navigator.mediaDevices.getUserMedia, в десктопе все отлично, доступ идет, а вот в телефоне нет доступа. Поставил несколько плагинов, ни один не дает доступ, прописал и другие. Все равно доступ закрыт. Может кто, уже работал с этим? подскажите в каком хоть направление двигаться. navigator.mediaDevices.getUserMedia выдает ошибку NotReadableError: could not start video sourse

Вы прописали пермишины? В iOS также нужно указать текст, который будет показываться пользователю при доступе к камере.

вот прописал в манифесте, под ios еще не делал, хотя бы в андроиде запустить
    <manifest android:hardwareAccelerated="true" android:versionCode="10010" android:versionName="1.0.10" package="io.cordova.dospravo" 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" />
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <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:screenOrientation="portrait" 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="26" />
    </manifest>

Не использовал это в своих приложениях, но тут вполне подробная документация и как работать https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

Передавали constraints правильно? Еще может быть что нет поддержки этого API в данном телефоне/OS. Попробуйте в телефоне открыть в браузере и сделать этот запрос.

Если Cordova, то стоит попробовать такой плагин https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-media-capture/

там простой синтаксис navigator.mediaDevices.getUserMedia({ audio: true, video: true})
в браузере работает, правда десктопном, а вот в телефоне пишет ошибку, у же на трех перепробовал, ладно буду дальше копать.

А Андройд последний?

телефоны новые, с полгода примерно, думаете, что заблокировали доступ, где-то читал

Разобрался, кому интересно рецепт вот… Прописать в манифесте разрешения это не все. Помог плагин https://www.npmjs.com/package/cordova-plugin-android-permissions. В onDeviceReady() прописываем:
var permissions = cordova.plugins.permissions;
var permList = [
permissions.CAMERA,
permissions.RECORD_AUDIO
];
permissions.requestPermissions(permList, success, error);
function error() {
console.log(‘Camera permission is not turned on’);
}
function success() {
if (!status.hasPermission) error();
}
в permList прописываем, все что хотим разрешить. При первом посещение одноразово выскакивают окна на разрешения.

1 Like

Для работы с камерой подключал плагин cordova-plugin-camera.
Андроиду специально пермишены не прописывал, камера работала.

Для iOS в Info.plist добавлял ключи
NSCameraUsageDescription
Need camera access to get pictures to fill order
NSPhotoLibraryUsageDescription
Need gallery access to get pictures to fill order
NSPhotoLibraryAddUsageDescription
Need gallery access to save pictures for order

В config.xml:
plugin name=“cordova-plugin-camera” spec=“4.0.3”
variable name=“CAMERA_USAGE_DESCRIPTION” value=“Need camera access to get pictures to fill order” /
variable name=“PHOTOLIBRARY_USAGE_DESCRIPTION” value=“Need gallery access to get pictures to fill order” /
/plugin

И в package.json были такие строки:
“cordova-plugin-camera”: {
“CAMERA_USAGE_DESCRIPTION”: “Need camera access to get pictures to fill order”,
“PHOTOLIBRARY_USAGE_DESCRIPTION”: “Need gallery access to get pictures to fill order”
},

1 Like

А камеру для чего использовали? Я пробовал этот плагин, снимки получал без проблем, а вот поток видео по технологии webRTC никак не получалось.

Камерой делали снимки на объекте. Затем фото отправляли на сервер.
Видео пробовал снимать с помощью плагина PKVideoThumbnail.

камерой и я пользовался, файл получить и отправить вообще не проблема, а вот видео webRTC, это потоковое видео, оно берет с камеры поток и его можно отправить на сервер или проигрывать в местном локальном div