如何修复“视频播放但在带有 expo 的 iOS 上没有声音”
Posted
技术标签:
【中文标题】如何修复“视频播放但在带有 expo 的 iOS 上没有声音”【英文标题】:How to fix 'Video play but don't have sound on iOS with expo' 【发布时间】: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 />
【问题讨论】:
【参考方案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:音频无法正常工作,因为我将手机设为静音。要更改此默认行为,请设置 playsInSilentLockedModeIOS= true
。
(我知道 OP 在他们的代码中已经有这个,但我正在回答以防万一这对某人有帮助)。
【讨论】:
【参考方案3】:由于启用了 iPhone 侧面的静音开关,我遇到了这个问题。为了让视频播放器播放声音,我需要包含以下内容作为视频组件的道具。
ignoreSilentSwitch='ignore'
【讨论】:
【参考方案4】:确定media
是否应在app
位于background
中时继续播放。这让客户可以继续收听audio
。
要在iOS
上使用此功能,您必须:
Xcode
项目中的音频
将 ignoreSilentSwitch 属性设置为 "ignore"
【讨论】:
但是我玩的时候。没声音。 你是用真手机测试吗? 是的,我在 Iphone 8 plus 上使用 iOS 12 进行测试。以上是关于如何修复“视频播放但在带有 expo 的 iOS 上没有声音”的主要内容,如果未能解决你的问题,请参考以下文章