uni-app ios拍摄视频存入相册后上传后端返回无法在前端播放

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app ios拍摄视频存入相册后上传后端返回无法在前端播放

操作步骤:

  • ios手机拍摄视频,然后存入相册,在上传,拿到返回数据后无法展示

预期结果:

  • 正常播放视频

实际结果:

  • 无法正常播放视频

bug描述:

  • ios手机拍摄视频后,保存在相册,然后通过上传接口上传,后端返回数据以后,在前端展示,却无法显示视频内容
信息类别 信息内容
产品分类 uniapp/App
PC开发环境操作系统 Windows
HBuilderX类型 正式
HBuilderX版本号 3.99
手机系统 iOS
手机系统版本号 iOS 17
手机厂商 苹果
手机机型 ios
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

17 回复

显示黑块吗


是的,显示一个黑块和一个无法播放的图标,在pc上显示了视频的控件,但是视频内容没有

回复 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. 前端播放器不支持

某些前端播放器可能不支持特定的视频格式或编码。

解决方案:

  • 使用兼容性更好的播放器,如 video.jshls.js
  • 确保播放器支持 .mp4 格式和 H.264 编码。

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>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!