React Native Expo 音频 |从最新位置播放直播

Posted

技术标签:

【中文标题】React Native Expo 音频 |从最新位置播放直播【英文标题】:React Native Expo Audio | Play live stream from latest position 【发布时间】:2020-05-12 17:11:57 【问题描述】:

我正在使用 Expo Audio 为我正在为在线广播制作的应用程序编写音频播放器。 音频来自在线直播,我已经成功添加了播放器以及与之相关的所有内容;但是,我遇到的一个问题是,如果我在继续播放音频时暂停音频,则音频将从暂停时继续播放,而不是从当前位置继续播放,我需要暂停并再次播放以使其更新到当前正在播放的内容。 我用 playAsync() 播放它,我试过用 pauseAsync()、stopAsync()、setStatusAsync( shouldPlay: false, positionMillis: 0 );

关于如何让它以应有的方式工作的任何提示?

这是我用于音频播放器的代码,它是一个类,然后我创建一个实例以便能够从应用程序的不同位置对其进行管理:

class audioPlayer 
  static instance = null;
  static createInstance() 
    var object = new audioPlayer();
    return object;
  

  _radiostream;

  /**
   * @returns audioPlayer
   */
  static getInstance() 
    if (audioPlayer.instance == null) 
      audioPlayer.instance = audioPlayer.createInstance();
    

    return audioPlayer.instance;
  

  // Call this first to create a new audio element
  createAudio() 
    this._radioStream = new Audio.Sound();
  ;

  async loadAudioAsync() 
    try 
      await this._radioStream.loadAsync(
         uri: "radio straem",
      );
      store.dispatch(setLiveState(true));

      this.toggleAudio(); // Autoplay at start

      return true;
     catch (error) 
      if (error.code === "E_LOAD_ERROR") 
        // In the case of an error we try to load again
        setTimeout(this.loadAudioAsync, 10000);

        throw new Error(error.code);
       else 
        throw new Error(error);
      ;
    ;
  ;

  async unloadAudioAsync() 
    await this._radioStream.unloadAsync();
  ;

  async getStatusAsync() 
    return await this._radioStream.getStatusAsync();
  ;

  async toggleAudio() 
    // We're gonna play or pause depending on the status
    let  isLoaded, isPlaying  = await this._radioStream.getStatusAsync();

    // If the user presses the audio and the stream connection has been lost or something
    // we try to load it again
    if (!isLoaded) 
      let res = await this.loadAudioAsync(); // Try to loadAudio again
      if (res) this.toggleAudio(); // Retrigger the toggle to start playing
    

    if (isLoaded && !isPlaying) 
      store.dispatch(setPlayingStatus(true));
      await this._radioStream.playAsync();
     else if (isLoaded && isPlaying) 
      store.dispatch(setPlayingStatus(false));
      await this._radioStream.setStatusAsync( shouldPlay: false, positionMillis: 0 );
    ;
  ;
;

【问题讨论】:

有解决办法吗? 【参考方案1】:

我刚刚遇到了同样的问题(对于我的网络收音机https://notylus.fr)。 看来我找到了解决方案:而不是使用

playbackInstance.pauseAsync()

我现在用

playbackInstance.stopAsync()

对于游戏部分,我添加

等待播放实例.playAsync() //播放流 PlaybackInstance.setPositionAsync(0) //确保你在位置 0

最后

问候,

【讨论】:

以上是关于React Native Expo 音频 |从最新位置播放直播的主要内容,如果未能解决你的问题,请参考以下文章

React Native Expo 音频播放器错误 - 播放器不存在

Expo React Native App 未加载 AppEntry.bundle

键盘打开时TextInput不可见Expo React Native

在 react-native-web (expo) 中聚焦时更改 TextInput 的边框颜色

React Native - 从 expo-camera 获取帧

react-native-webview 如何注入 javascript?