发帖
4 0 0

小安派Cam 200D RTSP推流固件代码开源

hrqwe
论坛元老

11

主题

161

回帖

9961

积分

论坛元老

积分
9961
小安派·Cam-D200 34 4 昨天 23:21

1. 推流固件简介

esp32支持cam固件,可以使用RTSP方式推流,但是找了全网没有bl616/618支持RTSP的教程,因此从头开始摸索了一下,移植了Micro-RTSP的功能,使得Cam-D200支持RTSP推流。

之前固件分享的帖子见:Cam-D200 RTSP推流固件分享 - 小安派·Cam-D200 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)

由于代码仅仅是能跑,一直想着优化之后再发出来,但是时间久了又拖延了,所以直接把原始代码开源出来,以后有机会再优化。

2. 代码开源

upload 附件:ap_web.rar

解压附件的ap_web.rar,替换官方源码ap_web文件夹下的代码。

image.png

同时,由于使用了c++代码,所以需要调整编译选项以及对main.c进行调整。

主要变更如下:

CMakeLists.txt

image.png

$ 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的账号和密码硬编码到固件中。

image.png

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验证推流。具体可参考固件使用的帖子,这里不再赘述。

image.png

──── 0人觉得很赞 ────

使用道具 举报

太牛了,大佬 终于学到了 怎么调用c++了 谢谢
学习了
太牛了,学习学习
棒~
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28047 个
  • 话题数: 39558 篇