red5 RTMPClient не публикует поток, если имя потока достаточно велико

У меня есть реализация клиента Red5, которая публикует потоки, загруженные из видеофайла, на наш медиасервер wowza. Проблема в том, что если имя потока слишком большое - примерно больше 90 символов - клиент не публикует его и молча терпит неудачу. Все остальные действия, ожидаемые от клиента, выполняются: он подключается к серверу и создает поток. Но никогда не публикует поток. Я не вижу соответствующего сообщения RTMP и не вижу результирующей реакции в журналах wowza.

Я пытался отладить клиент и отследил выполнение, пока он не начал писать в SocketChannel. Все то же самое для случаев исполнения потока с более коротким именем (который публикует нормально) и потока с длинным именем, которому RTMP-команда «опубликовать» никогда не отправляется.

А вопросы:

  1. Как дела?

  2. если я записал несколько байтов в SocketChannel без каких-либо исключений - гарантирует ли это, что соответствующее сообщение было отправлено?

  3. если я записал несколько байтов в SocketChannel без каких-либо исключений - могу ли я проверить средствами моей ОС (в моем случае MACOS), действительно ли байты куда-то записывались? Хотя я знаю, средствами WireShark, что этот кусок данных так и не был отправлен.

ОБНОВЛЕНИЕ ...и что еще более странно - после отправки "большого" пакета отправка меньшего не помогает. Никакие пакеты не могут быть отправлены после того, как пакет большей длины был отправлен в сокет.


person KutaBeach    schedule 02.10.2013    source источник


Ответы (1)


Если я записал несколько байтов в SocketChannel без каких-либо исключений - гарантирует ли это, что соответствующее сообщение было отправлено?

Это гарантирует, что данные были буферизованы локально в буфере отправки сокета, вплоть до количества, возвращаемого функцией write(). Больше ничего.

Поскольку вы не можете отправить дополнительные данные, мне кажется, что получатель не читает большой фрагмент данных. Возможно ли, что он выйдет из строя с исключением и вообще перестанет читать?

person user207421    schedule 06.10.2013
comment
EJP, Wireshark сообщает мне, что пакет RTMP, который я написал в SocketChannel, никогда не был отправлен. Так что похоже, что это проблема на стороне клиента. Может переполнение буфера ОС?.. - person KutaBeach; 07.10.2013
comment
Или вы имеете в виду, что клиент может не отправлять пакет, но попытаться отправить его и потерпеть неудачу на стороне сервера, что не позволит Wireshark записать статистику? - person KutaBeach; 07.10.2013