Я пытаюсь реализовать RTMP в Node.js, но, увидев документацию и попытавшись, я не могу, и я подозреваю, что это невозможно, чтобы увидеть, как node.js обрабатывает потоки данных.
я разветвляю этот код: https://github.com/timwhitlock/node-amf/tree/master/node-rtmp
судя по коду и коряво написанной документации adobe, после подключения запускается процесс рукопожатия, клиенты отправляют поток из 1537 октетов, где первый - rtmp версия (должно быть всегда 3), следующие 4 - временная метка а остальные 4 должны быть 0 (0000), все остальные данные являются случайными символами.
теперь связанная библиотека делает все это, но ломается в момент проверки 4 нулей. он использует модуль Net для создания сервера и прослушивания события подключения. используя объект сокета, предоставленный событием, установите кодировку на «бинарную» (этот тип кодировки не существует, насколько я вижу в документации http://nodejs.org/api/stream.html).#stream_stream_setencoding_encoding ), а затем попробуйте проверить наличие четырех нулей
я подозреваю, что сокет в любом случае кодируется в «utf8», и есть место, где поток испортится, так как печать первых байтов никогда не бывает одними и теми же данными. изменив на шестнадцатеричное кодирование сокета, я нашел совпадения, которые указывали бы на четыре нуля, которые я ищу:
V | TIME |4 ZEROS |RANDOM DATA
03|0091c3ee|80000702|3e904115
03|0091ea60|80000702|f6e2d38a
03|00921a47|80000702|f2e21db3
03|0092eaeb|80000702|15834dbf
03|00931e0d|80000702|5f0b7891
03|00933c68|80000702|b4980c5d
даже я мог бы заставить это работать так, когда мне нужно передавать реальные данные, такие как видео, аудио и т. д., на сервер (я знаю, что я могу писать из двоичных данных сокета, передавая Буферизируйте объект и используйте это: https://github.com/substack/node-binary ) и сокет не может обрабатывать двоичные данные, у меня будут поврежденные данные, верно?
я не эксперт, но я пытался исследовать это, насколько я мог, даже если это не может быть решено, я хотел бы, чтобы кто-нибудь мог сказать мне, прав ли я или просто облажался :)