微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 react-native-video 中捕获屏幕截图

如何解决无法在 react-native-video 中捕获屏幕截图

反应原生平台:

  • iOS
  • 安卓

问题:

我正在尝试捕获屏幕。当视频暂停时。但是每当我尝试从视频中捕获图像时。它的投掷战无法捕捉到;

可能的未处理的承诺拒绝(ID:25): 错误内容大小不得为零或负数。得到:(0,410)

库版本:

"react-native-video": "^5.1.0-alpha8","react-native-view-shot": "^3.1.2",

代码

 const viewShotRef = useRef(null);
 const [uri,setUri] = useState('');

<ViewShot
      style={[styles.imageViewerStyleVideo,{height: 410}]}
      ref={viewShotRef}
      captureMode="continuous"
      options={{format: 'jpg',quality: 0.9}}>
         <Video
             ref={(p) => {
               videoRef = p;
         }}
         paused={isPaused}
         source={getimageSource(caseViewerVideo)}
         resizeMode={'contain'}
         selectedVideoTrack={'auto'}
         style={styles.fullScreenMode}
         controls={true}
         playInBackground={false}
         playWhenInactive={false}
      />
</ViewShot>

<pressable
        style={{
          width: 40,height: 40,borderWidth: 1,borderRadius: 20,position: 'absolute',top: 260,right: 80,borderColor: Colors.pencil,backgroundColor: Colors.shadow,}}
        onPress={() => onCapture()}
 />

const onCapture = async () => {
    const uri = await viewShotRef.current.capture();
    setUri(uri);
    console.log(uri);
 };

解决方法

根据github page

“连续”是实验性的,这将连续捕获大量图像。对于非常具体的用例。

从您的代码中,我看到您有一个 Pressable 来制作屏幕截图。我建议您完全删除 captureMode 道具。

在常见问题上我读到:

获取“内容大小不得为零或负数。”

确保您不要立即快照,您至少需要等待 有第一个 onLayout 事件,或者在超时之后,否则 视图可能还没有准备好。 (等待也应该是安全的 如果您有图像 onLoad)。如果问题仍然存在,请使 确保您的视图实际上具有宽度和高度 > 0。

或者,您可以使用 ViewShot 组件来等待 第一个 onLayout。

所以也许你应该在制作屏幕截图之前等待 VideoonLoad 事件(另一个建议你删除 captureMode 道具的原因)。

或者,您可以使用 captureRef(view,options)captureScreen() 代替 capture()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。