3

这是我围绕这个<Video />元素的代码

class Menu extends Component {
    ...
    audioFile = null
    componentWillMount(){
        this.audioFile = require('../../assets/audio/subtle.mp3');
    }
}

<Video source={{uri: this.audioFile}}   // Can be a URL or a local file.
  ref={(ref) => {
    this.player = ref
  }}
  onError={this.audioError} 
  audioOnly
  style={styles.backgroundVideo}
  playInBackground
  playWhenInactive
  ignoreSilentSwitch={"ignore"}  
/>

我得到的具体错误是......

TypeError: uri.match is not a function. (In 'uri.match(/^\//)', 'uri.match' is undefined)

这里是版本

expo: 30.0.0

expokit: 1.7.1

react: 16.3.1

react-native: https://github.com/expo/react-native/archive/sdk-30.0.0.tar.gz

react-native-video: 3.2.1

我正在尝试从此处的本地包中加载音频资产,但我似乎无法让它工作,如果我从该文件夹中删除音频文件,它会抛出一个找不到它的错误,所以它肯定是找到文件。

希望对此有所帮助

4

2 回答 2

0

我找到了解决方案。变量audioFile本身包含uri密钥。

所以而不是

<Video source={{uri: this.audioFile}}   // Can be a URL or a local file.
  ...
  ...
/>

试试这个 :

<Video source={this.audioFile}   // Can be a URL or a local file.
  ...
  ...
/>

请注意,我已直接将 传递this.audioFile给源。

更重要的是,要显示视频,您必须传递高度和宽度。

于 2019-05-24T06:22:56.820 回答
0

这就是使它在我的用例中起作用的原因

<Video source={require('../../assets/audio/file.mp3')} ... />

于 2019-05-28T20:23:02.887 回答