Objective
I am trying to record a video (duration ≈ 1min to 4hours) from a webcam plugged into a PC. Then play just after the end of the recording the video on an Ipad connected to the same network as the PC.
To do this I'm trying to record the video using ffmpeg (the detailed command I use is below). Then I serve the video that's on the PC to the Ipad via a Java server (The server works well with other videos so I don't think the problem is here).
Problem
When I play the video on the IPad native player, for example in Safari, the sound is going faster than the video and therefore it's desynchronizing from the video. If I request a certain time the video and audio re-sync then the audio is desynchronizing again while playing.
- The video when played on VLC on the PC or on Firefox by requesting the server is well synced.
- Another video (I downloaded this one to test) played on the Ipad from the server stay synced.
It is only with the combination of a video record by myself using FFmpeg played in the iOS native player that I can observe the desynchronization.
FFmpeg command
I use FFmpeg to record the video from the webcam and save it into a file format readable on iOS.
ffmpeg -y -f avfoundation -framerate 25 -pixel_format nv12 -video_size 1280x720 -i "0:0" -r 25 out.mp4
The resulting recorded file info according to ffmpeg is below:
> 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
Compatible video formats from TV and Video iPad Pro specs
Video formats supported: H.264 video up to 4K, 30 frames per second, High Profile level 4.2 with AAC‑LC audio up to 160 Kbps, 48kHz, stereo audio or Dolby Audio up to 1008 Kbps, 48kHz, stereo or multichannel audio, in .m4v, .mp4, and .mov file formats; MPEG‑4 video up to 2.5 Mbps, 640 by 480 pixels, 30 frames per second, Simple Profile with AAC‑LC audio up to 160 Kbps per channel, 48kHz, stereo audio or Dolby Audio up to 1008 Kbps, 48kHz, stereo or multichannel audio, in .m4v, .mp4, and .mov file formats; Motion JPEG (M‑JPEG) up to 35 Mbps, 1280 by 720 pixels, 30 frames per second, audio in ulaw, PCM stereo audio in .avi file format
I don't see what codecs or profiles I don't respect?
ps: I write PC but I'm currently trying this on a Mac. Eventually, I want to be able to do it also on Linux or even Windows. It looks like I just have to change the input devices to do that, which is avfoundation for MacOS.