4. WIFI_CAMERA工程说明

4.1. 工程简介

  • wifi_camera实现了wifi和摄像头结合的应用案例。

  • 已有客户通过我们提供的SDK开发了:例如当前火热的wifi航拍摄像头,IPC摄像头,儿童相机,USB摄像头(内窥镜)。

  • 该工程提供了完善的视频,音频,显示,ui,wifi等接口,提供多样化的demo工程加快用户的熟悉和开发速度。

  • 工程实行了SD卡录像,网络视频包传输,SDK可以稳定运行app图传到手机(640X480 20fps),透传视频包距离在30~100M之间。

  • ipc网络透传在网络良好的情况下能流程运行15帧640X480图像。

  • 儿童相机支持双图层显示(两层图层均可动态刷新数据),视频播放,音频播放,图像合成320*240能流畅运行20帧图像。

4.2. 示例工程

具体的示例工程代码详见 apps/wifi_camera

4.3. wifi图传操作说明

1.在公版SDK目录下找到sdk_tools/Android_DVRunning2_V2.8.0-20201113.apk安装到手机 设备下载好公版SDK中wifi_camera只需要确摄像头连接是否对应默认板级配置即可。

2.设备通电,打开DVRunning2,第一次app全部权限开启,点击连接设备找到名字为wifi_camera,并且信号为满格的wifi进行连接。默认wifi密码12345678进行连接,连接成功后返回APP即可出现图层图像。

4.4. wifi图传代码流程重点讲解

1.开机时候设备进行wifi初始化时会进行网络部分的初始化(net_app_init();)比便于后面更手机wifi通信使用;

2.连接上设备后,当打开app手机就会和设备创建CTP连接,控制命令是:WIFI_CTP_CMD<>(ctp_cmd.c);

设备连接上后会向手机进行核对信息例如手机类型,安卓和苹果有小区别,控制命令是:WIFI_CTP_CMD<>(ctp_cmd.c);

获取手机的时间,控制命令是:WIFI_CTP_CMD<>(ctp_cmd.c);

打开视频实时流,控制命令是:WIFI_CTP_CMD<>(cmd_put_open_rt_stream()),

该函数调用net_video_rec()完成摄像头的初始化(net_video_rec0_start())(__this_net->net_video_rec = server_open(“video_server”,“video0.1”);)以及图传数据通道的建立(stream_protocol_task_create)(net_video_rec.c);

3.app出图后所有的控制命令都会流入net_video_rec_control()。

4.设备与APP(DVRunning2)通信协议文档,doc/stuff/设备端与APP端通信协议文档.pdf

4.5. 儿童相机功能说明

4.5.1. 配置说明

  • 配置wifi_camera工程对应的UI资源:路径 ui_project/3.ui_demo_wifi_camera/ui_320×480_test/

双击打开UI资源生成工具,点击生成资源文件,进度条显示100%表示生成成功。

  • 烧录wifi_camera工程即可。

4.5.2. 使用说明

  • 第一个页面为主页面,key3为加界面,key4为减界面,加减界面可以进行特效样式切换;

  • 在大头贴和万花筒的样式中,按key1键拍照,保存JPG格式的图片到SD卡;

  • 在多窗口拍照合成的样式中,按key1键拍下第一个窗口的图像,拍完最后一张窗口图像会保存JPG格式的图片到SD卡;再次按下key1重置。

4.5.3. 相关文件说明

camera_demo.c :参考test_main()摄像头应用部分,负责等待按键信息,然后把图像保存到SD卡中

ui_demo.c :负责样式切换,按键控制

page0_photo_choice_show():界面(特效样式)的切换,配置图像合成模式

ui_camera_key_control():按键控制

enum video_show_mode {//枚举特效样式,其排列顺序影响到样式切换的顺序,与上述ui_demo.c中的两个函数搭配使用
   SH_MAIN_PAGE = 0,//主界面
   SH_BOOTH_1,//大头贴1
   SH_BOOTH_2,//大头贴2
   SH_BOOTH_3,//大头贴3
   SH_FLIP_LR,//万花筒-左右对称
   SH_QUADRATE,//万花筒-正方形
   SH_QUADRATE_UNIFROM,//万花筒
   SH_VERTICAL_STRIPE,//万花筒
   SH_DOWN_SAMP,//万花筒
   SH_REFLECTION_P,//万花筒
   SH_FOUR_CORNER,//万花筒
   SH_ROTATE_180,//万花筒
   SH_MULTIPLE_1,//多窗口拍照1
   SH_MULTIPLE_2, //多窗口拍照2
   SH_MULTIPLE_3, //多窗口拍照3
   SH_MULTIPLE_4, //多窗口拍照4
   SH_MODE_END,//结束标志
};

