通过UDP发送图片

时间:2011-08-08 16:42:17

标签: java networking udp datagram videochat

我想在java中编写一个应用程序,让两个客户端通过网络摄像头进行通话。它的工作方式是客户端连接到网络摄像头,以指定的帧速率(每秒20个)拍摄照片,然后缩小尺寸和分辨率,然后通过UDP数据包将其发送到另一个客户端。我的问题是 - 我应该在自己的数据报包中发送每张图片吗?我读过他们最多只能容纳半个千字节,那么每张照片应该减少那么多吗?或者我应该把它分成几个数据包吗?

2 个答案:

答案 0 :(得分:2)

您确定要传输整个图像,而不是使用只传输需要更新的内容的算法/编解码器吗?

如果您选择第二个选项,您可以从this previous question和已经使用过的测试库中获取一些想法。如果我不得不这样做,我相信我会和VLC java bindings一起去。您应该评估什么是最适合您特定目的的编解码器(比特率,质量等)。

如果您仍然希望传输图像,我建议您将其分解为udp数据报,请记住它们应以某种方式编号/标记,以便客户端可以在数据包到来时重建图像(它们不一定会进入您发送它们的顺序相同),您还需要考虑当某些数据包无法到达时客户端需要做什么(丢弃图像,请求以前的数据包等)。

最后一个想法,udp数据报最大大小也可能不是最佳选择,您的服务器客户端应该实现一个算法并根据传输速度协商udp帧大小。

答案 1 :(得分:0)

您应该做的是编码视频流。保留网络层,让它为你做片段化。

此外,如果您通过UDP发送视频,您可能希望每2秒左右投入一个关键帧。

不要将每个帧作为自己的图像发送。使用视频压缩器。