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

使用 FFmpeg 从网络摄像头录制的视频在 iOS 本机播放器中不同步

如何解决使用 FFmpeg 从网络摄像头录制的视频在 iOS 本机播放器中不同步

目标

我正在尝试从插入 PC 的网络摄像头录制视频(持续时间 ≈ 1 分钟到 4 小时)。然后在与 PC 连接到同一网络的 Ipad 上录制视频结束后播放。

为此,我尝试使用 ffmpeg 录制视频(我使用的详细命令如下)。然后我通过 Java 服务器将 PC 上的视频提供给 Ipad(该服务器与其他视频配合良好,所以我认为问题不在这里)。

问题

当我在 iPad 原生播放器上播放视频时,例如在 Safari 中,声音比视频快,因此它与视频不同步。如果我请求视频和音频重新同步特定时间,则播放时音频会再次不同步。

  • 通过请求服务器在 PC 上的 VLC 或 Firefox 上播放的视频同步良好。
  • 在 Ipad 上从服务器播放的另一个视频(我下载了 this one 进行测试)保持同步。

只有结合iOS原生播放器播放的FFmpeg自己录制的视频才能观察到不同步。

FFmpeg 命令

我使用 FFmpeg 从网络摄像头录制视频并将其保存为 iOS 上可读的文件格式。

ffmpeg -y -f avfoundation -framerate 25 -pixel_format nv12 -video_size 1280x720 -i "0:0" -r 25 out.mp4

根据ffmpeg生成的记录文件信息如下:

> ffmpeg -i out.mp4
Input #0,mov,mp4,m4a,3gp,3g2,mj2,from 'out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:00:33.76,start: 0.000000,bitrate: 1510 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661),yuv420p,1280x720,1440 kb/s,25 fps,25 tbr,12800 tbn,50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D),48000 Hz,mono,fltp,61 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

来自电视和视频的兼容视频格式iPad Pro specs

支持的视频格式:H.264 视频高达 4K,每秒 30 帧,High Profile 4.2 级,AAC-LC 音频高达 160 Kbps、48kHz、立体声音频或杜比音频高达 1008 Kbps、48kHz、立体声或.m4v、.mp4 和 .mov 文件格式的多声道音频; MPEG‑4 视频高达 2.5 Mbps,640 x 480 像素,每秒 30 帧,带有 AAC‑LC 音频的简单配置文件,每通道高达 160 Kbps,48kHz,立体声音频或杜比音频,高达 1008 Kbps,48kHz,立体声或多通道.m4v、.mp4 和 .mov 文件格式的音频; Motion JPEG (M-JPEG) 高达 35 Mbps、1280 x 720 像素、每秒 30 帧、ulaw 音频、.avi 文件格式的 PCM 立体声音频

我没有看到我不尊重哪些编解码器或配置文件

ps:我写 PC,但我目前正在 Mac 上尝试这个。最终,我希望能够在 Linux 甚至 Windows 上执行此操作。看起来我只需要更改输入设备就可以做到这一点,这对于 MacOS 来说是 avfoundation

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