【问题标题】:C# Udp picture size [closed]C# Udp 图片大小 [关闭]
【发布时间】:2020-11-14 20:53:38
【问题描述】:

我正在尝试构建一个 c# 视频通信应用程序。因为 udp 有大小限制,我正在尝试降低图像大小。我在这里尝试了此代码 Image bitmap = pictureBox1.Image; ImageCodecInfo myImageCodecInfo; Encoder myEncoder; EncoderParameter m在此处输入代码`yEncoderParameter; 编码器参数 myEncoderParameters;

            myImageCodecInfo = GetEncoderInfo("image/jpeg");
            myEncoderParameters = new EncoderParameters(1);
            myEncoder = Encoder.Quality;
            myEncoderParameter = new EncoderParameter(myEncoder, 5L);
            myEncoderParameters.Param[0] = myEncoderParameter;

            bitmap.Save("Img.jpg", myImageCodecInfo, myEncoderParameters);
            Image snd = Image.FromFile("Img.jpg");
            string Ip = "127.0.0.1";
            int port = 1111;

            byte[] sndcam = ImageToByteArray(snd);

            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(Ip), port);
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);
            client.SendTo(sndcam, ep);`

但我仍然收到高文件大小错误。我愿意接受所有建议 提前致谢

【问题讨论】:

    标签: c# udp videochat


    【解决方案1】:

    没错,如果您尝试一次发送的字节数超过基础 MTU 大小(整个路径的 MTU 较小),您会收到 SocketException (message too long),这是概念上的。

    解决方案是发送数据块,Socket 不会为您这样做。

    应该这样做:

    //client.SendTo(sndcam, ep);
    client.Connect(ep);
    client.SendBufferSize = 1024;
    for (int pos = 0; pos < sndcam.Length; pos += client.SendBufferSize)
    {
        int len = sndcam.Length - pos > client.SendBufferSize ? client.SendBufferSize : sndcam.Length - pos;
        byte[] chunk = new byte[len];
        Array.Copy(sndcam, pos, chunk, 0, chunk.Length);
        client.Send(chunk);
    }
    client.Close();
    

    请记住,udp 不提供握手,这意味着您永远不知道数据包是否以正确的顺序到达,或者根本不知道。

    【讨论】:

    • 感谢您的帮助。
    • 谢谢。但是当我尝试你的代码时,程序冻结了。你能解释为什么我写的代码不起作用吗?
    • 冻结点是什么?解释在link 中。此外,ms docs 可能会有所帮助。
    • 当我开始视频流时正确
    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多