基于ESC的远程视频传输

简介: 通过ESP服务器完成反向代理,将树莓采集到的图像数据,发送给电脑

一、

本人目前是机械设计及其自动化的大二学生,在前不久基于兴趣,想自己做个无线图传的遥控小车,起初的设想是在树莓派上部署socket客户端并且用opencv对图像进行读取,然后在电脑上部署socket服务端,通过tcp协议将opencv读取到的图像远程传输到电脑上。最初的实验环境是在局域网中也就是实验室下的wifi,虽然传输效果还不错,可以到达十几帧。但是在测试中发现一旦小车开出很远,那么受wifi信号的影响帧率就会下降很多。在偶然之间看到有内网穿透反向代理这个方法,通过一个公网服务器将消息进行转发,就可以不受局域网的限制,远程进行传输。于是说干就干,我就开始在网络上查找云服务器相关的信息。查找过程中发现了阿里的“飞天加速计划-高校学生在家实践”的活动,这对于我这种出于实践目的,但是又租不起服务器的学生来说简直是雪中送碳。

二、

因为是第一次使用云服务器,还是踩了许多的坑,但幸好阿里云有使用攻略解决我大部分对于服务器的疑惑,下面就分享下我在使用ESC服务器时遇到的问题,希望可以帮助大家避开一些坑:

1. 首先是在用socket与我的电脑建立连接所碰到的问题,我把socket服务端部署在云服务器上,socket客户端部署在我的电脑上。然后通过服务器的公网ip和端口8089让电脑和服务器建立tcp连接。可是无论我怎么试都始终连接不上,于是我把服务器的公网ip换成服务器的私网ip,结果依旧不行。困在此的我百思不得其解,因为平常局域网中只要对方的ip地址和端口号就可建立连接,咋在这就不行了呢。在确认程序没问题后,我开始检查是不是服务器上的问题,果然在游览过程中我发现了一个叫安全组的东西。通过阿里的使用手册我明白了,原来安全组是一个无形的防火墙,ESC在我们创建实例后,在入方向默认只开启了几个比较常用的端口,而其他端口默认都是关闭的,需要自己配置开启。这也就是我用8089端口死活连接不上的原因了。所以解决办法就是通过安全组将入方向的8089端口打开就行。另外需要提示下大家,在socket部署在服务器上时需要绑定服务器的私网ip,而客户端连接服务器时,需要使用服务器的公网ip,这样才能建立tcp连接。

2. 在最初我自己的设想是,在服务器上创建个socket服户端接受数据,然后再创建一个客户端去发送数据,从而达到转发的效果。但在实践时我发现服务器的服务端可以接受其他客户端的连接,也就是1问题所解决的,但服务器的客户端却始终连接不上其他服务端。于是我就试这用服务器ping了下我电脑的IP发现没有反应,但是ping百度的ip是有反应的。我又检查了下安全组,发现普通用户安全组中出方向的端口默认是全部开启的。说明这不是服务器导致的。在一番网上冲浪后,我找到了答案。原来是自己的网络方面的还是了解的太少了。一般来说在内网的用户是可以主动连接到公网服务器的,但公网的服务器想要主动连接到内网的用户是不能的。因为用内网的ip服务器是找不到的。解决办法是将内网的ip映射成公网地址,但这样不安全,也失去了我用服务器做代理的意义。在迷茫中我csdn看到一篇文章介绍了qq是如何将用户的信息进行转发的。简单说就是服务器作为服务端,A客户端连接上服务器发送消息给B,B个作为客户端连接上服务器后可以接收到消息。从而完成消息转发。基于这个原理,我利用python的多线程完成在服务器的服务端中处理多个客户端。

三、

在本次ESC服务器的实践过程之中,首先学习到了很多关于云服务器方面相关的知识,比如安全组的设置,实例的创建和使用等,同时也丰富了我网络通讯方面的知识,纠正了之前的一些错误理解。很感谢阿里云为学生提供的使用免费服务器的机会,让我们可以将自己的畅想付诸于实践,也祝愿阿里云的"飞天加速计划"越办越好!

四、

下面附上本次实践的代码截图,代码中还有许多不足之处,目前只是实现了基本的功能还有许多地方未加完善,请大家多多指出!


1651281146155.jpg.jpg

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
前端开发 测试技术 持续交付
云效平台介绍
云效,创立于2012年,是由阿里巴巴出品,是业内领先的面向企业的一站式研发效能平台,以提升研发效能为目标,通过线上化,透明化和自动化打通产品质量闭环,真正实现了持续集成持续交付。
10317 14
|
小程序
QT日历制作
QT日历制作
311 0
|
存储 人工智能 小程序
比赛须知【2024 年睿抗机器人开发者大赛CAIP-编程技能赛(国赛)】
该文章是关于2024年睿抗机器人开发者大赛CAIP-编程技能赛(国赛)的参赛通知,强调了比赛时间、阅读比赛须知的重要性,并列举了多项比赛期间禁止的行为以确保比赛的公平性。
 比赛须知【2024 年睿抗机器人开发者大赛CAIP-编程技能赛(国赛)】
|
编解码 图形学 iOS开发
AVPro Movie Capture☀️一、一款U3D录屏插件介绍
AVPro Movie Capture☀️一、一款U3D录屏插件介绍
|
分布式计算 数据库 Spark
实时数仓 Hologres产品使用合集之如何优化增加索引和主键
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
Arthas 测试技术
Arthas查看已加载类的源码(jad)
Arthas查看已加载类的源码(jad)
681 0
|
JSON 资源调度 JavaScript
构建工具vite/webpack
构建工具vite/webpack
|
Java
Java中第三代日期类LocalDateTime的详细使用
Java中第三代日期类LocalDateTime的详细使用
326 0
Java中第三代日期类LocalDateTime的详细使用
|
数据采集 搜索推荐 算法
谷歌SEO排名有什么规律?
答案是:做好谷歌SEO排名需要足够多的GPB外链+足够多的优质内容。 谷歌算法的核心 谷歌的搜索引擎排名算法经常更新,但核心目标始终保持不变:为用户提供最相关、最高质量的内容。 了解这些核心规律可以帮助我们更好地进行Google优化。 内容的质量和相关性 高质量、原创且有深度的内容往往更容易获得谷歌的青睐。 谷歌使用复杂的算法来判断内容的质量,其中包括用户互动度、停留时间等指标。
277 0
谷歌SEO排名有什么规律?
|
机器学习/深度学习 Rust 资源调度
Rust机器学习之Plotters
本文是“Rust替代Python进行机器学习”系列文章的第四篇,带领大家学习如何用Plotters作图。
1764 0
Rust机器学习之Plotters