0

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

4

2 回答 2

2

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

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

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

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

于 2011-08-08T17:06:20.373 回答
0

您应该做的是编码视频流。不用管网络层,让它为你做分片。

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

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

于 2011-08-08T16:45:29.103 回答