Expo Camera сохраняет видео с помощью createAssetAsync, не работает только на iOS. ERR_UNSUPPORTED_ASSET_TYPE для файла IOS

Программируем под IOS
Ответить
Anonymous
 Expo Camera сохраняет видео с помощью createAssetAsync, не работает только на iOS. ERR_UNSUPPORTED_ASSET_TYPE для файла

Сообщение Anonymous »

Я использую Expo в React Native и хочу, чтобы пользователь записывал видео с помощью камеры и сохранял его на телефон. На Android все работает нормально, но на iOS вызов createAssetAsync завершается с ошибкой:
Ошибка: этот URL-адрес не содержит допустимого типа ресурса: file:///var/mobile/Containers/Data/Application/22FC2F8C-E052-4FF5-B451-4973C95AD74E/Library/Caches/Camera/50220C17-AB3B-4586-80D7-67A6D27D6105.mov
А также {"код": "ERR_UNSUPPORTED_ASSET_TYPE"
Вот мой код useEffect, который сохраняет видео:

Код: Выделить всё

    useEffect(() => {

const saveVideo = async () => {
console.log('rURI:', recordedUri);
console.log('recordedUri type:', typeof recordedUri);
if (recordedUri) {

// Check file existence
const fileInfo = await FileSystem.getInfoAsync(recordedUri);
console.log('fileInfo:', fileInfo);
if (!fileInfo.exists) {
console.error('File does not exist:', recordedUri);
return;
}

const { status, canAskAgain } = await MediaLibrary.requestPermissionsAsync();
if (status !== 'granted' && canAskAgain) {
const fullPermission = await MediaLibrary.requestPermissionsAsync({ writeOnly: false });
console.log('Full permission status:', fullPermission.status);
}

try{
const asset = await MediaLibrary.createAssetAsync(recordedUri);
console.log('asset:', asset);
setNewAssetCounter(newAssetCounter + 1);}
catch (err) {
console.log('Error creating asset:', JSON.stringify(err, null, 2))
}
}
closeCamera();
}
saveVideo();
},
[recordedUri])
Вот мой код, в котором я записываю видео:

Код: Выделить всё

    const startRecording = async () => {
if (cameraRef.current) {
setVideoElapsedTime(0);
const videoRecordPromise = cameraRef.current.recordAsync();
if (videoRecordPromise) {
setIsRecording(true);
timerRef.current = setInterval(() => {
setVideoElapsedTime((prevTime) => prevTime + 1);
}, 1000);
const video = await videoRecordPromise;
setRecordedUri(video.uri);
}
}
};

// Stop recording
const stopRecording = async () => {

const { status } = await MediaLibrary.requestPermissionsAsync();
console.log('status:', status);
if (status !== 'granted') {
alert('Permission to access media library is required!');
return;
}

console.log('line157');
try {
if (cameraRef.current && isRecording) {
console.log('line159');
cameraRef.current.stopRecording();
setIsRecording(false);
clearInterval(timerRef.current);
console.log('line162');
}
} catch (error) {
console.error('Error saving video:', error);
}
};
Будем признательны за любые предложения!

Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-err-uns
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»