Я пытаюсь использовать 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.

1 ответ1

0

Наконец-то я нашел решение. Как я и предполагал, мне нужно преобразовать YUY2 в YUV420 перед кодированием и потоковой передачей H264. Поэтому команда должна быть ffmpeg -f avfoundation -pix_fmt uyvy422 -video_size 1280x720 -framerate 30 -i "0" -pix_fmt yuv420p -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

Благодаря этому

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .