Обратный инжиниринг HTTP JPEG поток - PullRequest
0 голосов
/ 02 мая 2020

У меня есть приложение iOS, которое позволяет удаленно управлять камерами Sony с помощью HTTP API, а в последнее время - с использованием их нового механизма, использующего PTP / IP. К сожалению, Sony также выпустила новое обновление для a9ii, которое, похоже, отошло от предыдущего метода потоковой передачи видеоизображения с камеры через WiFi.

К счастью, у меня был пользователь, который смог использовать WireShark для записи некоторых из пакеты для меня, я пытаюсь реконструировать протокол, но мне действительно тяжело!

Кажется, что JPEG разрезан на части, что наводит меня на мысль, что он может использовать какую-то форму RTP, но я изо всех сил пытаюсь понять, как именно они реализовали это. Ниже приведен необработанный поток в шестнадцатеричном формате, и моя попытка попытаться определить, что представляет собой каждая часть заголовка RTP. Я довольно новичок в работе с такими RAW-данными, как этот, только у меня был опыт реинжиниринга реализации Sony PTP / IP, но с этим у меня, по крайней мере, была особенность c, которая, как я знал, была правильной!

Вот spe c для заголовка RTP и RF C 2435 , которые предназначены для видео со сжатием в формате JPEG, однако, похоже, Sony не использует это или по крайней мере: неправильно его использовать!

Моя попытка парсинга

// RTP Header

HEX: 88 
Binary:     10    |      0     |          0          |        1000        |
        Version 2 | No Padding | No extension header | 8 CSRC Identifiers |

00    // No type, marker, e.t.c
00 00 // Sequence number 0

00 5e 00 00 // Timestamp (24064)
10 00 00 00 // SSRC Identifier (16)

// CSRC Identifiers (8 of them)
78 00 00 00 
0d 0a 37 38 
0d 0a 65 00 
00 00 00 00 
00 00 01 00 
00 00 00 00 
00 00 02 00 
00 00 00 00 


00 // Type-specific, not the correct type for JPEG stream
00 00 00 // Fragment Offset, this never goes above zero so can't be right!
00 // Type (0)
00 // Q (0)
03 // Width (3 * 8) = 24... this can't be right!
00 // Height (0 * 8) = 0
00 00 
03 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 
0a 00 00 80 07 00 00 00 00 00 
00 00 00 00 00 00 0a 00 00 80 
07 00 00 00 00 00 00 00 00 00 
00 00 0a 00 00 80 07 00 00 00 
00 00 00 00 00 00 00 00 0a 00
00 80 07 00 00 00 00 00 

00 00
00 00 0d 0a 35 45 30 30 0d 0a

// Beginning of JPEG segment

ff d8 ff db 00 84 00 03 03 03 
03 03 03 05 05 05 05 05 05 05 
05 05 0a 08 05 05 08 0a 0d 0a 

И вот суть полного потока

...