Как создать приложение для записи видео для устройств Android и IOS с помощью кода JavaScript.

Привет, нативные разработчики!

Когда вы начинаете изучать React Native, вы читаете различные лекции, руководства и статьи, чтобы создавать различные проекты и изучать материал. Приложение для записи - одно из таких приложений. Для приложения для записи вы должны знать, как работает приложение камеры, как управлять качеством видео, битрейтом, продолжительностью и многим другим. Как остановить запись или воспроизведение видео? Есть еще много интересного. Итак, начнем с чашки кофе.

Если вы предпочитаете видеоруководство, то оно здесь:

Установка и установка

Запустите проект expo-CLI в предпочитаемом вами каталоге с помощью команды: expo init videoRec (вы можете назвать его по своему усмотрению). Выберите пустой шаблон и завершите установку зависимостей JavaScript. После этого установите следующий пакет в родительский каталог с помощью команд:

npm install expo-camera
npm install expo-av

expo-camera используется для управления функциями камеры в приложении React Native, а expo-av используется для отображения видео в вашем приложении. С помощью пакета expo-av вы можете воспроизводить, останавливать и пересылать видео в своем приложении.

Мы закончили установку. Приступим сейчас же к взлому.

Код приложения для записи видео (React Native)

App.js

Импортируйте следующие компоненты из соответствующего пакета, поскольку мы собираемся использовать их в нашем проекте.

import React, { useState, useEffect } from 'react';
import { StyleSheet ,Text, View, Button,} from 'react-native';
import { Camera } from 'expo-camera';
import { Video } from 'expo-av';

Сначала мы настроим нашу камеру для записи видео. Затем мы переключимся на отображение этого видео. Теперь для записи видео вам нужно получить доступ к двум вещам от пользователей. Один из них - это, конечно же, камера, а другой - доступ к микрофону для аудио.

const [hasAudioPermission, setHasAudioPermission] = useState(null);
const [hasCameraPermission, setHasCameraPermission] =useState(null);
const [camera, setCamera] = useState(null);
const [record, setRecord] = useState(null);
const [type, setType] = useState(Camera.Constants.Type.back);

Мы собираемся использовать react-hook для аудио, видео, разрешения камеры, типа и записи. Поскольку мы запрашиваем разрешение у пользователей на доступ, а затем меняем наше состояние с нуля и устанавливаем его в другие поля.

useEffect(() => {
    (async () => {
      const cameraStatus = await Camera.requestPermissionsAsync();
      setHasCameraPermission(cameraStatus.status === 'granted');
const audioStatus = await Camera.requestMicrophonePermissionsAsync();
      setHasAudioPermission(audioStatus.status === 'granted');
})();
  }, []);

Приведенный выше код используется для доступа к разрешению камеры и микрофона устройства пользователя. Как только пользователь дает разрешение, нулевое состояние камеры и микрофона заменяется обновленными состояниями.

const takeVideo = async () => {
    if(camera){
        const data = await camera.recordAsync()
        setRecord(data.uri);
        console.log(data.uri);
    }
  }

Эта стрелочная функция позаботится о вашей видеозаписи, и мы установим URI видео как данные. Просто зарегистрируйте этот URI в консоли, как указано выше, и вы увидите ссылку URL-адреса видео во внутреннем хранилище.

const stopVideo = async () => {
    camera.stopRecording();
  }

Чтобы остановить запись видео, нам понадобится указанная выше стрелочная функция.

if (hasCameraPermission === null || hasAudioPermission === null ) {
    return <View />;
  }
if (hasCameraPermission === false || hasAudioPermission === false) {
    return <Text>No access to camera</Text>;
  }

Если пользователь отказывает в разрешении доступа, мы собираемся показать на экране «Нет доступа к камере».

<View style={styles.cameraContainer}>
     <Camera 
      ref={ref => setCamera(ref)}
      style={styles.fixedRatio} 
      type={type}
      ratio={'4:3'} />
 </View>

Приведенный выше код используется для отображения камеры. Нам нужен экран камеры в соотношении 4: 3. Вы можете настроить их соответствующим образом.

<Button
   title="Flip Video"
   onPress={() => {
   setType(
     type === Camera.Constants.Type.back
     ? Camera.Constants.Type.front
     : Camera.Constants.Type.back
     );
     }}>
</Button>
<Button title="Take video" onPress={() => takeVideo()} />
<Button title="Stop Video" onPress={() => stopVideo()} />

Это основные кнопки, которые мы собираемся использовать. Первый - перевернуть камеру, что означает, что вы можете записывать видео как с передней, так и с задней камеры. Два других предназначены для записи видео и остановки видео.

Теперь мы можем снимать видео. Как мы будем это играть?

Воспроизвести видео с помощью React Native

Для воспроизведения видео нам понадобятся два новых перехватчика реакции.

const video = React.useRef(null);
const [status, setStatus] = React.useState({});

Теперь добавьте экран воспроизведения видео и кнопку воспроизведения.

<Video
   ref={video}
   style={styles.video}
   source={{
     uri: record,
   }}
   useNativeControls
   resizeMode="contain"
   isLooping
   onPlaybackStatusUpdate={status => setStatus(() => status)}
/>
<View style={styles.buttons}>
  <Button
    title={status.isPlaying ? 'Pause' : 'Play'}
    onPress={() =>
       status.isPlaying ? video.current.pauseAsync() : video.current.playAsync()
    }
   />
</View>

Для воспроизведения видео вам понадобится URI этого видео. Мы уже сделали URI записанного видео и сохранили его в состоянии записи. Мы просто должны использовать это здесь.

Теперь вы также можете настроить свое видео. Как это сделать?

Настройте качество видео, продолжительность, скорость передачи данных с помощью React Native Expo

const takeVideo = async () => {
    if(camera){
        const data = await camera.recordAsync({
          VideoQuality:['2160p'],
          maxDuration:10,
          maxFileSize:200,
          mute:false,
          videoBitrate:5000000
        })
        setRecord(data.uri);
        console.log(data.uri);
    }
  }

Помните: мы используем камеру для записи видео. Теперь добавьте переменную в соответствии с вашим выбором. Здесь мы устанавливаем качество видео 2160p, максимальная продолжительность рассчитывается в секундах. Размер файла рассчитывается в байтах. Поле отключения звука является логическим. Мы установили битрейт видео 5 Мбит / с. Установите это в соответствии с вашим выбором и требованиями.

Поскольку мы в основном сосредотачиваемся на том, как эти вещи работают, а не на стилизации. Вы можете стилизовать их соответствующим образом. Теперь запустите это приложение в окне терминала и запустите его на своем устройстве с помощью приложения expo. Вы увидите что-то вроде этого на экране вашего устройства.

Это все для этой статьи. Если вы где-то потерялись или вам нужен полный доступ к коду, то код Github находится здесь.

Спасибо за прочтение! И если эта статья будет вам полезна, то смело хлопайте в ладоши, сколько захотите.

Больше контента на plainenglish.io