Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: FFMPEG стриминг  (Прочитано 11398 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vovanrus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
FFMPEG стриминг
« : 13 Августа 2014, 03:34:50 »
Всем привет, на днях опробывал ffmpeg в качестве кодировщика iptv, довольно удобная вещь и самое главное гораздо стабильнее работает по сравнению с vlc, но есть одна заковырка, в vlc для стабильности я устанавливал опцию network-caching=5000, то есть буферизацию в 5с, а в ffmpeg есть что то подобное? По стандарту он сразу же пытается захватить видео и начать его кодировать, а хотелось бы, чтоб был определенный кэш, иначе вылетают различные ошибки, в результате чего видео бьется, хотя в влс все кодирует нормально, даже если запустить одновременно ffmpeg и vlc.
Ошибки лезут примерно такие:
[mpegts @ 0x83cc7e0] Continuity check failed for pid 405 expected 14 got 7
[mpegts @ 0x83cc7e0] PES packet size mismatch
[h264 @ 0x90556a0] Reference 2 >= 2
[h264 @ 0x90556a0] error while decoding MB 53 36, bytestream (22604)
[mpegts @ 0x83cc7e0] Continuity check failed for pid 17 expected 0 got 1
[h264 @ 0x90a6a60] number of reference frames (0+6) exceeds max (4; probably corrupt input), discarding one
в vlc будет примерно тоже самое если network-caching понизить к примеру до 500, поэтому и возникло подозрение на малую буферизацию в ffmpeg.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #1 : 13 Августа 2014, 04:31:08 »
где пример команда?
Wars ~.o

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #2 : 13 Августа 2014, 05:50:29 »
vovanrus,
в vlc для стабильности я устанавливал опцию network-caching=5000, то есть буферизацию в 5с, а в ffmpeg есть что то подобное?
http://ffmpeg.org/ffmpeg-all.html#cache

[h264 @ 0x90a6a60] количество опорных кадров (0 + 6) превышает макс (4; вероятно повреждён вход), сбросить один...

Прежде чем стримить нужно во первых потрудиться изучить мануал по кодированию - https://help.ubuntu.ru/wiki/ffmpeg ... во вторых не кодировать на лету, особенно с применением оптимизирующих функций кодека x264-H264, например таких как референсные кадры - включая не только опорные но и промежуточные, а так же потоковое обновление изменений в опорных кадрах и т.п.
Наилучший способ захвата сигнала - это lossless и raw форматы - помогает избежать проблем с кодированием на лету, которое во первых достаточно требовательно к ресурсам, во вторых не обходится без ошибок, особенно если параметры заданы неверно...

Возвращаясь к переводу отчёта об ошибке кодека H264 - можно смело и уверенно сказать что причина этой ошибки завязана явно не в величине буфера, о которой вы так настойчиво и уверенно глаголите...

И, если вдруг вы на лету пытаетесь перегнать протокол потока mpegts в какой нибудь mkv, avi или mp4 - то вообщем я при таком раскладе совсем не идивлюсь такому изобилию ошибок... Попробуйте стримить в режиме codec copy, задавая при этом свойственное для файлов mpegts расширение - *.ts или *.mts
Общие сведения по mpegts здесь: https://ru.wikipedia.org/wiki/MPEG-TS
« Последнее редактирование: 13 Августа 2014, 07:02:21 от archiver »

Оффлайн vovanrus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #3 : 13 Августа 2014, 14:10:27 »
конечно же я забыл указать то что кодирую с помощью avconv, причина хочу получить 50 кадров в секунду на выходе, с ffmpeg какие то траблы, фильтр yadif не хочет работать. Большой разницы не заметил в этих прогах, ffmpeg собрал из исходников из git. Вообщем моя команда:
avconv -threads 8 -i http://127.0.0.1:8888/udp/238.0.0.1:3001 \
-filter_complex 'yadif=1:0' \
-s 1280x720 -r 50 -vcodec libx264 -b 4000k -maxrate 4000k \
-b-pyramid 1 -keyint_min 1 -subq 1 -refs 1 -pass 1 -fastfirstpass 1 -g 25 -bufsize 5000k -level 32 \
-acodec libmp3lame -ab 128000 -ar 44100 -f mpegts udp://238.0.0.2:3001
входящий поток FullHD канал (если указать просто udp://238.0.0.1:3001, то вообще сплошные ошибки полезут, приходится через udpxy прогонять), естественно я понимаю, что подобное кодирование требует большой производительности, но и процесс стоит i7-2600k. Ключи как раз таки подбирал по мануалу https://help.ubuntu.ru/wiki/ffmpeg. Нагрузка на процессор 20-25 процентов, то есть с лихвой хватает, но ошибки все равно рано или поздно вылезают. Может буфера какого не хватает? По поводу RAW не совсем понял как закодировать подобным образом... Я думаю теперь я прояснил ситуацию  :)

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #4 : 13 Августа 2014, 18:36:01 »
vovanrus,
конечно же я забыл указать то что кодирую с помощью avconv, причина хочу получить 50 кадров в секунду на выходе
Т.е судя по вашему утверждению откодировать в 50 кадров можно только с помощью avconv... Это ошибочное утверждение...
Да и неважно сколько у вас ресурсов в компьютере... Стриминг протекает сложно при кодирования на лету, тем более необходимо соблюсти принципы совместимости входящих-выходящих потоков и форматов...
Транскодирование Потоковое
По ошибке # 1965: для того, чтобы перекодировать Стрим MPEG-1 или MPEG-2 в полезную нагрузку, вы ДОЛЖНЫ поставить частоту кадров 25 кадров в секунду

https://wiki.videolan.org/MPEG/

-filter_complex 'yadif=1:0'Кто вам сказал что опции yadif задаются именно так? Перечитайте внимательнее мануал на предмет опций установки фильтров...

Вот вам актуальные, минимальные опции с которыми должно кодироваться HD-video (1280x720) для стрима в приличном качестве:
ffmpeg -threads 8 -thread_type 2 -i http://127.0.0.1:8888/udp/238.0.0.1:3001 \
-vf yadif=0:0,scale=1280:720:flags=bicubic \
-vcodec libx264 -profile:v high -level 3.1 -b 3000k -minrate 3000k -maxrate 3000k -bufsize 5000k \
-g 25 -bf 2 -b-pyramid 1 -fast-pskip 0 -b_strategy 1 -direct-pred 1 -keyint_min 1 -intra-refresh 1 -refs 1 -me_range 24 -subq 6 -cmp 0 -i_qfactor 1.00 \
-acodec aac -strict experimental -b:a 128k -ar 48000 -af aresample=async=100 -f mp4 udp://238.0.0.2:3001
(фреймрэйт не надо выставлять - он сам установится, согласно опциям или источнику... существенно выставлять фреймрейт тогда, когда он искажается в процессе кодирования)... если пример проглючит, то первым делом попробуйте удалить yadif из фильтров: -vf scale=1280:720:flags=bicubic

По поводу RAW не совсем понял как закодировать подобным образом...

Lossless x264:
ffmpeg .... -vcodec libx264 -intra -q:v 1
Raw:
raw-lossless
ffmpeg .... -vcodec ffv1 -q:v 1 или истинный raw (может получиться очень большой размер файла):
ffmpeg .... -vcodec rawvideo
Всё это есть в мануале, который как вы говорите - читали ;)

Пользователь решил продолжить мысль [time]13 Август 2014, 20:28:01[/time]:
vovanrus,
Хотя, в вашем случае можно было бы обойтись и без кодирования:
ffmpeg -threads 8 -thread_type 2 -i http://127.0.0.1:8888/udp/238.0.0.1:3001 \
-vf yadif=0:0,scale=1280:720:flags=bicubic \
-vcodec copy -acodec copy udp://238.0.0.2:3001
Только я не уверен в том, что копирование кодеров и потоков положительно отреагирует на установку опций фильтра (особенно yadif, scale может быть и схавает), - попробуйте, если потребует установить кодеки, то вернитесь к верхнему примеру...
« Последнее редактирование: 27 Августа 2014, 18:55:00 от archiver »

Оффлайн vovanrus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #5 : 13 Августа 2014, 23:17:59 »


Вот вам актуальные, минимальные опции с которыми должно кодироваться HD-video (1280x720) для стрима в приличном качестве:
ffmpeg -threads 8 -thread_type 2 -i http://127.0.0.1:8888/udp/238.0.0.1:3001 \
-vf yadif=1:0,scale=1280:720:flags=bicubic \
-vcodec libx264 -profile:v high -level 3.1 -b 3000k -minrate 3000k -maxrate 3000k -bufsize 5000k \
-g 25 -bf 2 -b-pyramid 1 -fast-pskip 0 -b_strategy 1 -direct-pred 1 -keyint_min 1 -intra-refresh 1 -refs 1 -me_range 24 -subq 6 -cmp 0 -i_qfactor 1.00 \
-acodec aac -strict experimental -b:a 128k -ar 48000 -af aresample=async=100 -f mp4 udp://238.0.0.2:3001
(фреймрэйт не надо выставлять - он сам установится, согласно опциям или источнику... существенно выставлять фреймрейт тогда, когда он искажается в процессе кодирования)... если пример проглючит, то первым делом попробуйте удалить yadif из фильтров: -vf scale=1280:720:flags=bicubic
опробывал, загрузка под сотню, убрал yadif, выставил subq=1, нагрузка 25%, но при этом все в сплошных ошибках, кстати это даже при кодировании на низких разрешениях, avconv справляется с этим без проблем, логи ffmpeg:
[h264 @ 0xa852980] reference picture missing during reorder
[h264 @ 0xa852980] Missing reference picture, default is 67800
[h264 @ 0xa852980] left block unavailable for requested intra mode at 0 50kbits/s dup=360 drop=0
[h264 @ 0xa852980] error while decoding MB 0 50, bytestream 3959
[mpegts @ 0xa77ab80] PES packet size mismatch
[mp2 @ 0xa881c80] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[h264 @ 0xa852980] Found reference and non-reference fields in the same frame, which is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[h264 @ 0xa852980] If you want to help, upload a sample of this file to ftp://upload.ffmpeg.org/incoming/ and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)
[h264 @ 0xa852980] decode_slice_header error
[h264 @ 0xa852980] reference picture missing during reorder bitrate=3267.5kbits/s dup=360 drop=0
    Last message repeated 1 times
[h264 @ 0xa852980] Missing reference picture, default is 67829
    Last message repeated 1 times
[h264 @ 0xa852980] mmco: unref short failure
    Last message repeated 1 times
[h264 @ 0xa852980] number of reference frames (0+5) exceeds max (4; probably corrupt input), discarding one
[h264 @ 0xa852980] reference picture missing during reorder
[h264 @ 0xa852980] Missing reference picture, default is 67860
[h264 @ 0xa852980] mmco: unref short failure
    Last message repeated 1 times
[h264 @ 0xa852980] number of reference frames (0+5) exceeds max (4; probably corrupt input), discarding one
[h264 @ 0xa852980] mmco: unref short failure
    Last message repeated 1 times
[h264 @ 0xa852980] number of reference frames (0+5) exceeds max (4; probably corrupt input), discarding one
frame= 1297 fps= 25 q=-1.0 Lsize=   21567kB time=00:00:51.80 bitrate=3410.7kbits/s dup=372 drop=0
и все в этом духе.
Ffmpeg версии:
vladimir@tv:~$ /usr/src/ffmpeg/ffmpeg -version
ffmpeg version N-65559-g0a52bbd Copyright (c) 2000-2014 the FFmpeg developers
built on Aug 13 2014 13:28:06 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
configuration: --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree --disable-yasm
libavutil      54.  1.100 / 54.  1.100
libavcodec     56.  0.100 / 56.  0.100
libavformat    56.  0.100 / 56.  0.100
libavdevice    56.  0.100 / 56.  0.100
libavfilter     5.  0.100 /  5.  0.100
libswscale      3.  0.100 /  3.  0.100
libswresample   1.  0.100 /  1.  0.100
libpostproc    53.  0.100 / 53.  0.100

Цитировать
Т.е судя по вашему утверждению откодировать в 50 кадров можно только с помощью avconv... Это ошибочное утверждение...
С ним проще оказалось это сделать.

Цитировать
Кто вам сказал что опции yadif задаются именно так? Перечитайте внимательнее мануал на предмет опций установки фильтров...
в разных источниках по разному :) иногда другие фильтры добавляю.

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #6 : 14 Августа 2014, 04:18:07 »
опробывал, загрузка под сотню, убрал yadif, выставил subq=1, нагрузка 25%, но при этом все в сплошных ошибках, кстати это даже при кодировании на низких разрешениях, avconv справляется с этим без проблем, логи ffmpeg:
Вот только давайте сказок на ходу не будем сочинять - avconv это форк ffmpeg - один  тот же код, отличие лишь в некотором командном управлении... К тому же нет такой программы как avconv, есть такая программа как libav  :coolsmiley:

