Как оптимизировать преобразование FFMPEG h264 / aac при создании сегментов HLS

Я генерирую сегменты HLS с помощью FFMPEG. Вот команда, которую я использую:

ffmpeg -i "rtmp: // localhost / oflaDemo / 33 / hlsopt3 live = 1" -y -c: v libx264 -b: v 1000k -vprofile baseline -preset medium -x264opts level = 41 -threads 4 -s 480x360 -map 0: v -c: a libfaac -b: a 160000 -ac 1 -hls_time 3 -hls_list_size 3 -hls_wrap 10 -start_number 1 hlsopt3.m3u8

Я работаю над Ubuntu 12.04 и использую RED5 1.0.2 в качестве потокового сервера, и я хочу транслировать видео на устройства Android и iOS. Но воспроизведение на устройствах очень рывчатое, они не воспроизводят видео плавно. Кроме того, загрузка ЦП моего сервера превышает 100%.

После стольких исследований я обнаружил, что загрузка ЦП связана с преобразованием H264 / mpeg-4 aac, но без преобразования он не будет воспроизводиться на устройствах iOS и Android.

Поэтому, пожалуйста, предложите мне любое решение. Как я могу плавно играть на мобильных устройствах, а также экономить загрузку процессора.

Пожалуйста, помогите мне, я почти потратил 10 дней на это.

Любая помощь могла бы быть полезна.


person Arjun Thakur    schedule 07.01.2014    source источник


Ответы (1)


Я нашел причину, по которой FFMPEG использует 100% ЦП и почему на устройствах отображается прерывистое видео. Это потому, что я не упомянул частоту кадров.

-r 24

ffmpeg -i "rtmp://localhost/oflaDemo/33/hlsopt6 live=1" -y -c:v libx264 \
 -b:v 1000k -r 24 -vprofile baseline -preset medium -x264opts level=41 \
 -threads 4 -s 480x360 -map 0:v -c:a libfaac -b:a 160000 -ac 1 -hls_time 3 \
 -hls_list_size 2 -hls_wrap 10 -start_number 1 hlsopt6.m3u8

Теперь он плавно воспроизводится на всех устройствах, а также FFMPEG требует меньше ресурсов процессора.

person Arjun Thakur    schedule 07.01.2014
comment
Обычно вам не нужно объявлять частоту кадров вывода: вывод будет просто использовать ту же частоту кадров, что и ввод. ffmpeg просто отбрасывает или дублирует кадры для достижения желаемой выходной частоты кадров. - person llogan; 07.01.2014
comment
Да, вы правы. Но в случае потоковой передачи через RED5. Если мы не укажем частоту кадров при преобразовании потокового видео RTMP в H264 / MPEG-4 Aac, воспроизведение видео будет прерывистым. Поэтому в FFMPEG необходимо определить частоту кадров на выходе. - person Arjun Thakur; 08.01.2014
comment
Я проверил вашу команду. Его вывод находится в файлах. Есть ли способ отправить вывод hls в виде фида на серверы веб-мастеров? - person sajad; 25.09.2014
comment
@sajad просто поместил на свой веб-сервер пример общедоступной папки / var / www / html - person Fthr; 16.01.2017