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

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

Опитах се да отстраня грешки в клиента и проследих изпълнението, докато не започне да пише в SocketChannel. Всичко е същото за случаите на изпълнение на по-къс наименуван поток (който публикува добре) и поток с дълго име, чиято RTMP команда "за публикуване" никога не се изпраща.

Въпросите са:

  1. какво става?

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

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

UPDATE ...и което е още по-странно - след изпращане на "големия" пакет изпращането на по-малък не помага. Не могат да се изпращат пакети, след като към сокета е изпратен пакет с по-голяма дължина.


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