Pull to refresh

Comments 11

спасибо за статью

у меня в 2016 как-то получилось из Перла использовать ffpmeg + sdl, sdl использовал через Inline::C, а ffmpeg — через самопальный модуль…
Прошёл примерно через все эти описанные в статье проблемы…

программа на Перле что-то своё делала с видеопотоком, и опционально был SDL-превью текущего обрабатываемого кадра…
там в примерно 1500 строк заключена ядерная смесь из perl, tcl/tk, Inline:: С (значит и С:) :):)

если у кого есть интерес — могу описать подробнее, может быть даже в виде статьи тут, на хабре.
Конечно, напишите! Может не про все полторы тысяч строк, а самые поучительные из них :-)
Вы меня простите, но зачем?
Программист знает английский, IMHO.
Какое смелое утверждение о среднестатистическом программисте :-)

Дык, если в самом деле решил использовать либав, то после этого туториала по-любому придется читать официальные доки и разбирать исходники ffmpeg

Большое спасибо за перевод! Чисто из любопытства: почему не сдали делать 1 туториал=1 статья?


Отмечу, что вы вводите терминологию пакет -> кадр ("до декодирования" -> "после декодирования"). Однако в нескольких местах для обозначения кадра вы используете слово "фрейм" (т.е. без перевода).


Также вы, кажется, пропустили в первом туториале сноску


Тут фишка в том, что для удобства (в том числе и, наверное, чтения кода), в свежем ffmpeg-е функцию avcodec_decode_video2 даже заменили на пару функций:


  • avcodec_send_packet() [скормить пакет в ffmpeg] и
  • avcodec_receive_frame() [получить декодированный кадр].

И по тогда получается легче обработать случаи, когда мы:


а) должны ffmpeg-у передать несколько пакетов прежде, чем получим хотя бы один кадр (это вроде раз история с "частичными пакетами" из ссылки)
б) на один пакет нам возвращают несколько кадров. Кстати подскажите, а вообще возможно ли такое? На ум почему-то приходит только случай, когда мы декодируем видеопоток с камеры, которая "видит" статичную картинку.

Не совсем ясно, что Вы подразумеваете под 1 туториал=1 статья?
Если имеется ввиду, что каждую из 7 глав оформлять отдельно, то маловато информации на каждую статью.
Если вообще всё дать в одной статье, то показалось что будет уж чересчур длинный текст. Перевод удобно было подготавливать в два этапа, решили и публиковать тоже в два этапа.

Фреймы в трёх местах заменил на кадры, спасибо за дельное замечание. Заметка про пакеты, похоже, не захватилась, когда копировали текст из первоистоника. Теперь эта ремарка тоже присутствует в переводе.

Относительно Вашего вопроса про несколько кадров в одном пакете пока ответить не готов 0:-)

Б) Вспомните про аудио :)

а) должны ffmpeg-у передать несколько пакетов прежде, чем получим хотя бы один кадр (это вроде раз история с "частичными пакетами" из ссылки)

несколько проще, некоторые кодеки, например h264, по своей природе (или набору установок) хотят сначала несколько сырых кадров, перед тем как выдать первый закодированный. Новый API более лаконично ложится на такие особенности. Плюс у многих аппаратных кодеков схожие API.


б) на один пакет нам возвращают несколько кадров. Кстати подскажите, а вообще возможно ли такое? На ум почему-то приходит только случай, когда мы декодируем видеопоток с камеры, которая "видит" статичную картинку.

имхо, такое только с аудио возможно. С видео лично не сталкивался.

Я бы с удовольствием почитал статью по ffmpeg без использования SDL, с многопоточным декодером, синхронизацией A/V, пусть даже без вывода кадра куда либо. Для звука бы использовалась любая подходящая библиотека.
А я бы с удовольствием собрал этот проект, да вот только устарел он слегка, под SDL2 уже многое изменилось
идентификатор «SDL_Overlay» не определен
'av_dup_packet': объявлен deprecate
И так всю дорогу.

Могли бы Вы привести код в соответствие с текущими версиями?
Sign up to leave a comment.