質問: sock_udp.receive_from(boost::asio::buffer(recv_buf_udp), sender_ep, 0, error); //取得したデータから画像を復元 ... } ``` 以上の方法で、一応の画像の送受信は成功したのですが、送信の間隔を狭めるほど受信側でのパケットロスがひどくなり、リアルタイムな画像送受信が上手くいっていないような状況です。具体的には... ``` 送信先 : 127.0.0.1 送受信のポート : 58900 - 送信間隔 100 ms [推定送信速度 150kB/s] → パケットロスト率 約0~10% - 送信間隔 30 ms [推定送信速度 450kB/s] → パケットロスト率 約40~70% ``` のように、多くのパケットが受信時に失われており、画像が半分以上再現されないような状況です。ただ、送信開始から10フレームほどは(遅延はあるものの)完全に受信できており、その後突然としてパケットが失われ始めます。その原因も分かりかねています。450kB/sという伝送速度は、ローカルホストや同一LAN内の通信なら実現できると考えていたのですが、このパケットロスト率は仕方ないものなのでしょうか。改善できる方法などがあればご助言いただきたいです。
回答: 送信間隔100msでゆっくりと送信して450kB/sで送信しているつもりかもしれませんが、実態としては1500kB/sで送信した後に33msのディレイを入れているに過ぎません。1500kB/sで送信したときに受信側のドライバの処理が追いつかなければ、容易にパケットをロストしてしまうでしょう。 1msのディレイを4msに変更して、33msのディレイを無くせば随分と安定するはずです。