繁体   English   中英

相机视频无法工作 - React Native

[英]Camera Video not Working - React Native

我一直想弄清楚为什么这段时间不起作用。 我使用了很多示例代码,但是我仍然无法弄明白。

 takeVideo() {
    console.log('started to take video');
    this.camera.capture({
      audio: true,
      mode: Camera.constants.CaptureMode.video,
      target: Camera.constants.CaptureTarget.disk
    }).then((data) => {
      this.setState({ path: data.path });
      console.log(data);
    }).catch((err) => console.log(err));
  }

  stopVideo() {
    this.camera.stopCapture();
    console.log(this.state.path);
  }

  renderCamera() {
    return (
      <View>
        <Camera
          ref={(cam) => {
            this.camera = cam;
          }}
          style={styles.preview}
          aspect={Camera.constants.Aspect.fill}
          captureTarget={Camera.constants.CaptureTarget.disk}
          captureMode={Camera.constants.CaptureMode.video}
        >
          <TouchableHighlight
            style={styles.capture}
            onPressIn={this.takeVideo.bind(this)}
            onPressOut={this.stopVideo.bind(this)}
            underlayColor="rgba(255, 255, 255, 0.5)"
          >
            <View />
          </TouchableHighlight>
        </Camera>
      </View>
    );
  }

什么不行

当我在console.log(this.state.path)它输出false ,这意味着它没有改变,视频也没有记录。

信息

  • 这是在IOS上
  • 工作如果我改变Camera.constants.CaptureMode.videoCamera.constants.CaptureMode.still.video => .still
  • RN版本: react-native-cli: 2.0.1 react-native: 0.44.0

回购

我发现这个回购试图与我完全一样,并且遇到了同样的问题。 这是回购: https//github.com/MiLeung/record

代码中的所有内容都可以,但是您缺少一件重要的事情。

this.camera.capture({
      audio: true,
      mode: Camera.constants.CaptureMode.video,
      target: Camera.constants.CaptureTarget.disk
}).then((data) => {
      this.setState({ path: data.path });
      console.log(data);
}).catch((err) => console.log(err));

在上面的代码中,您告诉状态, 保存数据设置对象路径。

但是,那里:

stopVideo() {
    this.camera.stopCapture();
    console.log(this.state.path);
}

保存数据之前获取路径对象。

试试这个:

this.camera.capture({
          audio: true,
          mode: Camera.constants.CaptureMode.video,
          target: Camera.constants.CaptureTarget.disk
}).then((data) => {
          this.setState({ path: data.path });
          console.log(this.state.path); // You should have your path set
          console.log(data);
}).catch((err) => console.log(err));

stopCapture函数告诉本机代码,停止录制和保存视频 - 可能需要一些时间,因此 stopCapture不起作用后立即执行this.state.path

有关详细信息,请查看https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Promise

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM