1. 推流固件简介
esp32支持cam固件,可以使用RTSP方式推流,但是找了全网没有bl616/618支持RTSP的教程,因此从头开始摸索了一下,移植了Micro-RTSP的功能,使得Cam-D200支持RTSP推流。
之前固件分享的帖子见:Cam-D200 RTSP推流固件分享 - 小安派·Cam-D200 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
由于代码仅仅是能跑,一直想着优化之后再发出来,但是时间久了又拖延了,所以直接把原始代码开源出来,以后有机会再优化。
2. 代码开源
附件:ap_web.rar
解压附件的ap_web.rar,替换官方源码ap_web文件夹下的代码。

同时,由于使用了c++代码,所以需要调整编译选项以及对main.c进行调整。
主要变更如下:
CMakeLists.txt

$ git diff CMakeLists.txt
diff --git a/AiPi-CAM-D200/CMakeLists.txt b/AiPi-CAM-D200/CMakeLists.txt
index 36d9f53..b94d339 100755
--- a/AiPi-CAM-D200/CMakeLists.txt
+++ b/AiPi-CAM-D200/CMakeLists.txt
@@ -6,7 +6,7 @@ find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})
#增加源文件文件包
file(GLOB_RECURSE d200_camera "${CMAKE_CURRENT_SOURCE_DIR}/d200_camera/*.c")
file(GLOB_RECURSE bl618_wifi "${CMAKE_CURRENT_SOURCE_DIR}/bl618_wifi/*.c")
-file(GLOB_RECURSE ap_web "${CMAKE_CURRENT_SOURCE_DIR}/ap_web/*.c")
+file(GLOB_RECURSE ap_web "${CMAKE_CURRENT_SOURCE_DIR}/ap_web/*.cc")
file(GLOB_RECURSE bl616_uart "${CMAKE_CURRENT_SOURCE_DIR}/bl616_uart/*.c")
file(GLOB_RECURSE filesystem "${CMAKE_CURRENT_SOURCE_DIR}/filesystem/*.c")
file(GLOB_RECURSE button "${CMAKE_CURRENT_SOURCE_DIR}/button/*.c")
@@ -21,6 +21,8 @@ sdk_add_include_directories(./bl616_uart)
sdk_add_include_directories(./filesystem)
sdk_add_include_directories(./button)
+sdk_add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fpermissive>)
+
#增加源文件目录
target_sources(app PRIVATE ${d200_camera})
target_sources(app PRIVATE ${bl618_wifi})
main.c
调整了mttp_server_init的入口,同时把wifi的账号和密码硬编码到固件中。

diff --git a/AiPi-CAM-D200/main.c b/AiPi-CAM-D200/main.c
index 0468078..7c28085 100755
--- a/AiPi-CAM-D200/main.c
+++ b/AiPi-CAM-D200/main.c
@@ -78,11 +78,19 @@ static void bl618_wifi_task(void *pvParameters)
// vTaskDelay(pdMS_TO_TICKS(3000));
printf("bl618 wifi connecct\r\n");
+ if (bl618_wifi_connect("xxxx", "xxxxxxx") != 0)
+ {
+ printf("bl618 wifi connecct fail!\r\n");
+ } else {
+ printf("bl618 wifi connect to 'xxxx' successfully\r\n");
+ }
+
while (1)
{
if (wifi_status)
{
- mhttp_server_init();
+ //mhttp_server_init();
+ mhttp_server_init_new();
}
vTaskDelay(pdMS_TO_TICKS(3000));
已上就是全部的代码修改。RTSP推流逻辑全部在ap_web中,主要是对开源的Micro-RTSP进行魔改得到。
3. 编译
直接按照官方的编译方式即可,编译完成后直接烧录,重启后,连上wifi后即可使用vlc验证推流。具体可参考固件使用的帖子,这里不再赘述。
