将 esp-32 摄像头流式传输到 YouTube 等 RTMP 服务器 [关闭]
Posted
技术标签:
【中文标题】将 esp-32 摄像头流式传输到 YouTube 等 RTMP 服务器 [关闭]【英文标题】:Stream esp-32 camera to RTMP server like YouTube [closed] 【发布时间】:2020-03-28 23:16:00 【问题描述】:我正在研究一个需要使用摄像机流的项目。在多次点击和跟踪和谷歌搜索之后,我什至没有接近将 ESP-32 相机流直接传输到我自己的 RMTP 服务器的解决方案。
已经尝试过的解决方案:
1) 我尝试使用 Raspberry pi 重新流式传输 ESP-32-cam,效果很好,但不是我想要的丢弃,因为不想使用 Raspberrypi 进行重新流式传输
2) ESP-32-cam:使用时间触发器进行记录和 FTP 传输(未尝试但认为这不是一个好方法)。 因为不是实时而被丢弃
3) ESP32 Try to send image file to php with HTTPClient 我试过了,但它只适用于图像,其次代码是在循环函数中执行的,所以由于保存和发布操作会导致很长的延迟。
请注意:我不是在看 ESP-32 cam 充当流服务器并且浏览器可以像这样连接到它的解决方案:https://www.hackster.io/BnBe_Club/9-rtsp-video-streamer-using-the-esp32-cam-board-8832b4
我已经尝试过了,效果很好,但不适用于涉及流式传输到 RTMP 服务器而不重新流式传输的用例。
**
我想实现ESP-32 CAM可以直接post/stream到RTMP 云托管服务器,从技术上讲这似乎是可能的,因为 ESP-32 cam支持连接wifi和访问云端 服务器
**
在google上,我找到了一个类似的帖子:https://forum.arduino.cc/index.php?topic=634605.0有解决方案的人没有兴趣分享它。
可能需要在下面的代码中进行一些修改可能是参考:https://github.com/espressif/esp32-camera
【问题讨论】:
【参考方案1】:您应该阅读(并理解)您发布的链接。有两种选择。一个由 rtsp 库使用,其中 Arduino 充当 rtsp 服务器,因此像 vlc 这样的程序可以在桌面上解码流。 或者 BnBe 解决方案,其中 Esp32cam 充当客户端,youtube 等服务器可以接收流并对其进行解码。在这种情况下,ESP 通过连接到互联网的 AP。浏览器组件可用于配置它。恕我直言,在客户端服务器场景中没有第三种解决方案(一个充当客户端,另一个充当服务器)。仔细阅读 BnBe 解决方案的代码。如果你想硬编码你的配置 - 很容易做到。 您的评论 qoute:“涉及流式传输到 RTMP 服务器而不重新流式传输的用例”抱歉,我至少在我拥有的代码中看不到这种情况发生您的意思也许是作者从 cam 获取流(方法esp_camera_fb_get()) 这不是“重新流式传输”,这是因为 espressif 的封闭源是访问准备好的相机流的唯一方法。如果您不喜欢这样,则必须投资其他硬件。 您使用图形编辑了您的问题。这就是 BnBe 解决方案的作用!所以没有重新流式传输。OP 想要将 espressif 函数 esp_camera_fb_get() 的结果直接发送到 rtmp 云服务。这在技术上是不可能的,因为 API 只允许获取编码为 mpeg 的帧缓冲区(基本上是单个 jpg 粘合在一起)。因此,您必须将帧缓冲区转换为有效的 rtmp 流。即使您查看 OV2640 的数据表,您也会看到源已关闭,并且只能通过 API 访问固件。因此,除了反向工程之外,没有任何可能。 使用 BnBe 解决方案,它可以工作并为您节省 1/2 年的开发时间,如果您是一名优秀的编码员,但忘记了多个流,ESP32 CPU 大麦可以处理一个! -> 特别查看CRtspSession.h和CRtspSession.cpp以及OV2640.h和OV2640.cpp的代码(在那里你会找到cam模块的所有API函数)
【讨论】:
您好,感谢您的回复,我已经添加了图片来澄清转播,对于AP模式,访问仅限于单个位置。 “抱歉,我至少在我的代码中看不到这种情况”——是的,它没有发生,但最终你的代码没有将流发送到面向互联网的服务器。我试图在第一张图片中理解它。基本上我想将“esp_camera_fb_get()”转移到colud RTMP服务器 查看我的编辑 这(图 2)正是 BeBe 解决方案。图 1 是 rtmp 库函数。因此,请阅读 BeBe 的代码(尤其是 src 目录中的流媒体文件)并在定义中为您的用例进行必要的更改 - 它有效! 你好@codebreaker。在您的 cmets 中,您提到 BeBe 解决方案 ,,,,您是指 BnBe 解决方案吗?或者请分享链接。其次,我正在寻找图 3 中提到的解决方案。 对不起,在我的回答中看到我的编辑,给你指示是的,它当然是 BnBe,你当然要根据你的用例调整 ino,scr 文件(改编的 lib 文件)可以做到 github.com/enesbcs/ESP32_RTSP_Cam/blob/master/lib/… 在这里我可以看到流已发送到链接的客户端。这里的 esp32-cam 仍然充当服务器。可能我需要编写自己的库,可以将流发送到另一个服务器,该服务器不是 esp32 cam 模块的客户端。或者有什么简单的方法来调整它?以上是关于将 esp-32 摄像头流式传输到 YouTube 等 RTMP 服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 esp32 接入点流式传输 UDP 数据包会导致大量数据包丢失
是否可以从 USB 摄像头流式传输视频和从移动麦克风传输音频以在 android 中进行 RTMP 流式传输
将 pi 的 opencv 视频传输到 ffmpeg 以进行 Youtube 流式传输