ICE4J DatagramPacket слишком маленький

Обычный DatagramSocket работает нормально... ICE4J DatagramSocket, похоже, обрезает данные!?

Размер отправляемого пакета составляет 2500, но принимающая сторона всегда 1500 (с обычным Java DatagramSocket размер принимаемого пакета такой же, как и размер отправляемого).

Конец получения:

 Component rtpComponent = stream.getComponent(org.ice4j.ice.Component.RTCP);
 CandidatePair rtpPair = rtpComponent.getSelectedPair();
 videoDS = rtpPair.getDatagramSocket();

В теме:

byte[] buffer = new byte[250000000];
final DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
videoDS.receive(dp);
final byte[] clone = new byte[dp.getLength()];
System.arraycopy(dp.getData(), dp.getOffset(), clone, 0, dp.getLength());
final Image image = new Image(new ByteArrayInputStream(clone));

Сторона отправки почти такая же, за исключением того, что она работает на Android...

Единственное отличие между нерабочим кодом состоит в том, что первый абзац используется для отправки и получения. Если я использую обычный Java Socket, он будет работать (но, конечно, не за маршрутизаторами, поэтому я использую Ice4J).

2 ответа

Решение

Я нашел главную проблему....

Смотрите org.ice4j.stack.Connector line 160

/*
* Make sure localSock's receiveBufferSize is taken into
* account including after it gets changed.
*/
int receiveBufferSize = 1500;

Данные ЯВНО отсечены.... см. Строку 188

packet.setData(
            new byte[receiveBufferSize],
            0,
            receiveBufferSize);
....
localSock.receive(packet); //line 200

Мое Текущее решение состоит в том, чтобы отредактировать receiveBufferSize к 25000, и фактические данные пакета - правильное количество. Возможно, я попрошу слить.

Размер отправляемого пакета составляет 25 000, но принимающая сторона всегда 1500

Вы никогда не получите UDP-датаграмму больше, чем MTU пути, если:

  • между вами и целью нет маршрутизатора и / или
  • датаграмма не была фрагментирована, или
  • все фрагменты прибыли к цели.

В противном случае потеря любого фрагмента приводит к потере всей дейтаграммы.

Общепринятый предел полезной нагрузки для дейтаграмм UDP составляет 534 байта. Не 25к.

Другие вопросы по тегам