LINUX.ORG.RU

Изменение SPS на лету через libavcodec

 ,


0

2

Можно ли как нибудь менять в потоке NAL unit? Мне нужно подменять параметр в sps, seq_id. Без рекодирования, конечно... Хотелка экзотическая, но это пока способ решить проблему

Что заставляет кодировщик часто генерировать SPS\PPS?

★★★★

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

нет, штатными avcodec нет, никому не нужно, что намекает

но sps и nal не такой уж и сложный формат, спека h264 есть в открытом доступе

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

У меня есть поток банарных, закодированных буферов, из которых я формирую пакеты в понятиях ффмпег и далее посылаю av_interleaved_write_frame. Код тривиальный. Мне надо эти бинарные кусочки парсить и их модифицировать? Вообще такое теоретически возможно и не слишком ли нагрузит это проц?

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

тебе же надо, что сечас расссуждать о том наскольео это быстро?

avcodec тебе отдает фрейм, там скорее всего парочка nal юнитов для single nal или пяток для ключевого aud, sei, sps, pps, idr

обычный annexb упаковка, ищешь 0,0,0,1 или 0,0,0,0,1 и рвешь, там может быть страшненько для сишечника который привык байты перекладывать, но на самом деле немного страдания и ты точно программист

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

Да, разумеется, скорость критична

ищешь 0,0,0,1 или 0,0,0,0,1 и рвешь

Как искать, что рвать... Я не сишник. Как можно это сделеть максимум просто и быстро? Типа regexp заменить. Должен ведь какой то шаблон быть

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

Да третий месяц, но это время не было потрачено впустую, нашел кучу багов в хроме, которые войдут в релиз, но к сожалению в след году.
Ну а пока ищу некий временный workaround. Нанимать нет опыта. Хотя с радостью бы заплатил, но не знаю как найти. Первое на ум приходит фриланс. Но там чтобы найти за приемлемую цену наверное времени больше уйдет, чем сам сделаешь...

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

Ну, давай, я сделаю. Опыт ковыряния h.264 есть, с ффмпег в том числе. Напиши задачу в том виде, в котором ее можно сразу работать, на avkudrin at гмыло.

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

sps это и есть бинарный формат. Тебе там нужно будет изменить некоторые байты или биты. Смещения можно посмотреть в стандарте. Вот например код из ffmpeg, где парсится sps https://ffmpeg.org/doxygen/trunk/h264__ps_8c_source.html#l00322

Насколько я помню, в ffmpeg sps и pps хранятся в поле extra_data в AVFormatContext->streams[0]->codecpar->extradata

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

AVFormatContext->streams[0]->codecpar->extradata

Это если кодируешь? Я remuxing. Перегоняю из одного формата в другой, без перекодировки


int ret;
AVPacket pkt;
av_init_packet(&pkt);
pkt.data = payload;
pkt.size = length;
...
av_interleaved_write_frame(m_context, &pkt);


Как вот этот pkt изменить

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

Если кодируешь, то это поле кодек сам заполнит. У меня была задача сделать запись в файл (mkv) видеопотока от камеры. Так вот миксер не не работал пока я не заполнил поле extradata. Что там с ремиксером как у тебя я не знаю.

Как вот этот pkt изменить

pkt.data это указатель на память. Просто берёшь и изменяешь. Только нужно дождаться когда туда придёт sps, а не что-то другое.

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

Если кодируешь, то это поле кодек сам заполнит

я не кодурую, ремуксирую просто. Закодированные данные беру из другого места и переклыдываю в libavcodec

Просто берёшь и изменяешь. Только нужно дождаться когда туда придёт sps, а не что-то другое

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

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

о, прикольно.

Действительно паршивый баг.

Возможно мы его не видели, потому что у нас транскодер такое говно бесшовно прожевывает.

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

Если транскодировать то проблемы не будет. Но не очень хочется перекодировать...

gobot ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.