uni-app ios拍摄视频存入相册后上传后端返回无法在前端播放
uni-app ios拍摄视频存入相册后上传后端返回无法在前端播放
操作步骤:
- ios手机拍摄视频,然后存入相册,在上传,拿到返回数据后无法展示
预期结果:
- 正常播放视频
实际结果:
- 无法正常播放视频
bug描述:
- ios手机拍摄视频后,保存在相册,然后通过上传接口上传,后端返回数据以后,在前端展示,却无法显示视频内容
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.99 |
手机系统 | iOS |
手机系统版本号 | iOS 17 |
手机厂商 | 苹果 |
手机机型 | ios |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
显示黑块吗
回复 1***@qq.com: 解决了吗
后端返回的路径单独打开可以播放吗?
显示黑块是预览图没加载出来吗?直接点击黑块可以播放吗?
无法播放有监听 @error 事件吗? 打印的啥?
后端返回的路径无法单独打开,显示的黑块只是单纯的黑块,直接点击黑块无法播放,因为无法播放,所以没有进行监听
ios拍摄视频不存入相册直接上传是可以在前端显示播放的,就是加入了存入相册这一步才导致前端视频播放不了,我现在怀疑的是文件格式问题,是不是拍摄存入后文件格式发生改变,因为直接保存到相册的.m4v文件在上传是可以进行播放的
就是我下面放的图片,有时间,但是没有内容这样
就是这个样子
看你这个样式应该是在浏览器打开的,打开network看看资源的请求路径。或者发出来看看
回复 underfined: 这是在支付宝模拟器上打开的,运行的钉钉小程序
ios传入的视频后面都是大写的VIDEO
这个 xxx.VIDEO 是后台返回的吗? 一般来说前段上传啥格式后台返回啥格式,你要不试下打印下你拍摄完本地路径的格式
回复 underfined: 我这边试了一下,大概是因为文件格式,目前后缀名mv4是可以播放的,我把这个文件转换成.mv4以后可以播放,但我不知道它转换前是什么格式,(我上传返回的格式也是这个后缀名为大写的VIDEO呀)
我测试了下。 使用 uni.chooseVideo 拍摄完视频返回的路径在本地为 mp4 格式,不知道你的这个 VIDEO是哪里的
你用的安卓还是模拟器还是苹果?我这个是用用苹果手机拿到的
回复 1***@qq.com: 苹果手机。不是模拟器。iPhone11
在使用 uni-app 进行 iOS 视频拍摄并上传到后端后,如果返回的视频无法在前端播放,可能的原因有很多。以下是一些可能的原因及解决方案:
1. 视频编码或格式问题
iOS 设备拍摄的视频默认使用 .mov
格式和 H.264 编码,但某些浏览器或前端播放器可能不支持 .mov
格式或特定的编码方式。
解决方案:
- 在后端对视频进行转码,将
.mov
文件转换为通用的.mp4
格式,并使用 H.264 编码。 - 使用第三方库(如 FFmpeg)进行视频转码。
2. 视频文件损坏
在上传或存储过程中,视频文件可能被损坏,导致无法播放。
解决方案:
- 检查上传和存储的流程,确保文件完整性。
- 使用工具(如 FFmpeg)检查视频文件是否损坏:
ffmpeg -v error -i input.mov -f null -
3. MIME 类型设置错误
后端返回视频时,如果 MIME 类型设置不正确,可能导致前端无法正确解析视频。
解决方案:
- 确保后端返回视频时,正确设置
Content-Type
头。例如,.mp4
文件应返回:Content-Type: video/mp4
4. 跨域问题
如果视频是通过跨域请求获取的,可能需要配置 CORS(跨域资源共享)。
解决方案:
- 在后端配置 CORS,允许前端域名访问视频资源。
- 例如,在 Nginx 中添加以下配置:
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
5. 前端播放器不支持
某些前端播放器可能不支持特定的视频格式或编码。
解决方案:
6. 视频元数据丢失
在上传或处理过程中,视频的元数据可能丢失,导致播放器无法正确解析。
解决方案:
- 使用工具(如 FFmpeg)修复视频元数据:
ffmpeg -i input.mov -c copy -map_metadata 0 output.mp4
7. uni-app 上传问题
如果上传过程中存在问题,可能导致视频文件不完整或损坏。
解决方案:
- 检查 uni-app 的上传代码,确保文件完整上传。
- 例如,使用
uni.uploadFile
时,确保filePath
正确:uni.uploadFile({ url: 'https://example.com/upload', filePath: tempFilePath, // 确保这是正确的文件路径 name: 'file', success: (res) => { console.log('上传成功', res); }, fail: (err) => { console.error('上传失败', err); } });
8. 后端返回的 URL 问题
后端返回的视频 URL 可能无效或无法访问。
解决方案:
- 检查后端返回的 URL,确保其有效且可访问。
- 如果使用 CDN,确保 CDN 配置正确。
9. iOS 权限问题
iOS 可能限制了应用访问相册中的视频文件。
解决方案:
- 确保在
Info.plist
中配置了相册访问权限:<key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册以保存视频</string>