Как декодировать поток hd64 hdp в python3 и Java maven? - PullRequest
0 голосов
/ 07 июля 2019

В настоящее время я работаю над проектом, в котором я получаю изображения 1920x1080 в кодировке h.264 со скоростью 25 кадров в секунду через UDP как MTS ( транспортный поток MPEG ).Цель состоит в том, чтобы декодировать данные сокета udp в изображения в python3 и java-maven.Для python3 оптимальным будет решение opencv.Для Java Maven я ищу библиотеку, которая не нуждается в каких-либо дополнительных программах или подпрограммах для работы.Я не хочу использовать Gstreamer или FFmpeg.Я уже некоторое время оглядывался по сторонам и нашел пару интересных решений и проектов с открытым исходным кодом, но ничего, что могло бы решить кодировку.

Необработанные полученные данные:

b'G@\x000\xa6\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xb0\r\x00\x01\xc1\x00\x00\x00\x01\xe0 \xa2\xc3)AG@ 0\x86\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x02\xb0-\x00\x01\xc1\x00\x00\xe0A\xf0\x0c\x05\x04HDMV\x88\x04\x0f\xff\xfc\xfc\x03\xe0A\xf0\x00\x1b\xe0@\xf0\n\x05\x08HDMV\xff\x1bD?\x80D)\x96G@A0\x07\x10\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\x88\x81\x80\x05!\x00\x01\x05\xef\xff\xf3\xc4\xc4GJ\xec:L\x00\xf6\x18| \xf1q\x8b\xbc\x83\xc9\x14\x98\xc9\x8c\xa0*\x95"S\x059T\xc5b\xae\xd5\x85e\xcb\xb9w*e6\\\xcb\xb9\x819L\xa5\xac\xb0\xd02\x04A\xa8\xe8\x03@\xe8\x84\r\x81\xb0\x1e\x06\xc206\x11\x84\xa2I4\x1a\x89"I4\x9abbtd%\tD\xe3#%\xcb\x96\xad1111Z\xb5m\x97.:\\\xb9r\xebs+V\xadZ\xb6\xb3\xf9k=o\x99\x99\xae\xd7k6\xac\xced\xcdko\xcf\xcc\xb5\x9a\xadkZ\xd6\xb5e\xa7\xadkZ\xcb\x97-Z\xb6\xb5ej\xd5\xab\x97.\\\xb9r\xe5G\x00A\x11\xcb\x96\xadZ\xb5j\xd5\xabNW.\\\xb9r\xe5\xcb\x8e\x8fNV\xadZ\xb5i\xe9\x8a\xe3\xa3##%\xc7\xc6FG&\'\xa6+LLLLL\x8c\x8c\x8c\x8c\x8c\x8c\x8c\x89F&&&&&&&&&FFFFFFFD\xa3\x13\x13\x13\x13\x13\x13\x13\x12J;\xc1\x0590rAn06\x80\xed2\xf3\xe3\x82\xd29*\xb0 Q\x81\x0f\x85EB\xc8F\xbb6Dz\x0f\x18"\xf3\x04\x13]\x01\xe7\x14\xb5=\xe8Z\xa2E?\xa9\x10\x9b*2\xbcS\x824\xee\x89\x84\xad\xaa\x0e0)*e\x14-p3\x10p\x8f\xf3p\x04@eI\x1e\xa5\x80\xa5\x07\xa1-Z\xc7\x10\x02HY\x9eH8p@\x80\xd0\x89\x02G\x00A2\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffi1v\x96d@obc\x02\x00\x10*\x08\xd3\xc6\n%\x97V\xf6p\x9c\xeb}\xfa\x7f\x17\xd3\xa3\x0f\xc0\x8d\xc2\x01e\xcf\x84G@A\x13\x00\x00\x01\xc0\x01\x88\x81\x80\x05!\x00\x01\x16\xcf\xff\xf3\xc4\xc4\x8eT\xd4:\x0c\x00\xfe\xf2\x08u\x99\xc6!\xfa\'b\xb4j\xec\x1c\xec\xceF\xe1\xf7\xf2\'b\x89\xdd\x8fM@=\x81\xa1\xb8\xdb\xf1!\xe4FT\xfe\xb3g\x9d\xf9\x88\xc3m\x9a_\x0f5\x87n~\xa3\xc9*\x91'

Python3

Я пытался использовать numpy и opencv cv2.imdecode () для декодирования данных.Вы можете увидеть результат ниже.Ранее я выполнял аналогичное декодирование для других форматов, поэтому думаю, что не хочу, чтобы одномерный массив выводился из numpy перед декодированием.

# Code test
byte_array = np.array(list(raw_udp_data), np.uint8)
print(byte_array) # see result below
image = cv2.imdecode(byte_array,1) # crashes here

# Result :
[ 71  64   0 ..., 201  42 145]

На данный момент я решил реализовать реализацию python3 с помощью декодирования FFmpeg.в подпроцессе для демонстрационных целей.Но я хочу декодировать необработанные данные в этом процессе без Gstreamer или FFmpeg.

Java Maven

Я еще не тестировал никакие реализации java, но у меня был хороший опыт работы с библиотекой javacv впрошлое.Я также нашел это , что кажется довольно точным.Если кто-то имеет опыт работы с декодированием h.264 в java maven и хочет поделиться некоторыми советами, которые будут очень полезны.

Любая помощь приветствуется,

Приветствия!

...