【问题标题】:How to fix 'Video play but don't have sound on iOS with expo'如何修复“视频播放但在带有 expo 的 iOS 上没有声音”
【发布时间】:2019-08-06 08:05:49
【问题描述】:

我使用世博会的视频组件。我可以播放视频,但在 iOS 中没有声音。在安卓里没问题。我该如何解决它。

<Video style={{ width: 340, 
                                height: 220,
                                borderRadius: 10, 
                                overflow: 'hidden' }}
                                posterSource={require('../../assets/loading2.gif')}
                                usePoster={true}
                                rate={1.0}
                                isMuted={false}
                                useNativeControls = {true}
                                volume={1.0}
                                playsInSilentLockedModeIOS ={ true }
                                resizeMode='cover' 
                                shouldPlay={true} 
                                source={{uri : url}} />

【问题讨论】:

    标签: ios react-native video expo react-native-video


    【解决方案1】:

    启用背景音频不是解决方案(尤其是在您使用托管的 Expo 项目时,不适合乱用 Xcode 设置)。我发现当您使用useNativeControls={true} 并且不自动播放视频时存在该错误。如果您尝试shouldPlay={true},您应该会看到它有效。这不是一个很好的解决方案(自动播放视频在 2005 年左右是 MySpace)。

    我通过使用自定义播放按钮在视频屏幕上放置一个覆盖层来修复它。出于某种原因,从视频参考调用播放使用正确的声音配置文件。

      const videoRef = React.useRef<Video>()
    
      React.useEffect(() => {
        const enableAudio = async () => {
            await Audio.setAudioModeAsync({
            allowsRecordingIOS: false,
            interruptionModeIOS: INTERRUPTION_MODE_IOS_DO_NOT_MIX,
            playsInSilentModeIOS: true,
            staysActiveInBackground: false,
            interruptionModeAndroid: INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
            shouldDuckAndroid: false,
          })
        }
        enableAudio()
      }, [])
    
      const play = () => videoRef.current && videoRef.current.playAsync()
    
      const poster = (
          <View position="absolute" flexible="column-center" bg="transparent">
            <IconButton
              name="play"
              onPress={play}
              size={72}
              iconSize={72}
              bg="transparent"
              iconColor="rgba(255,255,255,0.9)"
            />
          </View>
        )
    
      return (
        <View>
          <VideoPlayer
            ref={videoRef}
            source={R.is(String, props.asset) ? { uri: props.asset } : props.asset}
            shouldPlay={props.autoPlay !== false}
            useNativeControls={true}
            rate={1.0}
            volume={1.0}
            resizeMode={Video.RESIZE_MODE_CONTAIN}
          />
          <View position="absolute" flexible="column-center" bg="transparent">
            <IconButton
              name="play"
              onPress={play}
              size={72}
              iconSize={72}
              bg="transparent"
              iconColor="rgba(255,255,255,0.9)"
            />
          </View>
        </View>
      )
    
    

    【讨论】:

    • 这太疯狂了。我只是将其设置为自动播放,并且声音正常。哈哈!
    • @zackify 我知道?‍♂️
    • 我正面临使用 expo-av 播放 ios 视频静音的问题,而 android 播放声音。您能否详细说明在哪里添加“自动播放”以及它是如何工作的?
    • @DolaChakraborty 如果你想让它自动播放(这在 iOS 上解决了这个问题),你可以将这两个属性设置为 true:
    【解决方案2】:

    音频无法正常工作,因为我将手机设为静音。要更改此默认行为,请设置 playsInSilentLockedModeIOS={ true }

    (我知道 OP 在他们的代码中已经有这个,但我正在回答以防万一这对某人有帮助)。

    【讨论】:

      【解决方案3】:

      由于启用了 iPhone 侧面的静音开关,我遇到了这个问题。为了让视频播放器播放声音,我需要包含以下内容作为视频组件的道具。

      ignoreSilentSwitch={'ignore'}
      

      【讨论】:

        【解决方案4】:

        确定media 是否应在app 位于background 中时继续播放。这让客户可以继续收听audio

        要在iOS 上使用此功能,您必须:

        • Enable BackgroundXcode 项目中的音频
        • 将 ignoreSilentSwitch 属性设置为 "ignore"

        【讨论】:

        • 但是我玩的时候。没声音。
        • 你是用真手机测试吗?
        • 是的,我在 Iphone 8 plus 上使用 iOS 12 进行测试。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        相关资源
        最近更新 更多