ui_demo.h :枚举拍照样式,用于按下拍照键后的区分模式标志

enum take_photo_mode {
   PHOTO_MODE_TAKE_BOOTH = 1,
   PHOTO_MODE_TAKE_KALEIDOSCOPE,
   PHOTO_MODE_TAKE_MULTIPLE_1,
   PHOTO_MODE_TAKE_MULTIPLE_2,
   PHOTO_MODE_TAKE_MULTIPLE_3,
   PHOTO_MODE_TAKE_MULTIPLE_4,
};

app_config.h :对应特效的拍照功能开关

#define PROCESS_EFFECT     1//万花筒
#define PHOTO_BOOTH        1//大头贴
#define MULTIPLE           1//多图像合成

通过路径 ui_project/3.ui_demo_wifi_camera/ui_320×480_test/step1-打开UI绘图工具 打开UI布局工具,UI资源可以自行添加修改,UI图层通过ID号进行控制

例如使用ui_hide_mian(ID)、ui_show_main(ID)、ui_pic_show_image_by_id(ID, mub)等函数控制UI图层显示或隐藏

UI布局工具使用说明请参考 ui_project/UI工具使用说明/UI布局工具使用说明.pdf

每个UI工程目录下的ename.h中有对应的ID号及其地址(从新生成资源文件时自动生成)

#define BASEFORM_1 0X394B2
#define BASEFORM_10 0X4880CA
#define BASEFORM_100 0X87477
#define BASEFORM_101 0X99DF3
#define BASEFORM_102 0X87BE0
//...

工程目录下的ename.h要与 wifi_camera/include/ename.h 保持一致,开源板在生成资源文件时会自动覆盖,若发现没有覆盖则需要手动添加。

  • 参考使用以上提及的工具、文件以及相关函数添加样式,删减样式,修改样式。

4.5.4. 其他说明

  • 儿童相机例程的图像合成有8种模式,通过set_photo_compose_mode(u8 mode, u8 choice_show_piece)进行切换

    mode:mode=0:UI数据叠加到摄像头数据上(用于大头贴特效);mode=4~7:摄像头数据叠加到UI数据上(用于多窗口拍照,对应四种样式)

    choice_show_piece:用于mode=4~7,控制图像合成分片。

  • set_lcd_show_data_mode(u8 choice_data_mode)用来控制UI和camera数据合成模式

    choice_data_mode 选填如下

    enum data_mode {
       camera,     //只有摄像头数据做数据处理
       ui,         //只有UI数据做数据处理
       ui_camera,  //UI数据与摄像头数据做数据处理
    };
    
  • 图传、录卡或者UVC显示的摄像头-高帧率说明

    (1)、修改app_config.h的VIDEO_REC Buffer模式和输出帧率

    (2)、确定工程没有打开 CONFIG_NO_SDRAM_ENABLE 宏,高帧率需要使用SDRAM。

    (3)、修改video_buf_config.h的应用层视频缓冲区大小。

    A:当使用SD卡录像则可以修改:VREC0_FBUF_SIZE 和 AUDIO_BUF_SIZE大小;当需要提高视频帧率或者视频卡顿现象,改大:VREC0_FBUF_SIZE(一般VGA 500K, 720P 800K);当需要提高音频卡顿现象,改大:AUDIO_BUF_SIZE(一般128K)。

    B:当使用网络图传或UVC显示则可以修改:NET_VREC0_FBUF_SIZE 和 NET_AUDIO_BUF_SIZE大小;当需要提高视频帧率或者视频卡顿现象,改大:NET_VREC0_FBUF_SIZE (一般VGA 300K,720P 500K);当需要提高音频卡顿现象,改大:NET_AUDIO_BUF_SIZE(一般128K)。

    (4):在图传中需要提高图片质量:在net_video_rec.c中修改码率,适当提高码率(1000-6000)。 net_video_rec_get_abr() 函数。