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()
函数。