# 代码目录结构
- hi3518: RN1 摄像头软件代码
- server: video gateway代码
- vendor: 所有第三方依赖库的代码和编译出来的 lib 和 include

# 编译步骤
## 环境设置
### 手动准备环境
- 安装XM提供的编译包: 链接: https://pan.baidu.com/s/1jx9PSU5Xqtu336Y3J0GDYQ 提取码: auw7
解压, 然后编译

### 虚拟机镜像
- 下载 virtual box 的虚拟机镜像到本地 url: 
- 使用 virtual box 导入虚拟机
- clone源代码
- 把宿主机含有代码的路径 mount 到虚拟机中.  虚拟机的 root 密码为 123456
  - 目前虚拟机镜像的 mount 路径为/mnt/shared 第一次导入的时候会提示, 可以修改成指定的路径. 

### 切换交叉编译环境

```
su -
source /root/setenv.sh
```

### 编译依赖库
- clone vendor目录下各依赖的第三方库以及ffmpeg源代码并编译安装
    - 其中 fmt, zmq, jsoncons, spdlog 是hi3518及server都用到的
    - libav*(ffmpeg)只有server用到
    - paho.mqtt.c只有hi3518用到
- 可以直接到 github 中按照依赖库的名字搜索. 下载 latest release 的 zip 包到任意路径, 然后按照github 仓库中的 readme 进行编译和安装. 
    - 这里需要注意的是, 如果宿主机是 windows 或者 mac, mount 到虚拟机中的路径不支持创建 symlink. 所以不能下载到 mount 的路径下编译. 需要copy 到虚拟机中的其他目录. 
    编译完成之后再把 lib 和 include 里的内容 copy 到 相应的路径中, 例如vendor/hi3518/include
    - 指定安装路径的方法是指定 cmake 的参数 -DCMAKE_INSTALL_PREFIX   下面以 fmt 为例
    ```
    # 下载 fmt, 
    wget https://github.com/fmtlib/fmt/releases/download/7.0.1/fmt-7.0.1.zip
    unzip -d fmtxxxxx.zip
    cd fmt

    # 创建 install 目录
    mkdir /root/fmt_build


    cmake -DCMAKE_INSTALL_PREFIX=/root/fmt_build .
    make install
    
    ## copy inlude 和 lib 中的内容
    cd /root/fmt_build
    cp /root/fmt_build/include/ -r <source_path>/vendor/hi3518/include/
    cp /root/fmt_build/lib/ -r -r <source_path>/vendor/hi3518/lib/
    ```
    
    当使用 linux 的时候可以直接设置-DCMAKE_INSTALL_PREFIX 为
    - hi3518用到的库的安装路径是 <source_path>/vendor/hi3518
    - server用到的库的安装路径是 <source_path>/vendor/x64

    以下是所有依赖的 github 列表
    * fmt: https://github.com/fmtlib/fmt/releases/download/7.0.1/fmt-7.0.1.zip
    * zmq: https://github.com/zeromq/libzmq/releases/tag/v4.3.2
    * jsoncons: https://github.com/danielaparker/jsoncons/releases/tag/v0.154.3
    * spdlog: https://github.com/gabime/spdlog/releases/tag/v1.7.0
    * mqtt.c: https://github.com/eclipse/paho.mqtt.c/releases/tag/v1.3.4
    
    
### 编译
  - evcamera
    在 hi3518 下运行 make 就可以编译出一个独立的可执行文件 evcamera. 
  
  - vgw
    在 server 下运行 make 就可以编译出一个独立的可执行文件 vgw. 

    vgw 运行只需要依赖两个环境变量
    * DARWIN_URL   easy darwin 的 url, 如果没有, 使用默认的 rtsp://evcloudsvc.ilabservice.cloud:554
    * LOG_LEVEL   日志输出等级.  如果没有, 日志 level 为 debug

    