Как использовать pyav или opencv для декодирования живого потока необработанных данных H.264?Python

Программы на Python
Anonymous
Как использовать pyav или opencv для декодирования живого потока необработанных данных H.264?

Сообщение Anonymous »

Данные были получены через сокет, без оболочки, это чистые кадры IP B, начинающиеся с заголовка NAL (что-то вроде 00 00 00 01). Сейчас я использую pyav для декодирования кадров, но я могу декодировать данные только после того, как была получена вторая информация pps (в ключевом кадре) (поэтому фрагмент данных, который я отправляю в свой поток декодирования, может начинаться с pps и sps), в противном случае decode() или demux() вернут ошибку «несуществующая ошибка decode_slice_header, указанная в PPS 0».
Я хочу передать данные в поддерживающий декодер, который может запомнить предыдущую информацию. P-кадр, поэтому после подачи одного B-кадра декодер возвращает декодированный видеокадр. Или какая-то форма ввода-вывода, которую можно открыть как контейнер и продолжать записывать в нее данные другим потоком.
Вот мой ключевой код:

Код: Выделить всё

#read thread... read until get a key frame, then make a new io.BytesIO() to store the new data.
rawFrames = io.BytesIO()
while flag_get_keyFrame:()
....
content= socket.recv(2048)
rawFrames.write(content)
....

#decode thread... decode content between two key frames
....
rawFrames.seek(0)
container = av.open(rawFrames)
for packet in container.demux():
for frame in packet.decode():
self.frames.append(frame)
....
Мой код будет воспроизводить видео, но с задержкой 3–4 секунды. Поэтому я не размещаю здесь все это, потому что знаю, что на самом деле это не работает для того, чего я хочу достичь.
Я хочу воспроизвести видео после получения первого ключевого кадра и декодировать следующие кадры сразу после их получения. Пьяв opencv ffmpeg или что-то еще, как мне достичь своей цели?

Подробнее здесь: https://stackoverflow.com/questions/627 ... h-264-data

Вернуться в «Python»