Cuda кодирует видео, конвертирует из unsigned char * cb в NALs Unit, для отправки по сети

Я играл с примером cudaencode, включенным в SDK 5.0. Он принимает файл YUV (несжатое видео) в качестве входных данных и записывает необработанный поток H.264 (или также может быть VC1). Работу выполняет функция «NVEncodeFrame», входящая в состав Encoder API. Программа принимает объект FILE (stdio.h) в качестве вывода, куда записывается результат кодирования (сжатое видео H.264). Теперь я хочу транслировать видео в процессе кодирования в сети.

Мои конкретные вопросы:

  1. Есть ли способ преобразовать «unsigned char * cb» в HandleReleaseBitStream (int nBytesInBuffer, unsigned char * cb, void * pUserData) в NAL и numberOfNals?

Спасибо большое.


person vanloi999    schedule 22.12.2012    source источник


Ответы (1)


Используйте libh264bitstream find_nal_unit(). Вызовите это несколько раз для своих данных, пока не найдете все nals. Это предполагает/требует, чтобы nals имел стандартный префикс nal. Кроме того, это не найдет последний nal в буфере: вы можете либо просто предположить, что все от конца последнего nal, найденного до конца буфера, является еще одним nal, либо иначе добавить следующий буфер к оставшимся данным и продолжить синтаксический анализ.

Вы также можете попробовать использовать av_read_frame() libavformat, который должен возвращать nals (как AVPackets) при чтении из необработанного потока H.264 (пример кода). Это, наверное, куда сложнее.

person Alex I    schedule 25.12.2012