LINUX.ORG.RU

[ffmpeg]запихнуть h264 rtsp поток в flv без декодинга/энкодинга

 


0

2

Были у меня http потоки mjpeg'a с камер всяких, я их спокойно avformat'ом на AVPacket'ы разбирал, потом avcodec'ом декодил и энкодил в h264. Потом опять же avformat'ом запихивал в flv контейнер.

Тут появились камеры, которые могут сразу h264 поток отдавать. То, что rtsp - это не проблема, благо ffmpeg сам умеет с ним работать, но вот обойтись без транскодирования пока никак не выходит. Т.е. если как раньше делать, то все ок - получаеся смотрибельный flv, а вот когда пытаюсь avformat'ом прочитаь и сразу же записать в flv, то получается ерунда какая-то. VLC ругается так:

[h264 @ 0xb0b0d5b0] QP 120 out of range
[h264 @ 0xb0b0d5b0] decode_slice_header error
[h264 @ 0xb0b0d5b0] concealing 4000 DC, 4000 AC, 4000 MV errors
[h264 @ 0xb0b0d5b0] deblocking_filter_idc 32 out of range
[h264 @ 0xb0b0d5b0] decode_slice_header error
[h264 @ 0xb0b0d5b0] concealing 4000 DC, 4000 AC, 4000 MV errors
[h264 @ 0xb0b0d5b0] illegal memory management control operation 32
[h264 @ 0xb0b0d5b0] top block unavailable for requested intra mode at 6 0
[h264 @ 0xb0b0d5b0] error while decoding MB 6 0
[h264 @ 0xb0b0d5b0] number of reference frames exceeds max (probably corrupt input), discarding one
[h264 @ 0xb0b0d5b0] concealing 4000 DC, 4000 AC, 4000 MV errors
...

На сколько я понял av_read_frame читает ровно один видео фрейм и av_write_frame как раз его и требует, но что-то не срастается... Пробовал начинать писать с пакета, у которого стоит флаг AV_PKT_FLAG_KEY - ноль эффекта.

В чем может быть проблема?

PS. После «распада» ffmpeg что-то список рассылки не пашет...

★★

Помню, в свое время заинтересовался ffmpeg. Несмотря на полную жопу с документацией, разобрался с декодированием, а вот закодировать хоть что-либо так и не смог. Потом правда меня «нагрузили», из-за чего руки все не доходили доразобраться. Но шаманство там знатное, да.

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

Да, нет, декодировать/закодировать - это не сложно, я же хочу по сути контейнер поменять...

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

Ну не знаю, у меня были проблемы с кодированием, т.к. там надо выставлять параметры ручками. Что касается субьекта, в комментарии к av_read_frame вроде пишут, что для некоторых кодеков может считываться не 1 фрейм, а несколько. Может быть, в этом проблема?

PayableOnDeath
()

rtsp потоков не бывает, видео по rtsp не передаётся.

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

У меня в комментариях так написано:

For video, the packet contains exactly one frame.

Я тут подумал, что нужно параметры кодека входного потока более тщательно скопировать попрообовать...

kulti ★★
() автор топика

kulti, мне нужен тот же результат, правда, в жопе документации ещё не разобрался. Решение найдено?

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

И, плз, запость свои исходники.

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

У ffmpeg есть опция -vcodec copy - оно как раз делает то, что нужно. У меня почти получилось: раньше только серый экран получался, а теперь даже изображение появилось, только оно никуда не движется. Но в условиях того минимального рабочего времени, которое выделено у меня на эту задачу большее я вряд ли бы успел к сегодняшнему дню. Следующий «шаг вперед» ожидается в пятницу. Могу по результатам отписать.

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