С ним проще оказалось это сделать.
Видимо только по тому проще, что он вам не вывел кучу предупреждений о некорректности и ошибочности ваших действий, а тупо сделал всё по своему, попросту отыгнорироварав молча все ваши предпочтения ... и то я в этом очень сильно сомневаюсь, что libav съел у вас эту установку без ругани и вопросов < -filter_complex 'yadif=1:0' > - очень на враньё пиарское похоже, с долей вероятности 98% :)

в разных источниках по разному :) иногда другие фильтры добавляю.
Во всех источниках - как в либав, так и в ффмпег - правила установки фильтров практически эдентичны...
Ваша же установка фильтра - некорректна и работать скорее всего не будет, хотя бы из-за тех же одиночных кавычек :)
Опция фильтра -vf yadif=1:0 - преимущественна для входного интерлейсного видео. Для этого вам надо знать какой именно сигнал на входе и каковы его параметры, иначе можно ошибиться, что опять таки приведёт к ошибкам...
К тому же обратите внимание на эти сообщения:
[mpegts @ 0xa77ab80] размер PES пакет несоответствие
[mp2 @ 0xa881c80] Заголовок отсутствует
Ошибка при расшифровке поток # 0: 1: Неверные данные найдены при обработке вход
Похоже у вас битый или глючный файл на входе... Особенно наводит на мысли это собщение:
[mp2 @ 0xa881c80] Заголовок отсутствует
Отсутствие заголовка обычно вполне недвусмысленно свидетельствует о бракованности файла...


