TCP/IP 是否有通过网络发送 JPG 图像的标准化方法?
Is there a standardized method to send JPG images over network with TCP/IP?
我正在寻找通过网络流式传输 JPG 图像的标准化方法。还需要一个 C++ 编程接口,它可以很容易地集成到现有软件中。
我正在开发一个 GPGPU 程序,该程序处理数字化信号并将它们压缩为 JPG 图像。图像的大小可以由用户定义,通常图像为 1024 x 2048 或 2048 x 4096 像素。我已经编写了我的 "own" 协议,它首先发送一个 header(以字节为单位的图像大小、宽度、高度和相应的通道),然后通过 TCP 发送 JPG 数据本身。之后,接收方发送确认所有数据已正确接收和显示,以便可以发送下一张图像。到目前为止一切顺利,不幸的是我的方法仅达到 12 fps,不满足项目要求。
我确信有更好的方法具有更高的帧速率。 Netflix 和 Amzon 等流媒体服务采用哪种方法处理 UHD 视频?当然,我在谷歌上搜索了很多,但我找不到满意的结果。
Is there a standardized method to send JPG images over network with TCP/IP?
有多种 Internet 协议常用于通过 TCP 传输文件。也许最常用的协议是 HTTP。另一个更老的是 FTP.
Which approach do streaming services like Netflix and Amzon take for UHD videos?
首先,他们根本不使用 JPEG。他们使用一些视频压缩编解码器(如 MPEG),不仅在空间上压缩数据,而且在时间上压缩数据(连续的帧往往包含相似的数据)。他们可能用来传输数据的协议示例是 DASH,它通过 HTTP 运行。
我没有想到一个特定的库已经很好地完成了这些事情,但要记住一些事项:
- 大多数图像/屏幕共享/视频流应用程序以有损方式专门为视频流数据使用 UDP、RTP、RTSP。他们使用 TCP 来控制流数据,例如发送关键命令,或客户端/服务器之间就要呈现的内容进行通信,但流式数据不是 TCP。
- 如果您正在流式传输视频,请参阅 this。
- 发送单个图像,您只需要有效的方法来压缩、序列化和反序列化,并且您可能希望以批处理方式执行此操作,而不是 time.Batch 10 个 jpeg 中的一个,压缩他们,序列化,发送。
你提到了 fps,所以听起来你正在尝试流式传输视频,而不仅仅是快速复制图像。我不完全确定你想做什么。您能否详细说明数字化信号以及为什么它们必须采用 jpeg 格式?它们不能是其他格式,然后在接收端转换为 jpeg 吗?
这不是对您问题的直接回答,而是建议您可能需要更改发送电影的方式。
这是一个计算:假设您可以从网络中获得 1Gb/s 的吞吐量。如果每个 2048x4096 文件压缩到大约 10MB(80Mb),则:
1000000000 ÷ (80 × 1000000) = 12.5
因此,您每秒可以发送大约 12 帧。这意味着如果您要显示连续的 JPG 流,如果您想要更快的帧速率,则需要更快的网络。
如果您的流是固定长度的电影,那么您可以缓冲数据并在缓冲足够的数据后开始播放电影,以便比等待整个电影下载更快地以所需的帧速率播放。如果你想以每秒 24 帧的速度播放,那么你需要在播放之前至少缓冲 2/3rds 的电影,因为播放速度是你的两倍下载速度。
如另一个答案所述,您应该使用流式编解码器,这样您还可以利用连续帧之间的压缩,而不是仅压缩当前帧。
总而言之,如果流永不结束(例如,直播流),您的播放速率将受到每秒可以传输的帧数的限制。
如果您有固定长度的电影,可以使用缓冲来隐藏吞吐量和延迟瓶颈。
我正在寻找通过网络流式传输 JPG 图像的标准化方法。还需要一个 C++ 编程接口,它可以很容易地集成到现有软件中。
我正在开发一个 GPGPU 程序,该程序处理数字化信号并将它们压缩为 JPG 图像。图像的大小可以由用户定义,通常图像为 1024 x 2048 或 2048 x 4096 像素。我已经编写了我的 "own" 协议,它首先发送一个 header(以字节为单位的图像大小、宽度、高度和相应的通道),然后通过 TCP 发送 JPG 数据本身。之后,接收方发送确认所有数据已正确接收和显示,以便可以发送下一张图像。到目前为止一切顺利,不幸的是我的方法仅达到 12 fps,不满足项目要求。
我确信有更好的方法具有更高的帧速率。 Netflix 和 Amzon 等流媒体服务采用哪种方法处理 UHD 视频?当然,我在谷歌上搜索了很多,但我找不到满意的结果。
Is there a standardized method to send JPG images over network with TCP/IP?
有多种 Internet 协议常用于通过 TCP 传输文件。也许最常用的协议是 HTTP。另一个更老的是 FTP.
Which approach do streaming services like Netflix and Amzon take for UHD videos?
首先,他们根本不使用 JPEG。他们使用一些视频压缩编解码器(如 MPEG),不仅在空间上压缩数据,而且在时间上压缩数据(连续的帧往往包含相似的数据)。他们可能用来传输数据的协议示例是 DASH,它通过 HTTP 运行。
我没有想到一个特定的库已经很好地完成了这些事情,但要记住一些事项:
- 大多数图像/屏幕共享/视频流应用程序以有损方式专门为视频流数据使用 UDP、RTP、RTSP。他们使用 TCP 来控制流数据,例如发送关键命令,或客户端/服务器之间就要呈现的内容进行通信,但流式数据不是 TCP。
- 如果您正在流式传输视频,请参阅 this。
- 发送单个图像,您只需要有效的方法来压缩、序列化和反序列化,并且您可能希望以批处理方式执行此操作,而不是 time.Batch 10 个 jpeg 中的一个,压缩他们,序列化,发送。
你提到了 fps,所以听起来你正在尝试流式传输视频,而不仅仅是快速复制图像。我不完全确定你想做什么。您能否详细说明数字化信号以及为什么它们必须采用 jpeg 格式?它们不能是其他格式,然后在接收端转换为 jpeg 吗?
这不是对您问题的直接回答,而是建议您可能需要更改发送电影的方式。
这是一个计算:假设您可以从网络中获得 1Gb/s 的吞吐量。如果每个 2048x4096 文件压缩到大约 10MB(80Mb),则:
1000000000 ÷ (80 × 1000000) = 12.5
因此,您每秒可以发送大约 12 帧。这意味着如果您要显示连续的 JPG 流,如果您想要更快的帧速率,则需要更快的网络。
如果您的流是固定长度的电影,那么您可以缓冲数据并在缓冲足够的数据后开始播放电影,以便比等待整个电影下载更快地以所需的帧速率播放。如果你想以每秒 24 帧的速度播放,那么你需要在播放之前至少缓冲 2/3rds 的电影,因为播放速度是你的两倍下载速度。
如另一个答案所述,您应该使用流式编解码器,这样您还可以利用连续帧之间的压缩,而不是仅压缩当前帧。
总而言之,如果流永不结束(例如,直播流),您的播放速率将受到每秒可以传输的帧数的限制。
如果您有固定长度的电影,可以使用缓冲来隐藏吞吐量和延迟瓶颈。