Regular DatagramSocket отлично работает ... ICE4J DatagramSocket, кажется, усекает данные !?ICE4J DatagramPacket слишком мал
Размер отправляемого пакета равен 2,500, но принимающий абонент всегда равен 1500 (с обычной Java DatagramSocket размер принимаемого пакета совпадает с размером отправки).
Receive Конца:
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).
Ошибка за вами. Вы пытаетесь отправить неимоверно большую дейтаграмму, которая не надежно поддерживается (a) ICE4J (b) UDP (c) IP (d) Ethernet или PPPoE или независимо от вашего физического уровня. – EJP
Не перечислить EJP, он не понимает протоколы UDP в Java ... Это исправление работает и было совершено в GitHub и Approved. – msj121
К сожалению, вы используете StackOverflow для своего эго и не можете признать, что мой ответ правильный. Исправление для библиотеки, которая необязательно требует, чтобы пакеты составляли 1500 по спецификации Java. Если это действительно необходимо для принудительного применения, оно должно фрагментировать пакеты (что, конечно, бессмысленно, так как Java на аппаратном уровне делает это) .... – msj121