С вашей проблемой обратитесь сюда: http://ffmpeg.gusari.org/ - официальный форум поддержики ffmpeg... Задайте там свой вопрос, приведите свою строку и поторгуйтесь за правильность действий и установок ;) ...
Маленькое но - форум англоязычный...
« Последнее редактирование: 14 Августа 2014, 05:04:39 от archiver »

Оффлайн vovanrus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #7 : 15 Августа 2014, 14:23:25 »
Цитировать
Отсутствие заголовка обычно вполне недвусмысленно свидетельствует о бракованности файла...
поток точно не бракованный, проверял и через vlc и через ffmpeg.

Цитировать
Ваша же установка фильтра - некорректна и работать скорее всего не будет, хотя бы из-за тех же одиночных кавычек :)
Опция фильтра -vf yadif=1:0 - преимущественна для входного интерлейсного видео. Для этого вам надо знать какой именно сигнал на входе и каковы его параметры, иначе можно ошибиться, что опять таки приведёт к ошибкам...

может и некорректна, но libav ее кушает нормально.
Входной формат:
Stream #0.0[0x12d]: Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x191]: Audio: mp2, 48000 Hz, stereo, s16p, 192 kb/s

Сделал несколько тестов. Записал 3х минутное видео этого формата через тот же ffmpeg, ошибок при записи не было. Стал прогонять его под параметры:
ffmpeg -threads 8  -thread_type 2 -i /media/F/test.ts -vf yadif=1:0,scale=1280:720 -vcodec libx264 -b 3500k -subq 1 -refs 1 -g 25 -acodec libmp3lame -ab 96000 -ar 44100 -f mpegts udp://238.0.0.2:3001и заметил что при такой трансляции падает fps где то до 45, но ошибок не наблюдается. Хотя если попробывать не стримить на udp, а сохранить файлом, то видео будет в 50fps, при том что в логах будет все те же 45 fps, в логах:
Seems stream 0 codec frame rate differs from container frame rate: 50.00 (50/1) -> 50.00 (50/1)
Input #0, mpegts, from '/media/F/test.ts':
  Duration: 00:03:01.85, start: 1.400000, bitrate: 15518 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: Libav
    Stream #0.0[0x100]: Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x101]: Audio: mp2, 48000 Hz, stereo, s16, 192 kb/s
