在IOS静默模式下无法使用本机webview HTML5视频声音

时间:2018-01-25 06:05:23

标签: react-native webview react-native-ios

我正在使用WebView加载具有嵌入式视频播放器的网页。当应用处于振铃模式时,它工作正常。但是当App处于静音模式时没有任何声音。我不太了解IOS。任何帮助将不胜感激。

 <WebView startInLoadingState={true} 
    mediaPlaybackRequiresUserAction={false}    
    javaScriptEnabled={ true }                        
    source={{uri:'http://ab24.live/player'}}/>

2 个答案:

答案 0 :(得分:0)

假设您正在使用ZonedDateTime,并且遇到了the documentation of atZone(),则可以使用以下方法来解决此问题:

import { Audio } from "expo";

...
  async playInSilentMode() {
    // To get around the fact that audio in a `WebView` will be muted in silent mode
    // See: https://github.com/expo/expo/issues/211
    //
    // Based off crazy hack to get the sound working on iOS in silent mode (ringer muted/on vibrate)
    // https://github.com/expo/expo/issues/211#issuecomment-454319601
    await Audio.setAudioModeAsync({
      playsInSilentModeIOS: true,
      allowsRecordingIOS: false,
      interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS,
      shouldDuckAndroid: false,
      interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
      playThroughEarpieceAndroid: true
    });
    // console.log("  done: setAudioModeAsync");
    await Audio.setIsEnabledAsync(true);
    // console.log("  done: setIsEnabledAsync");
    const sound = new Audio.Sound();
    await sound.loadAsync(
      require("./500-milliseconds-of-silence.mp3") // from https://github.com/anars/blank-audio
    );
    // console.log("  done: sound.loadAsync");
    await sound.playAsync();
    sound.setIsMutedAsync(true);
    sound.setIsLoopingAsync(true);
    // console.log("  done: sound.playAsync");
  }

然后,在componentDidMount()中引用它:

  async componentDidMount() {
    await playInSilentMode();
  }

答案 1 :(得分:0)

由于我目前无法发表评论,因此只需补充说它已得到修复(github issue的最新评论)。

因此,为了避免调用该棘手的变通方法,现在只需要向WebView组件添加useWebKit={true}

修复已于上个月实施,并且可以与Expo V32 +版本一起使用。