2

专业摄像机通过 UDP 和 RTP 向我发送数据包,其中包含 YUV422 像素格式 (RFC 2435) 的 MJPG 数据。通过使用 DatagramSocket 和 DatagramPacket 类,我能够接收数据包。现在我正在寻找一种有效的方法来获取:

大约 80 * RTP_socket.receive(rtpPacket) ---> 1 jpg-File on my Harddisk (with 25 fps)

否则我很快就会丢失相对多的数据包,因为根据 UDP 标准,数据包是由相机连续发送的(偶尔丢失一个包并不是最糟糕的,因为我不需要每一帧)。

现在我正在使用 ByteBuffer 顺序存储数据包(使用 put (.. int offset...) 切断标头,直到我得到一帧的最终数据包。

但不幸的是,我似乎需要使用 ImageIO.write 函数来获取必要的 jpg-Header,对吗?因为它不能直接处理 ByteBuffer...

如果我会在另一个线程(尚未实现)中对图像进行一些后处理,那么 DirectByteBuffer 是否有意义?

希望你明白我在问什么:)。如果没有,请不要犹豫,问

非常感谢

4

1 回答 1

0

你可以移植这个 C# 实现,它很容易实现超过 100 FPS :)

https://net7mma.codeplex.com/SourceControl/latest#Rtp/RFC2435Frame.cs

我是作者,如果您需要移植帮助,请告诉我!

于 2014-06-11T22:30:37.243 回答