[buffer @ 0x810dac0] w:1920 h:1080 pixfmt:yuv420p
[yadif @ 0x8111520] mode:1 parity:0 auto_enable:0
[scale @ 0x81270a0] w:1920 h:1080 fmt:yuv420p -> w:1280 h:720 fmt:yuv420p flags:0x4
[libx264 @ 0x810ffc0] using SAR=1/1
[libx264 @ 0x810ffc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x810ffc0] profile Main, level 3.2
[mpegts @ 0x8111e20] muxrate VBR, pcr every 5 pkts, sdt every 200, pat/pmt every 40 pkts
Output #0, mpegts, to 'udp://238.0.0.2:3001':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=-1--1, 3500 kb/s, 90k tbn, 50 tbc
    Stream #0.1: Audio: libmp3lame, 44100 Hz, stereo, s16, 96 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
[h264 @ 0x810f7a0] Cannot parallelize deblocking type 1, decoding such frames in sequential order
frame= 9094 fps= 46 q=-1.0 Lsize=   87619kB time=181.19 bitrate=3961.6kbits/s dup=40 drop=0
video:78047kB audio:2123kB global headers:0kB muxing overhead 9.291979%
frame I:377   Avg QP:22.73  size: 65049
[libx264 @ 0x810ffc0] frame P:2602  Avg QP:25.13  size: 15133
[libx264 @ 0x810ffc0] frame B:6115  Avg QP:30.80  size:  2620
[libx264 @ 0x810ffc0] consecutive B-frames:  4.8% 13.8%  8.1% 73.2%
[libx264 @ 0x810ffc0] mb I  I16..4: 41.7%  0.0% 58.3%
[libx264 @ 0x810ffc0] mb P  I16..4:  7.0%  0.0%  1.3%  P16..4: 42.4% 10.8%  4.5%  0.0%  0.0%    skip:34.1%
[libx264 @ 0x810ffc0] mb B  I16..4:  0.5%  0.0%  0.0%  B16..8: 12.0%  2.0%  0.2%  direct: 4.5%  skip:80.8%  L0:38.8% L1:50.7% BI:10.5%
[libx264 @ 0x810ffc0] final ratefactor: 22.36
[libx264 @ 0x810ffc0] coded y,uvDC,uvAC intra: 58.3% 68.8% 31.7% inter: 8.0% 13.5% 1.9%
[libx264 @ 0x810ffc0] i16 v,h,dc,p: 24% 35% 27% 14%
[libx264 @ 0x810ffc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 32% 16%  7%  6%  4%  7%  4%  8%
[libx264 @ 0x810ffc0] i8c dc,h,v,p: 33% 34% 22% 11%
[libx264 @ 0x810ffc0] Weighted P-Frames: Y:0.7% UV:0.5%
[libx264 @ 0x810ffc0] kb/s:3515.28
возможно я что-то не так делал, но что то не так с фильтром. Нагрузка на процессор все те же 20-30%. Испробывал такую команду без фильтров:
ffmpeg -threads 8  -thread_type 2 -i http://127.0.0.1:8888/udp/238.0.0.1:3001 -s 1280x720 -r 50 -vcodec libx264 -b 3500k -subq 3 -refs 3 -g 25 -acodec libmp3lame -ab 96000 -ar 44100 -f mpegts udp://238.0.0.2:3001специально подняв значения -subq 3 -refs 3, нагрузка возрасла до 40-45%, но ошибок не наблюдалось. Естественно эффекта гладкости тоже не было  :).

Также и при стриме с файла test.ts, но там в логах:
Seems stream 0 codec frame rate differs from container frame rate: 50.00 (50/1) -> 50.00 (50/1)
Input #0, mpegts, from '/media/F/test.ts':
  Duration: 00:03:01.85, start: 1.400000, bitrate: 15518 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: Libav
    Stream #0.0[0x100]: Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x101]: Audio: mp2, 48000 Hz, stereo, s16, 192 kb/s
[buffer @ 0x8cabac0] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x8caf2e0] w:1920 h:1080 fmt:yuv420p -> w:1280 h:720 fmt:yuv420p flags:0x4
[libx264 @ 0x8cadfc0] using SAR=1/1
[libx264 @ 0x8cadfc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x8cadfc0] profile Main, level 3.2
[mpegts @ 0x8cafe60] muxrate VBR, pcr every 5 pkts, sdt every 200, pat/pmt every 40 pkts
Output #0, mpegts, to 'udp://238.0.0.2:3001':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=-1--1, 3500 kb/s, 90k tbn, 50 tbc
    Stream #0.1: Audio: libmp3lame, 44100 Hz, stereo, s16, 96 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
