在React Native中获取视频/音频的持续时间以实现进度条

时间:2019-04-18 18:41:25

标签: react-native process expo audio-streaming react-native-sound

我目前正在使用EXPO版本实现React Native流媒体应用程序,但遇到了一些困难。请随时回答任何问题,也可以只回答一个问题。

  

1)在声音播放时实现进度条。为此,我需要   获取歌曲的持续时间,然后我使用Math.Floor进行   进度栏的计算,但我目前无法获取   当前播放曲目的持续时间。有关如何执行此操作的任何想法   无论是使用声音对象还是视频素材,都是很棒的。

     

2)我需要能够从我的应用程序和   一些研究,世博版似乎是不可能的。任何骇客   围绕这个???

     

3)如何使用音频确定当前播放的曲目   组件已完成??

     

4)我想要一种可以停止设备中任何其他声音的情况   从我的设备播放声音时。关于如何执行此操作的任何想法??

     

5)关于使用React Native的流式应用对我的任何建议

1 个答案:

答案 0 :(得分:0)

我可以为您解决前三个问题。

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