2014-01-07 3 views
3

Я генерирую сегменты HLS с использованием FFMPEG. Вот команда, которую я использую:Как оптимизировать преобразование h264/aac FFMPEG при генерации сегментов HLS тоже

ffmpeg -i "rtmp: // localhost/oflaDemo/33/hlsopt3 live = 1" -y -c: v libx264 -b: v 1000k -vprofile baseline -preset medium -x264opts уровень = 41 -threads 4 -s 480x360 -map 0: v -c: а libfaac -b: а 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%.

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

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

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

Любая помощь была бы действительно оценена.

+0

Вы всегда должны включать полный вывод консоли 'ffmpeg'. Пожалуйста, выделите свой вывод команд и консоли, а затем нажмите 'ctrl' +' k', чтобы отформатировать его правильно. Вопросы ** не ** о программировании здесь неактуальны. Ваш вопрос можно перенести в [su]. – LordNeckbeard

ответ

3

Я нашел причину, по которой 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 занимают меньше CPU.

+0

Обычно вам не нужно объявлять скорость выходного кадра: выход будет просто использовать ту же частоту кадров, что и вход. 'ffmpeg' просто отбрасывает или дублирует кадры для достижения желаемой выходной частоты кадров. – LordNeckbeard

+0

Да, вы правы Но в случае потоковой передачи через RED5 Если мы не ставим частоту кадров при конвертировании потокового видео RTMP в H264/MPEG-4 Aac, тогда воспроизведение видео будет отрывистым. Вот почему требуется определить частоту кадров вывода в FFMPEG. –

+0

Я проверил вашу команду. Его вывод находится в файлах. Есть ли способ отправить вывод hls в качестве канала для веб-серверов? – sajad