Comments 25
А что такое вообще «ремаут»?
+1
я не программист, но «потери» у локалхоста !? как так ???? я понимаю если там по Wi-F сигналы чем то заглушить можно но в самом то компьютере куда?
0
Это из — за рекурсии, производительность резко падает, а там уже происходят потери
0
эм… если я открою паинт и сделаю скриншот, вставлю в паинт, сделаю сного скриншот, вставлю этот новый скриншот с паинтом в паин, будет разница по производительности между отображением этой картинкой и картинкой с кошечками? сделаю ещё скриншот и анологично вставлю, то этот скриншот не будет ни чем не отличатся в принцепе от первоначального скриншота -> таже бмп-шка только в ней будет нарисова паин в паинте в паинте, на ресурсы компьютера чисто теоретически это не как не повлияет, или я чегото недопонимаю?…
-4
Дело в том, что запустив одновременно Передатчик и одновременно Отправитель на одном компьютере ЦП компьютера очень сильно падает и из — за моего костыля происходят потери
-2
значит всё таки дело не в рекурсии а в том что запушены сразу 2 приложения, а не одно как в случае когда отправитель на одном а получатель на другом… и серовно до меня не доходит, у вас такой слабый компьютер, что не может записывать и проигрывать?? эм… а сейчас точно 2012 год? или это норма когда Core 2 Duo 2.66 GHz, Nvidia GeForce 9600 GT не могут выполнять казалось бы простые вещи?
+1
Ага, ещё и как. А если делать много соединений по TCP, то в какой-то момент теряется SYN пакет и соединение устанавливается не за доли секунды, а за 3 секунды. Очень внезапно так выглядит.
0
Поменяйте на remote, а то вообще не понятно о чем.
0
Нда…
Receive_GetData и ConvertToTexture2D это нечто.
1. Преобразуем byte[] в Bitmap.
2. Сохраняем Bitmap в PNG.
3. Загружаем Texture2D из PNG.
… и всё это вместо одного вызова Texture2D.SetData().
Receive_GetData и ConvertToTexture2D это нечто.
1. Преобразуем byte[] в Bitmap.
2. Сохраняем Bitmap в PNG.
3. Загружаем Texture2D из PNG.
… и всё это вместо одного вызова Texture2D.SetData().
+2
Спасибо, буду знать
-1
Не за что :)
В конкретно этом случае (т.к. передаёте JPEG), лучше просто использовать Texture2D.FromStream().
Он вообще-то понимает и .jpg и .png.
А вообще лучший (из простых) вариант разбить всю картинку по сетке и передавать только изменившиеся куски.
А с некоторой задержкой (раз N секунд) передавать все.
Ну или (при двустороннем общении), по запросу клиента.
В конкретно этом случае (т.к. передаёте JPEG), лучше просто использовать Texture2D.FromStream().
Он вообще-то понимает и .jpg и .png.
А вообще лучший (из простых) вариант разбить всю картинку по сетке и передавать только изменившиеся куски.
А с некоторой задержкой (раз N секунд) передавать все.
Ну или (при двустороннем общении), по запросу клиента.
0
Оптимизирую программу и код в следующей статье. На счёт .jpg — у меня вылетают исключения при попытке его преобразовать в Texture2D
0
Можно еще попробоват прикрутить технику прогрессивного джипега :) Чтобы при потери пакетов не было половины картинки. Так хоть будет одна часть плохая, а вторая нормальная.
0
//Ответ прост- UDP сообщение не может превысить размер в 65 507 байт.
Открою вам секрет, максимальный размер пакета TCP = 64k. Просто по тсп можно передавать несколько пакетов в одной сессии, но вы наверное об этом и не слышали?
Открою вам секрет, максимальный размер пакета TCP = 64k. Просто по тсп можно передавать несколько пакетов в одной сессии, но вы наверное об этом и не слышали?
+1
можно отнять (либо XOR) побайтово из полученной картинки предыдущую и сжать разность, в которой большая часть чисел будет равна 0 из за одинаковых пикселей что даст очень хорошую степень сжатия. на клиенте распаковать и добавить (либо XOR) к тому что есть. правда потеря пакета испортит картинку.
0
- можно заюзать enet для .NET — reliable UDP. или другую имплементацию RUDP
- говорили: можно передавать только изменения
- не знаю как в XNA. кадры на sender-е можно забирать через DirectX — создать offscreen-поверхность и туда device.GetFrontBufferData(...). требует 2-5мс. Через HDC(Graphics) 20-50мс
0
PS. что-то не смог отредактировать то сообщение, добавлю ссылки так:
http://www.codeproject.com/Articles/274461/Very-fast-screen-capture-using-DirectX-in-Csharp
http://enet.bespin.org/
добавки:
бывает, что экран на 6 FullHD моников. экран можно бить на тайлы 512х512 и отправлять изменения только по изменившимся тайлам. на viewer-е обновлять и показывать текстуры тайлами
http://www.codeproject.com/Articles/274461/Very-fast-screen-capture-using-DirectX-in-Csharp
http://enet.bespin.org/
добавки:
бывает, что экран на 6 FullHD моников. экран можно бить на тайлы 512х512 и отправлять изменения только по изменившимся тайлам. на viewer-е обновлять и показывать текстуры тайлами
0
int countMsg = bytes[0] - 1;
if (countMsg > 10)
throw new Exception("Потеря первого пакета");
Так делать не правильно, у вас нет никаких гарантий, что при потере хидера, в этом байте будет значение больше 10. Кстати, 10 это магическое число, его лучше убрать под осмысленную константу. Для проверки целостности кладите в хидер контрольную сумму пакета. И уберите падение с ошибкой, не пришел пакет — ждем следующего. В CutMsg мемори стрим излишен, вы расходуете лишнюю память. Оперируйте просто массивами. И используйте png вместо jpeg — он лучше подходит для отображения текстов.
+1
UFO just landed and posted this here
Хмм… «шустрый» говорите…
0
Sign up to leave a comment.
Пишем шустрый Remote — Desktop клиент на C# и XNA