Получение продолжительности видео / аудио в react Native для заполнения индикатора выполнения

#react-native #process #expo #audio-streaming #react-native-sound

#реагировать-родной #процесс #экспо #потоковое аудио #react-native-sound

Вопрос:

В настоящее время я внедряю потоковое приложение react Native, используя версию expo, и у меня возникают некоторые трудности. пожалуйста, не стесняйтесь отвечать на любой из вопросов или только на один и на любой другой по вашему выбору.

1) Внедрение индикатора выполнения при воспроизведении звука. Для этого мне нужно получить продолжительность песни, затем я использую математику.Пол для выполнения вычислений для индикатора выполнения, но в настоящее время я не могу получить продолжительность воспроизводимой дорожки. Любые идеи о том, как это сделать, используя либо звуковой объект, либо видео компонент, будут полезны.

2) Мне нужно иметь возможность воспроизводить фоновый звук из моего приложения и, судя по некоторым исследованиям, это кажется невозможным с версией Expo. Какие-либо хаки вокруг этого???

3) Как мне определить, закончилась ли текущая воспроизводимая дорожка с использованием аудиокомпонента??

4) Я хочу ситуацию, когда я могу остановить любой другой звук на устройстве, когда звук воспроизводится с моего устройства. Есть идеи о том, как это сделать??

5) Любые рекомендации для меня по потоковым приложениям с использованием react Native

Ответ №1:

Я могу помочь вам с первыми тремя вопросами.

1, Чтобы получить общую продолжительность использования звука playbackStatus.durationMillis и получить текущую продолжительность использования звука playbackStatus.positionMillis

Получите статус воспроизведения, используя

 export const createAudio = async () => {
    const source = require('../../../assets/audio/storiesAudio/storyAudio.mp3');
    const { sound } = await Audio.Sound.createAsync(source,
        {
         shouldPlay: false,
         isLooping: false,
        },
    onPlaybackStatusUpdate,
    );
    this.setState({playbackInstance: sound});
}

onPlaybackStatusUpdate = async (playbackStatus) => {
    await this.setState({ playbackStatus });
    if (this.state.playbackStatus.isPlaying) {
    }
  }
 

Для преобразования миллиметров в минуты и секунды

    export const millisToMinutesAndSeconds = (millis) => {
       let minutes = Math.floor(millis / 60000);
       let seconds = ((millis % 60000) / 1000).toFixed(0);
       return (seconds == 60 ? (minutes 1)   ":00" : minutes   ":"   (seconds < 10 ? "0" : 
       "")   seconds);
   }
 

2, Чтобы звук воспроизводился в фоновом режиме

 const { sound } = await Audio.Sound.createAsync(
    sourceAudioFile,
    {
        shouldPlay: true, //To play the audio when the component is loadded
        isLooping: false,
    },
    onPlaybackStatusUpdate,
);
 

3, Чтобы проверить, закончено ли воспроизведение текущей звуковой дорожки, используйте playbackStatus.didJustFinish