【问题标题】:Expo av playbackObject's onPlaybackStatusUpdate is called only on play/stop instead of interval by progressUpdateIntervalMillisExpo av 播放对象的 onPlaybackStatusUpdate 仅在播放/停止时调用,而不是由 progressUpdateIntervalMillis 调用间隔
【发布时间】:2021-05-20 10:48:05
【问题描述】:

onPlaybackStatusUpdate 应在每 100 毫秒后返回输出,但仅在播放或停止时返回。我的代码中是否缺少某些内容。 (我是 Expo 和 Expo AV 的新手)。 请参阅下面用于加载和播放音频文件的代码

if(!sound._loaded)
    await sound.loadAsync(
      require('./assets/Audio.mp3'),
      initialStatus,
    );
    
    sound.setStatusAsync({progressUpdateIntervalMillis: 200});
    sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);

    await sound.playAsync();
    console.log(sound);
  }

  const initialStatus = (status) => {
    console.log("initialStatus");
    console.log(status);
  }

  let onPlaybackStatusUpdate = async (playbackStatus) => {
    //if(!isNaN(playbackStatus.durationMillis))
    //setTotalLength(playbackStatus.durationMillis/1000);
    //setCurrentPos(playbackStatus.positionMillis.toString().split(".")[0]/1000);
    //setIsPlaying(playbackStatus.isPlaying);
    console.log("onPlaybackStatusUpdate");
    console.log(playbackStatus);
  }

【问题讨论】:

    标签: react-native expo expo-av


    【解决方案1】:

    对于声音实例,创建一个 ref 变量并使用它来触发暂停/播放以及加载。

    Working Implementation Here

    这样,

    const sound = React.useRef(new Audio.Sound());
    

    对于加载音频,

    const result = await sound.current.loadAsync(require('./test.mp3'), {}, true);
    if (result.isLoaded === false) {
      console.log('Error in Loading Audio');
    } else {
      // Audio is loaded do whatever needed
    }
    

    暂停

    const result = await sound.current.getStatusAsync();
    if (result.isLoaded) {
      if (result.isPlaying === true) {
        // sound.current.pauseAsync();
        // Pause Here
      }
    }
    

    为了玩,

    const result = await sound.current.getStatusAsync();
    if (result.isLoaded) {
      if (result.isPlaying === false) {
        // sound.current.playAsync();
        // play Here
      }
    }
    

    【讨论】:

    • 位置没有更新,onPlaybackStatusUpdate 对我不起作用。我在网上查了。您能否确认它是否适用于您和您测试的设备?
    • 是的,在 Web 上它不工作,但我在我的物理 Android 设备上对其进行了测试,它工作正常
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多