[h264 @ 0x8cad7a0] Cannot parallelize deblocking type 1, decoding such frames in sequential order
frame= 9096 [b]fps= 65[/b] q=-1.0 Lsize=   87667kB time=181.19 bitrate=3963.7kbits/s dup=4568 drop=0
video:78090kB audio:2123kB global headers:0kB muxing overhead 9.291942%
frame I:388   Avg QP:22.37  size: 65546
[libx264 @ 0x8cadfc0] frame P:5000  Avg QP:25.22  size:  9724
[libx264 @ 0x8cadfc0] frame B:3708  Avg QP:28.81  size:  1594
[libx264 @ 0x8cadfc0] consecutive B-frames: 43.7%  2.4% 10.8% 43.2%
[libx264 @ 0x8cadfc0] mb I  I16..4: 43.0%  0.0% 57.0%
[libx264 @ 0x8cadfc0] mb P  I16..4:  5.9%  0.0%  2.4%  P16..4: 28.9%  5.8%  1.6%  0.0%  0.0%    skip:55.4%
[libx264 @ 0x8cadfc0] mb B  I16..4:  0.1%  0.0%  0.0%  B16..8: 14.0%  1.6%  0.1%  direct: 2.3%  skip:81.8%  L0:35.6% L1:53.5% BI:10.9%
[libx264 @ 0x8cadfc0] final ratefactor: 21.70
[libx264 @ 0x8cadfc0] coded y,uvDC,uvAC intra: 55.5% 72.3% 33.4% inter: 6.7% 10.2% 1.3%
[libx264 @ 0x8cadfc0] i16 v,h,dc,p: 24% 36% 22% 18%
[libx264 @ 0x8cadfc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 35% 16%  5%  6%  5%  8%  4%  7%
[libx264 @ 0x8cadfc0] i8c dc,h,v,p: 39% 32% 19% 10%
[libx264 @ 0x8cadfc0] Weighted P-Frames: Y:0.1% UV:0.1%
[libx264 @ 0x8cadfc0] ref P L0: 76.6% 10.1%  9.3%  3.9%  0.0%
[libx264 @ 0x8cadfc0] ref B L0: 93.5%  6.5%
[libx264 @ 0x8cadfc0] kb/s:3516.45
FPS=65 как то странно, при том что сам стрим был в 50 кадров.

В итоге вывод из этого следует у меня такой: ресурсов ПК хватает с избытком, а значит проблема в фильтре и FPS, возможно не правильно определяются метки timestamps, или что-то типа того, из-за чего валятся ошибки:
(Нажмите, чтобы показать/скрыть)

Цитировать
С вашей проблемой обратитесь сюда: http://ffmpeg.gusari.org/ - официальный форум поддержики ffmpeg... Задайте там свой вопрос, приведите свою строку и поторгуйтесь за правильность действий и установок ;) ...
спасибо, обязательно обращусь.  ;)

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: FFMPEG стриминг
« Ответ #8 : 15 Августа 2014, 19:09:41 »
vovanrus,
Ещё раз внимательно обратитесь к главе мануала:
Полезные фильтры -vf, -af - параграф 6. Yadif - yet another deinterlacing filter
Там недвусмысленно сказано:
yadif=1:0 где 1 - выход одного кадра для каждого поля (может удваивать фреймрейт в выходном видео, ибо в одном интерлейс кадре - два поля... 0 - для верхнего поля (верхнее поле - первое)...
Т.е. вы фильтром на входе удваиваете фреймрейт с 50 до 100, а затем выходной установкой ffmpeg -r 50 дропаете (выбрасываете) половину кадров со 100 кадров до 50 :) ... И вас почему то после этого удивляют баги с фреймрейтом, с плавностью проигрывания и с буфером? - странно, право... Видимо дело всё же тут в кривых руках, а не в кривой программе :P

