首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从机器人通过UDP发送的图像到服务器上的实时视频流(PC)

从机器人通过UDP发送的图像到服务器上的实时视频流(PC)
EN

Stack Overflow用户
提问于 2010-10-27 16:19:06
回答 2查看 13.8K关注 0票数 9

嗯。我发现这似乎很有希望:

http://sourceforge.net/projects/mjpg-streamer/

好的。我会尽量解释清楚和详细地解释我想要做的事情。

我有一个小型仿人机器人,带有摄像头和wifi棒(这是机器人)。机器人的wifi平均传输速率为1769 on /s,该机器人有500 the的CPU和256 on的RAM,不足以进行任何严肃的计算(而且机器人上已经有运动、视觉、声纳、语音等模块运行)。

我有一台电脑,我用它来控制机器人。我正试着让机器人在房间里走来走去,看到机器人在电脑上看到的实时视频。

我已经开始工作了。机器人像我希望的那样走路,用相机拍照。这些图像正在通过UDP协议发送到我接收它们的PC上(我已经通过将传入的图像保存在磁盘上来验证了这一点)。

相机返回的图像是64x48px在YUV442颜色空间。我是发送有损压缩(JPEG)的图像,因为我试图获得最好的FPS在PC上。我正在用PIL库对机器人进行JPEG压缩。

我的问题:

  1. 有人能给我一些关于如何将输入的JPEG图像转换成实时视频流的想法吗?我知道我需要一些视频编码器。你推荐哪个视频编码器?FFMPEG还是别的什么?我是非常新的视频流,所以我想知道什么是最好的这项任务。我更喜欢用Python编写这个,所以我更喜欢一些带有Python的视频编码器或库。但是我想,如果这个库有一些好的命令行API,那么它就不必在Python中了。
  2. 我能从这里得到的最好的FPS是什么?考虑到1769 of /s的平均无线传输速率和图像的维数?我应该使用与JPEG不同的压缩吗?
  3. 我很乐意看到任何代码示例。链接到解释如何做到这一点的文章也会很好。

一些代码样本。下面是我如何从机器人发送JPEG图像到PC (简写代码片段)。它运行在机器人上:

代码语言:javascript
运行
复制
# lots of code here

UDPSock = socket(AF_INET,SOCK_DGRAM)

  while 1:
    image = camProxy.getImageLocal(nameId)
    size = (image[0], image[1])
    data = image[6]
    im = Image.fromstring("YCbCr", size, data)
    s = StringIO.StringIO()
    im.save(s, "JPEG")

    UDPSock.sendto(s.getvalue(), addr)

    camProxy.releaseImage(nameId)

  UDPSock.close()

  # lots of code here

以下是我如何在PC上接收图像。这在PC上运行:

代码语言:javascript
运行
复制
  # lots of code here

  UDPSock = socket(AF_INET,SOCK_DGRAM)
  UDPSock.bind(addr)

  while 1:
    data, addr = UDPSock.recvfrom(buf)
    # here I need to create a stream from the data
    # which contains JPEG image

  UDPSock.close()

  # lots of code here
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-27 17:03:55

看看你的第一个问题。虽然这里的解决方案使用了一组非流式图片。也许能帮上忙。该示例使用pyMedia。

  • video.py.html

一些你想要的东西。

  • http://code.google.com/p/mjpeg-stream-client/

如果您需要编辑二进制流:

  • http://bitbucket.org/haypo/hachoir/wiki/hachoir-parser
票数 1
EN

Stack Overflow用户

发布于 2010-10-28 04:31:33

尝试侏儒并测试每个可用的编解码器以获得最佳性能。您可能需要一个非常轻量级的编解码器,比如烟雾或低配置文件H263或x264,您可能需要将分辨率降低到320x240。

您可以在视频编码和解码的延迟与所使用的带宽之间进行权衡,您可能会发现下降到160x120的原始数据包用于快速场景分析,并且只定期发送整个帧。您还可以将原始、低延迟、低分辨率、高更新提要与高压缩、高延迟、高分辨率、低更新提要混合使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4035365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档