eddy_mut Опубликовано 3 июня, 2015 · Жалоба Задача: имеется головная станция аналогового ТВ с поддержкой только IP/UDP mpeg2. Источник сигнала - федеральный DVB-T2 в формате mpeg4. Нужно транскодировать на лету несколько multicast udp потоков в формате mpeg4 в mpeg2 В ходе изучения мануала и экспериментов вывел вот такую строку ffmpeg -i "udp://234.5.100.8:1234" -vcodec mpeg2video -q:v 3 -b:a 192k -f mpegts "udp://234.5.100.231:1234?pkt_size=1316&buffer_size=65535" Но на выходе получается картинка с артефактами и ГС принимает этот поток с ошибками. Пробовал вместо "-q:v 3" указывать "-b:v <требуемый bitrate>" - артефакты, кроме случаев когда указываю запредельно низкий битрейт, но тогда картинка сильно теряет в качестве. Подскажите, если есть у кого опыт, какие параметры надо указывать для правильного транскодинга? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kosorezik Опубликовано 3 июня, 2015 · Жалоба сперва проверьте как ваша станция будет реагировать на VBR поток с кривыми PCR, именно такой поток вы получите на выходе ffmpeg Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
maxlapshin Опубликовано 3 июня, 2015 · Жалоба А в чём их кривость? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 3 июня, 2015 · Жалоба ГС реагирует как то так: см. скриншот. Первые два потока от нормальных источников, третий и четвертый от транскодера, битрейт все время прыгает от нуля до максимума. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 4 июня, 2015 · Жалоба кривыми PCR Присоединяюсь к вопросу - почему PCR кривые и как с этим бороться? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kosorezik Опубликовано 4 июня, 2015 · Жалоба А в чём их кривость? C год назад задавался аналогичной идеей (ffmpeg) - на выходе получался только VBR, c не стабильным PCR интервалом..... хотя на вход подавал нормальный поток. Но этот поток нужно было подавать не в аналог, а в цифру - приводило к частичной пикселизации изображения и "цыканью" звука. Решили задачу на "платной" основе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 (изменено) · Жалоба Боюсь,ffmpeg'ом хрен нормально (без периодичеких артефактов) получиться (занимался похожим вопросом когда-то),(для обретения дао) читайте: Creating DVB-T compatible MPEG2 streams using FFMPEG The stream actually plays quite nicely on my DVB-T receiver. The playback quality is however not as good as "real" DVB-T channels and there are occasional dropped frames and errors in both video and audio. Increasing the video bit rate variables and playing with GOP and BF, "-g 12 -bf 2", increases the quality to be quite good actually but the occasional dropouts and errors are still there. Forcing FFMPEG to use a constant GOP size with "-flags cgop -sc_threshold 1000000000" improves this even more but it is still not nearly perfect. It turns out that increasing bit rate also increases the frequency of the errors. A bit rate of around 1Mb/s has almost no errors but is of course of way to low quality. A bit rate of 3Mb/s yields good quality but too many errors. 2Mb/s is the best compromise by my observations. Worth mentioning is that VLC has no problem playing back this stream. Присоединяюсь к вопросу - почему PCR кривые и как с этим бороться? Можно попробовать прогнать через OpenCaster,в официальном мануале вроде был пример по коррекции PCR. Изменено 4 июня, 2015 пользователем aak Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
BSI_KSK Опубликовано 4 июня, 2015 · Жалоба sudo -u user vlc -vvv http://192.168.0.244:4222/udp/238.1.1.86:1234 -I dummy -d --sout '#transcode{vcodec=mp2v,vb=2048acodec=mp2a,fps=25,ab=128,channels=2,samplerate=44100}:udp{mux=ts,use-key-frames,dst=238.1.1.145:1234,sdp=sa)' Вроде нормально работает. vb настроить. Мне нужен был небольшой - 2мб/с. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 4 июня, 2015 · Жалоба Вопрос про PCR снят: https://trac.ffmpeg.org/ticket/2748 - транскодер выдавал неравномерные по размеру пакеты UDP, в самом конце топика есть маленькая приписка "also note that to get constant packets you need "-flush_packets 0"" Добавление данной опции позволяет получать поток с фиксированным размером пакета 1316 байт и головная станция перестает ругаться на поток. НО!! при воспроизведении в VLC данный поток по прежнему пикселит. Пытаюсь играться с такими параметрами как -q:v <1...31> или -b:v <200k...10M> Первый параметр, как я понимаю создает VBR поток с фиксированным качеством, но в результате экспериментов я могу добиться либо хорошего качества но с артефактами либо наоборот - сильная пережатка но без артефактов. Второй параметр создает CBR (хотя не очень похоже). Эксперименты дают аналогичный результат - или/или Где то надо еще подкручивать :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 · Жалоба ГС реагирует как то так: см. скриншот. Первые два потока от нормальных источников, третий и четвертый от транскодера, битрейт все время прыгает от нуля до максимума. Пробовал вместо "-q:v 3" указывать "-b:v <требуемый bitrate>" - артефакты, кроме случаев когда указываю запредельно низкий битрейт, но тогда картинка сильно теряет в качестве. minrate,maxrate (http://stackoverflow.com/questions/10908796/how-to-force-constant-bit-rate-using-ffmpeg) и смотрите TSReader'ом на наличие пакетов c PID == 0xff Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 4 июня, 2015 · Жалоба Впринципе ГС нормально реагирует на VBR. Дело было в рандомности размера пакета UDP. Теперь только разобраться с артефактами надо Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 · Жалоба Впринципе ГС нормально реагирует на VBR. Дело было в рандомности размера пакета UDP. Теперь только разобраться с артефактами надо udp://XXX.XXX.XXX.XXX:XXXX?pkt_size=1316 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 4 июня, 2015 · Жалоба udp://XXX.XXX.XXX.XXX:XXXX?pkt_size=1316 См. первый пост. Я с этого начинал. Но одного pkt_size=1316 недостаточно, надо еще указывать -flush_packets 0 minrate, maxrate ничего не меняет, bitrate прыгает, артефакты сыпят.... ffmpeg -i "udp://234.5.100.5:1234" -vcodec mpeg2video -b:v 4M -minrate:v 4M -maxrate:v 4M -b:a 192k -flush_packets 0 -f mpegts "udp://234.5.100.230:1234?pkt_size=1316" Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 · Жалоба Почитайте статью по ссылке вверху в первом ответе - крайне познавательно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 4 июня, 2015 · Жалоба Почитайте статью по ссылке вверху в первом ответе - крайне познавательно. Вы имеете ввиду статью Creating DVB-T compatible MPEG2 streams using FFMPEG? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 (изменено) · Жалоба Да. У меня стоит ffmpeg в цикле на проигрывание нескольких роликов (льется CBR; это когда-то был первоначальный вариант для инфоканала),но постоянно периодически проявляются артефакты (звук тянет,черный экран). Видимо,автор статьи все таки прав. (хотя еще грешу на комп - слабая машинка) Изменено 4 июня, 2015 пользователем aak Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
eddy_mut Опубликовано 4 июня, 2015 · Жалоба Указал параметры как у него: ffmpeg -i "udp://234.5.100.5:1234" -vcodec mpeg2video -flags cgop+ilme -sc_threshold 1000000000 -b:v 2M -minrate:v 2M -maxrate:v 2M -bufsize:v 1.4M -b:a 192k -flush_packets 0 -f mpegts "udp://234.5.100.230:1234?pkt_size=1316" И действительно в VLC воспроизводится более менее нормально, но битрейт низковат, да и артефакты нет-нет да и проявятся, правда очень редко. Хотелось бы конечно получше. Стоит чуть повыше поставить битрейт как количество потерь резко возрастает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 · Жалоба Ну так автор статьи и пишет,что конфетка не получается с ffmpeg. Как я и писал вверху,можно прогнать через промежуточный мукс (OpenCaster) с выправлением хромых битрейта/PCR. Попробовать,правда,руки так и не добрались. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aak Опубликовано 4 июня, 2015 (изменено) · Жалоба P.S. Смысл идеи,в общем таков: использовать ffmpeg только для перекодировки,битрейт и пр. пилить на муксе на выходе. С OpenCaster особо не игрался,возможно,умеет "резиновый" буфер. Изменено 4 июня, 2015 пользователем aak Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DAnEq Опубликовано 15 марта, 2016 · Жалоба Указал параметры как у него: ffmpeg -i "udp://234.5.100.5:1234" -vcodec mpeg2video -flags cgop+ilme -sc_threshold 1000000000 -b:v 2M -minrate:v 2M -maxrate:v 2M -bufsize:v 1.4M -b:a 192k -flush_packets 0 -f mpegts "udp://234.5.100.230:1234?pkt_size=1316" И действительно в VLC воспроизводится более менее нормально, но битрейт низковат, да и артефакты нет-нет да и проявятся, правда очень редко. Хотелось бы конечно получше. Стоит чуть повыше поставить битрейт как количество потерь резко возрастает. даю такую команду, но получившийся поток могу принять только на этой же машине по сети почемуто никак. по мануалам для этого вроде ffserver нужен как его правильно сконфигурировать для работы с потоком ? вот пример последнего ни к чему не приведшего конфига HTTPPort 8090 HTTPBindAddress 192.168.2.104 MaxHTTPConnections 2000 MaxClients 1000 MaxBandwidth 1000 CustomLog - /ffserver.log Feed feed1.ffm File feed1.ffm FileMaxSize 123M <Stream test1.mpg> Feed feed1.ffm Format rtp AudioBitRate 512 AudioChannels 1 AudioSampleRate 44100 VideoBitRate 43210 VideoBufferSize 40 VideoFrameRate 25 VideoSize 720x576 VideoGopSize 12 AudioCodec mp2 VideoCodec mpeg2video VideoQMin 3 VideoQMax 31 </Stream> ну и ffmpeg я запускал ставя на выходе udp://192.168.2.104:1234/ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 15 марта, 2016 · Жалоба Ну и на какой из интерфейсов системы оно должно выплёвывать мультикаст? Роутингом пропиши в системе через какой интерфейс слать мультикаст. И RP фильтры выруби нафик. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DAnEq Опубликовано 17 марта, 2016 · Жалоба я уже поставил на выход udp://240.0.0.1:1234/ а перед этим route add 240.0.0.1 eth2 но в этот раз запустил не включая вручную ffserver не помогло. на второй машине с одной сетевой картой (для верности) включенной в эту самую eth2 vlc пишет ошибку сразу же ... вопрос раз - ffserver нужен ? мне нужно принять одним клиентом а не множественными. и вопрос два - что за RP фильтры ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Bat Опубликовано 15 апреля, 2016 · Жалоба А вы те же самые операции пробовали сделать через vlc, а не через ffmpeg? У vlc есть параметр, задающий интервал PCR. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...