LINUX.ORG.RU

Пересжатие H264 с потерей кадров

 , , ,


0

4

Приветствую.

Опять продолжение темы Запись сырого h264

Теоретический подсчет показал, что в сравнении с raw записью 1920х1080 MJPEG создающую нагрузку на носитель где то 1.2 Мб/c при 5 фпс, такая же запись H264 при 30 фпс создает поток где то 0.6 Мб/c, т.е. в принципе уже проверенную пропускную способность по записи укладываюсь, а вот с онлайн стримом вопрос.

Абсолютно точно придется пропускать кадры. Если для мжпег удалось сделать это очень равномерно, т.к. из очереди std::deque всегда брался для пересжатия из мжпег в х264 только последний кадр, то в случае с h264 нужно занусуть видео поток в канал где то до 2мбит/c, т.е. декодирование->масштабирование в 2-2.5 раза->сжатие. Все это делается на слабенькой arm пока без доступа к ядру гпу.

Первое что приходит в голову это подряд пересжимать кадры и сбрасывать очередь каждый раз при поступлении I кадра - да камера отдает I кадры каждую секунды и еще 29 P кадров, расстояние не большое, но «рывок» в конце каждой секунды все равно хоть как будет и скорее всего придется отбросить 2/3 кадров (по аналогии с мжпег пересжатием в х264).

Буду благодарен любой идее )

★★★

Последнее исправление: wolverin (всего исправлений: 1)

Ответ на: комментарий от anonymous

Существенно отличается 640х360, поэтому и есть необоснованное предположение, что китайцы выполняют какое то упрощение при кодировании Р кадров, которым возможно можно воспользоваться.

wolverin ★★★
() автор топика
Ответ на: комментарий от anonymous

у него задача уменьшить битрейт

что бы пропихнуть непропихуемое

хотя конечно прежде чем заниматься любыми манипуляциями

не плохо изучить характеристики потока

и что там по чем

anonymous
()
Ответ на: комментарий от anonymous

При 1920х1080 И кадр по данным ффпробе весит 150К и 29 штук Р кадров по 15К, т.е. в 2-3 Мбит/с можно просто уменьшив количество кадров впихнуть, если б такое удалось)

wolverin ★★★
() автор топика
Ответ на: комментарий от anonymous

а я изначально разве не сказала что это не решаемая задача?

но когда хочется поласкать поток

то лучше уж это делать из чего то явно не нужного

да и характеристик потока еще никто не показал

SPS PPS SEI бывают жирные

да не И фрейм то все же

в П фреймах бывают B слайсы

итд

anonymous
()
Ответ на: комментарий от anonymous

Как то без декодирования по кадрам с камеры некоторым удается выполнять поиск движения, что это конкретно и как делается я не знаю, как и про В слайсы, но В кадров нет, как и блоки спс ппс и сеи какие то копейки байт

wolverin ★★★
() автор топика
Ответ на: комментарий от anonymous

ну вот, начинается, характеристик нет, все дела, так что ты советуешь если информации нет; also sps\pps не бывают жирными, да и предложение разобрать sps\pps и собрать снова, это сотни строчек сишечки которые, чтобы написать, надо раскурить спеку h264 досконально, по тсу тут не заметно, но для него это задача длинной во всю жизнь, он высокоуровневое api avcodec всунул\высунул осваивал год

anonymous
()
Ответ на: комментарий от anonymous

он хочет что то делать

вот я ему совет и даю

то что это в моем видении смысла нет он слушать не хочет

и не только меня

ну вот и пусть занимается ремуксом стрима

задачу не сделает

но чему то научится

anonymous
()

Смотри, сколько времени у тебя тратится на декодирование стрима? h264 как бы сделан так, что бы декодироваться быстрее и проще, чем сжиматься. Что если распаковать, а потом уже расжатые каждры прореживать дальше по пайплайну.

Ну и нужно смотреть и использовать аппаратный кодек. На слабом ARM/aarch64 без этого никуда.

hatred ★★★
()
Ответ на: комментарий от hatred

пока тесты показали что просто декодер потребляет 3/4 цпу и выдает по данным ffmpeg где то до 28 кадров - вроде более чем, но увы это лишь одна из задач и кодеру по опыту мне уже известно нужно еще столько же.

аппаратного кодека нет, есть ВОЗМОЖНО в будущем вариант с возможностью аппаратного УСКОРЕНИЯ на GPU Mali (cedrus в ффмпеге), что позволит лишь тупо разгрузить CPU и выдать те же 10-12 фпс (хоть мне этого и за глаза хватает)

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

А что за железо? Мы просто кодировщик используем на Khadas VIM3, но ручками, не из ffmpeg, просто на уровне библиотеки. Там ресурса хватает за глаза и за уши. Но и плата дорогая и, относительно, мощная.

Просто же раскодировать с пропусками, такая себе идея. Будет картинка вечно битая. А вот на кодирование ты несжатые фреймы вполне можешь выплёвывать уже с пропусками нужными. Главное обеспечить монотонный FPS, ну что бы пропуски были ±одинаковые по числу меж кадрами.

hatred ★★★
()