Ios 在平面列表中显示多个视频实例时出现问题
在平面列表中显示视频时遇到一些问题。在真实设备上,这似乎是一个特定的iOS问题,因为它在模拟器和android上运行良好。使用Ios 在平面列表中显示多个视频实例时出现问题,ios,react-native,react-native-flatlist,react-native-video,Ios,React Native,React Native Flatlist,React Native Video,在平面列表中显示视频时遇到一些问题。在真实设备上,这似乎是一个特定的iOS问题,因为它在模拟器和android上运行良好。使用react native video并在错误日志中获取AVFoundationErrorDomain,错误代码11839。搜索了一段时间后,似乎真正的设备对一次可以显示多少视频实例有限制 所以我在视频组件中得到了一个黑屏,带有灰色的控件和一个划掉的播放按钮。结构为平面列表->子->视频。我尝试过改变顺序,将视频组件向上移动一个级别,但问题是相同的。flatlist一次渲染
react native video
并在错误日志中获取AVFoundationErrorDomain
,错误代码11839
。搜索了一段时间后,似乎真正的设备对一次可以显示多少视频实例有限制
所以我在视频组件中得到了一个黑屏,带有灰色的控件和一个划掉的播放按钮。结构为平面列表->子->视频。我尝试过改变顺序,将视频组件向上移动一个级别,但问题是相同的。flatlist一次渲染项目10,可以包含图像或视频
我已尝试保存使用onViewableItemsChanged prop渲染的项目的键,并将其保存,在redux中最多保存10个。然后,我从渲染视频组件的数组中提取此数组,以仅渲染项目id与redux中的数组中相同的视频组件。理论上,这应该只呈现已查看或最近已查看的项目
在此之前,视频根本没有加载,现在它们被渲染了一段时间,但在渲染和播放了一些视频之后,问题又回来了。实际组件始终呈现(如果密钥/id已保存并获取到redux),但有一个黑屏
非常感谢任何对我的代码有其他解决方案或意见的人帮助我解决这个问题
减速器:
let feedIdsArr = [...state.savedFeedIds];
let newFeedId = action.payload;
if (feedIdsArr.length < 10) {
if (!feedIdsArr.includes(newFeedId)) {
feedIdsArr.push(newFeedId)
}
} else {
feedIdsArr.shift()
}
console.log("SAVE_FEED_ID", feedIdsArr);
return {...state, savedFeedIds: feedIdsArr};
呈现:
if (this.props.savedFeedIds.includes(this.props.feed.feedItemId)) {
return (
<Video
source={{uri: url}}
style={this.calculateVideoAspectRatio(videoGallery, orientation)}
controls={true}
paused={true}
resizeMode={orientation === 'portrait' ? "cover" : null}
fullscreen={false}
ref={r => this.player = r}
onError={err => console.log("VIDEO ERROR", err)}
/>
)
}
if (this.props.savedFeedIds.includes(this.props.feed.feedItemId)) {
return (
<Video
source={{uri: url}}
style={this.calculateVideoAspectRatio(videoGallery, orientation)}
controls={true}
paused={true}
resizeMode={orientation === 'portrait' ? "cover" : null}
fullscreen={false}
ref={r => this.player = r}
onError={err => console.log("VIDEO ERROR", err)}
/>
)
}
onViewableItemsChanged = ({viewableItems}) => {
viewableItems.forEach(item => {
if (item.item.videoGallery) {
this.props.feedItemIds(item.key)
}
})
};