React Native:如何在 FlatList 中播放视频
React Native: How to play video in FlatList
我在这段代码中尝试了一段时间,试图将我的视频从本地目录列出到我的 React 本机应用程序。在我开始这个项目的时候,作为一个新手,我在这方面问了几个问题,但没有得到任何答案。不知何故,我设法做到了这一点。
我已经能够从我的本地目录中获取我的视频,但现在的问题是我的视频只显示灰色缩略图,当我点击任何视频时,它会出现 ReferenceError: Can't find variable: videos
下面是我的截图和我的代码。请我需要更正在此代码上做的错误事情。在此先感谢您的帮助。
constructor(Props) {
super(Props);
this.state = {
videos: [],
playing: false,
screenType: 'content',
resizeMode: 'contain',
currentTime: 0,
videoPlayer: null,
duration: 0,
isFullScreen: false,
isLoading: true,
paused: false,
playerState: PLAYER_STATES.PLAYING,
};
这是我的构造函数
componentDidMount() {
var filePath = RNFetchBlob.fs.dirs.MovieDir + '/Voc Vedos/';
RNFetchBlob.fs.ls(filePath)
.then(files => {
this.setState({videos:files});
console.warn(files);
}).catch(err=>alert(err.toString()))
}
这是我从设备上的本地目录获取视频的地方
render() {
const { duration, currentTime, paused, overlay } = this.state
return(
<View style={styles.container}>
<FlatList
data={this.state.videos}
keyExtractor={item=>item}
ItemSeparatorComponent={() => { return (<View style={styles.separator} />) }}
// viewabilityConfig={this.viewabilityConfig}
// onViewableItemsChanged={this.onViewableItemsChanged}
// viewabilityConfig={{
// itemVisiblePercentThreshold: 95
// }}
numColumns={3}
renderItem={({ item, index, separators }) => (
<TouchableOpacity
onPress={() => this._onPress(item)}
style={{width:100,height:100}}>
<View
style={{width:100,height:100, margin:8}}
>
<Video
source ={{uri: '/storage/emulated/0/Movies/Voc Vedos/'+{item}}}
ref={(ref: Video) => { this.video = ref }}
style={{width:100,height:100}}
rate={this.state.rate}
paused={this.state.paused}
volume={this.state.volume}
muted={this.state.muted}
resizeMode={this.state.resizeMode}
onLoad={this.onLoad}
onProgress={this.onProgress}
onEnd={this.onEnd}
onAudioBecomingNoisy={this.onAudioBecomingNoisy}
onAudioFocusChanged={this.onAudioFocusChanged}
/>
<MediaControls
isFullScreen={this.state.isFullScreen}
duration={duration}
isLoading={this.state.isLoading}
mainColor="purple"
onFullScreen={noop}
onPaused={this.state.onPaused}
onReplay={this.state.onReplay}
onSeek={this.state.onSeek}
onSeeking={this.state.onSeeking}
playerState={this.state.playerState}
progress={currentTime}
/>
</View>
</TouchableOpacity>
)}
/>
</View>
这是我的渲染代码。
我需要有关如何正确显示我的视频以及如何在点击时播放视频的帮助
根据 react-native-video 文档:
对于设备存储中的文件源,必须写 'file://' 路径开头
示例:
source={{ uri: 'file:///sdcard/Movies/sintel.mp4' }}
阅读文档https://github.com/react-native-community/react-native-video#source
我在这段代码中尝试了一段时间,试图将我的视频从本地目录列出到我的 React 本机应用程序。在我开始这个项目的时候,作为一个新手,我在这方面问了几个问题,但没有得到任何答案。不知何故,我设法做到了这一点。 我已经能够从我的本地目录中获取我的视频,但现在的问题是我的视频只显示灰色缩略图,当我点击任何视频时,它会出现 ReferenceError: Can't find variable: videos
下面是我的截图和我的代码。请我需要更正在此代码上做的错误事情。在此先感谢您的帮助。
constructor(Props) {
super(Props);
this.state = {
videos: [],
playing: false,
screenType: 'content',
resizeMode: 'contain',
currentTime: 0,
videoPlayer: null,
duration: 0,
isFullScreen: false,
isLoading: true,
paused: false,
playerState: PLAYER_STATES.PLAYING,
};
这是我的构造函数
componentDidMount() {
var filePath = RNFetchBlob.fs.dirs.MovieDir + '/Voc Vedos/';
RNFetchBlob.fs.ls(filePath)
.then(files => {
this.setState({videos:files});
console.warn(files);
}).catch(err=>alert(err.toString()))
}
这是我从设备上的本地目录获取视频的地方
render() {
const { duration, currentTime, paused, overlay } = this.state
return(
<View style={styles.container}>
<FlatList
data={this.state.videos}
keyExtractor={item=>item}
ItemSeparatorComponent={() => { return (<View style={styles.separator} />) }}
// viewabilityConfig={this.viewabilityConfig}
// onViewableItemsChanged={this.onViewableItemsChanged}
// viewabilityConfig={{
// itemVisiblePercentThreshold: 95
// }}
numColumns={3}
renderItem={({ item, index, separators }) => (
<TouchableOpacity
onPress={() => this._onPress(item)}
style={{width:100,height:100}}>
<View
style={{width:100,height:100, margin:8}}
>
<Video
source ={{uri: '/storage/emulated/0/Movies/Voc Vedos/'+{item}}}
ref={(ref: Video) => { this.video = ref }}
style={{width:100,height:100}}
rate={this.state.rate}
paused={this.state.paused}
volume={this.state.volume}
muted={this.state.muted}
resizeMode={this.state.resizeMode}
onLoad={this.onLoad}
onProgress={this.onProgress}
onEnd={this.onEnd}
onAudioBecomingNoisy={this.onAudioBecomingNoisy}
onAudioFocusChanged={this.onAudioFocusChanged}
/>
<MediaControls
isFullScreen={this.state.isFullScreen}
duration={duration}
isLoading={this.state.isLoading}
mainColor="purple"
onFullScreen={noop}
onPaused={this.state.onPaused}
onReplay={this.state.onReplay}
onSeek={this.state.onSeek}
onSeeking={this.state.onSeeking}
playerState={this.state.playerState}
progress={currentTime}
/>
</View>
</TouchableOpacity>
)}
/>
</View>
这是我的渲染代码。 我需要有关如何正确显示我的视频以及如何在点击时播放视频的帮助
根据 react-native-video 文档: 对于设备存储中的文件源,必须写 'file://' 路径开头
示例:
source={{ uri: 'file:///sdcard/Movies/sintel.mp4' }}
阅读文档https://github.com/react-native-community/react-native-video#source