Я пытаюсь использовать FFmpeg для потоковой передачи моей веб-камеры на устройство Android на основе HttpLiveStreaming(HLS). Чтобы играть в MPEG-TS на Android, я использую ExoPlayer.
Потоковая команда FFmpeg: ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 -i "0" -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test
Когда я использовал VLC для воспроизведения MPEG-TS, все было в порядке. Однако мне не удалось воспроизвести его, используя ExoPlayer на Android или Quicktime(Safari) на Mac OS. Тогда я попытался выяснить причину.
Я попытался потоковое видео MP4, используя FFmpeg таким же образом. Например: ffmpeg -re -i test.mp4 -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test
Я могу играть в нее, используя как ExoPlayer, так и Quicktime.
Единственное различие, которое я обнаружил между этими двумя случаями, заключается в том, что формат захвата веб-камеры - YUY2, в то время как в формате mp4 - YUV420, и они используют разные кодеры H264. Я думаю, что декодеры H264 для YUY2 и YUV420 не совпадают.
Я не уверен, что мой вывод был правильным, и единственным решением этой проблемы является преобразование YUY2 в YUV420 перед потоковой передачей.
Я надеюсь, что кто-то, использующий Mac, может попытаться выполнить потоковую передачу камеры Facetime таким же образом, как я, и посмотреть, можно ли воспроизвести ее в Safari.