Ваши установки фильтра в FFmpeg - для вывода одного кадра для каждого входного кадра должны быть:
yadif=0:0 - (по умолчанию)
yadif=2:0 - с пропуском пространственной проверки чересстрочности
И, - кто вам мешает использовать более гибкий деинтерлейс-фильтр, типа < -vf kerndeint=thresh=12:map=0:order=0:sharp=0:twoway=0 >, где значения thresh можно варьировать в интервале от 0 до 10 или даже 15, отслеживая на выходе наиболее приемлемый вариант для данного видео...
В конце концов, если для данного видео плохо подойдут вышеозвученные фильтры, то можно даже попробовать простые фильтры для деинтерлейсинга из опций построцессинга, типа < -vf pp=lb >
Для этого смотрите ту же главу фильтров мануала, но параграф - 10. pp - enable the postprocessing subfilters


Пользователь решил продолжить мысль [time]15 Август 2014, 19:15:49[/time]:
может и некорректна, но libav ее кушает нормально.
Да но созданная ваша тема посвещена именно FFmpeg, а не Libav... По этому рассматривать командный и управляющий синтаксис надо в контексте FFmpeg, а не в контексте Libav... Это во первых логично, а во вторых соответственно (правильно)...
« Последнее редактирование: 15 Августа 2014, 19:47:39 от archiver »

 

Страница сгенерирована за 0.563 секунд. Запросов: 26.