我正在开发一个应用程序,程序的一部分是拍摄视频,然后上传。我使用react-native-video
在用户完成记录之后显示预览,使用react-native-camera
显示捕获过程。我还使用react-navigation
在屏幕之间移动。
目前,我可以进入预览屏幕,并从Redux设置视频组件的源uri。然而,没有球员可以看到。uri格式为"file:///path/video.mp4",“,因此很明显,它应该按预期在应用程序缓存中。
首先,向用户展示一个摄像机,在那里s/他可以捕获视频。
const recordVideo = async () => {
if (camera) {
const data = await camera.current.recordAsync()
if (data) {
dispatch(saveVideo(data)) <-- CONTAINS THE URI
navigation.navigate(CONFIRM)
}
}
当stopRecording()被调用时,这个承诺显然解决了,并且视频的URI将被分派到Redux。之后,我们导航到“确认屏幕”,在那里,用户可以预览视频,并选择是拍摄另一个还是与这一个。
我的问题是,我根本无法播放那个预览视频。我想我已经尽我所能了,我已经厌倦了一些看似简单、太难做的事情。我让这段视频播放几次是因为一些奇怪的原因,所以这不是玩家的错。充其量不过是显示预览一次,但是当你回去拍摄另一个视频时,就不再有视频预览了。另外,“确认”屏幕通常会加载照片(以相同的方式拍摄:相机->确认),但是当轮到视频时,它就不能工作了。视频组件的onError处理程序还为我提供了以下内容:{"error": {"extra": -2147483648, "what": 1}}
,这似乎是胡说八道。
PS。是的,我已经阅读了所有相关的文章,但没有找到合适的解决方案。
发布于 2021-07-01 10:53:12
使用Exoplayer
不要在Android上使用旧的媒体播放器,而是尝试使用更现代的Exoplayer。如果您使用的是Reactinative0.60+,您可以通过执行以下操作在react-native.config.js
中指定这一点:
module.exports = {
dependencies: {
"react-native-video": {
platforms: {
android: {
sourceDir: "../node_modules/react-native-video/android-exoplayer"
}
}
}
}
};
我也经历过同样的问题,这个解决方案对我们有效。请注意,我们只支持Android 5+,所以不能确定这是否适用于较老的设备。
https://github.com/react-native-video/react-native-video/issues/1747#issuecomment-572512595
https://stackoverflow.com/questions/62889777
复制相似问题